Generator formularzy CSS

Wyniki

Formularze to najczęściej używana część większości stron i najmniej dopracowana w wielu z nich. Ten generator tworzy CSS kompletnego ostylowanego formularza: responsywną siatkę formularza, pary etykieta + input, textarea, selecty i widoczne stany focusu, w jednym spójnym stylu wizualnym. Ustaw kolor akcentu, promień narożników i odstęp, a następnie skopiuj arkusz stylów. CSS zachowuje natywną semantykę formularza, więc walidacja, obsługa klawiatury i czytniki ekranu działają.

Jak korzystać z generatora

  1. 1

    Ustaw kolor akcentu

    Kolor akcentu decyduje o obwódce focusu i kolorze obramowania każdego pola.

  2. 2

    Wybierz promień narożników

    Promień dotyczy inputów, textarea i selectów, dzięki czemu wszystkie mają spójny kształt.

  3. 3

    Ustaw odstęp

    Odstęp kontroluje pionową przestrzeń między polami w siatce formularza.

  4. 4

    Skopiuj CSS

    Kompletny arkusz stylów, który możesz wkleić i dostosować bez ruszania swojego HTML.

Bazowy formularz

<form class="form">
  <label class="field">
    <span class="field-label">Email</span>
    <input type="email" required>
    <span class="field-error">Please enter a valid email.</span>
  </label>

  <label class="field">
    <span class="field-label">Password</span>
    <input type="password" minlength="8" required>
  </label>

  <button type="submit" class="button">Sign up</button>
</form>
.field {
  display: block;
  margin-bottom: 1.25rem;
}
.field-label {
  display: block;
  font-weight: 500;
  margin-bottom: .25rem;
}
.field input {
  width: 100%;
  padding: .5rem .75rem;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
  background: #fff;
  transition: border-color 120ms, box-shadow 120ms;
}
.field input:focus-visible {
  outline: none;
  border-color: #2563eb;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);
}
.field input:invalid:not(:placeholder-shown) {
  border-color: #dc2626;
}
.field-error { display: none; color: #dc2626; font-size: .875rem; margin-top: .25rem; }
.field input:invalid:not(:placeholder-shown) ~ .field-error { display: block; }

Cztery częste style

Styl Czym jest Najlepszy do
Z obramowaniem Obramowanie wokół inputu, przezroczyste tło Formularze desktopowe, gęste układy
Z podkreśleniem Tylko dolne obramowanie Minimalistyczne / redakcyjne UI
Wypełniony Szare tło, bez obramowania UI inspirowane Material Design
Pływająca etykieta Etykieta wewnątrz, animuje się w górę przy focus/wartości Mobile-first, strony docelowe

Pływająca etykieta jest najładniejsza, ale wymaga dodatkowego markupu lub JavaScriptu do wykrycia stanu pustego. Wariant z obramowaniem jest najbardziej uniwersalny.

Lista kontrolna dostępności

  • Widoczna etykieta dla każdego inputu. Nigdy nie używaj placeholdera jako jedynej etykiety, znika przy focusie i nie spełnia kontrastu.
  • <label for> albo opakowujący <label>. Oba są poprawne; opakowywanie jest nieco łatwiejsze.
  • Wskaźnik focusu. Nigdy outline: none bez zamiennika. Użytkownicy klawiatury go potrzebują.
  • Komunikaty błędów: powiąż je przez aria-describedby na inpucie. Nie używaj samego koloru do oznaczania błędów, dołącz komunikat tekstowy lub ikonę.
  • Pola wymagane: użyj atrybutu required. Dodaj wizualny znacznik (gwiazdka) w etykiecie dla osób widzących.
  • Typy inputów: używaj type="email", type="tel", type="url", type="number". Klawiatury mobilne się dostosowują.
  • Atrybuty autocomplete: autocomplete="email", autocomplete="current-password" itd. Oszczędza użytkownikom mnóstwo pisania.

Natywne stany walidacji

CSS ma pseudoklasy dla poprawności formularza:

  • :required / :optional
  • :valid / :invalid
  • :in-range / :out-of-range (dla inputów liczbowych z min/max)
  • :placeholder-shown (pusty, placeholder widoczny)
  • :user-invalid (nieprawidłowy i użytkownik wszedł w interakcję, właściwy do stylów błędu)

Pseudoklasa :user-invalid to najczystszy sposób pokazania błędów dopiero po tym, jak użytkownik coś zrobił, unikając czerwonych obramowań przed interakcją. Wsparcie pojawiło się we wszystkich głównych przeglądarkach około 2023 roku.

Stan wyłączony

.field input:disabled {
  background: #f3f4f6;
  color: #9ca3af;
  cursor: not-allowed;
}

Wyłączone inputy nie są fokusowalne ani nie da się ich wysłać. Jeśli chcesz, by były fokusowalne dla czytników ekranu, użyj zamiast tego readonly, formularz wysyła wartość, ale użytkownik nie może jej edytować.

Najczęściej zadawane pytania

Nie. Placeholdery znikają, gdy tylko użytkownik zacznie pisać, więc nie mogą służyć jako etykiety. Poza tym tekst placeholdera ma zwykle niski kontrast i nie spełnia WCAG. Użyj widocznej etykiety plus opcjonalnego placeholdera dla podpowiedzi formatu.

Ponieważ :invalid stosuje się natychmiast do pustych pól wymaganych. Użyj :user-invalid (świadomego interakcji) albo połącz :invalid:not(:placeholder-shown) jako obejście w starszych przeglądarkach.

Ustaw appearance: none, usuń domyślną strzałkę, dodaj własną przez obraz tła lub opakowujący span z pseudoelementem-strzałką. Listy opcji w środku pozostają stylowane przez system i nie da się ich dostosować CSS-em.

Obu. Walidacja HTML (required, type, pattern) łapie proste przypadki bez JavaScriptu. JavaScript obsługuje reguły złożone (siła hasła, zależności między polami). Zawsze waliduj też po stronie serwera, walidacja po stronie klienta służy UX, nie bezpieczeństwu.

Powiązane narzędzia