Pseudoklasa CSSPseudoklasy

:invalid

Pasuje do pól formularza, których wartość łamie reguły walidacji HTML, np. do pustego pola wymaganego albo błędnego adresu e-mail.

Na tej stronie

Przykład

#
CSS
.error {
  display: none;
  color: #fda4af;
}

.field input:user-invalid {
  border-color: #f43f5e;
}

.field input:user-invalid + .error {
  display: block;
}
Podgląd

Wpisz tekst bez znaku @ i kliknij obok pola. Komunikat pojawia się dopiero po tej interakcji, a nie od razu po wczytaniu strony.

Definicja i zastosowanie

#

Pseudoklasa :invalid łączy CSS z wbudowaną walidacją formularzy. Pole pasuje do niej, gdy jego wartość łamie którąś z reguł zapisanych w HTML: required przy pustym polu, type="email" przy tekście, który nie jest adresem, a także pattern, min czy max. Przeciwieństwem jest :valid.

Stan zmienia się na bieżąco, przy każdym wpisanym znaku. Do :invalid pasują też <form> i <fieldset>, jeśli zawierają choć jedno błędne pole, co pozwala na przykład przygasić przycisk wysyłania.

Największa pułapka: puste pole z required jest błędne od razu po wczytaniu strony. Czerwone ramki, zanim użytkownik cokolwiek wpisał, wyglądają jak reprymenda. Rozwiązaniem jest :user-invalid, która włącza się dopiero po interakcji: po zmianie wartości i opuszczeniu pola albo po próbie wysłania formularza. Działa we wszystkich głównych przeglądarkach od 2023 roku. Starszy sposób to :not(:placeholder-shown):invalid.

Składnia

#
Składnia
selektor:invalid { właściwość: wartość; }

Typowe zastosowania

#
  • input:invalid

    Wszystkie błędne pola od razu. Puste pole wymagane świeci na czerwono, choć nikt go jeszcze nie dotknął.
  • input:valid

    Przeciwieństwo: pola z poprawną wartością. Popraw drugie pole na pełny adres, żeby zobaczyć zmianę.
  • input:user-invalid

    Czerwona ramka pojawia się dopiero po interakcji. Zmień wartość któregoś pola na błędną i kliknij obok.
  • input:not(:placeholder-shown):invalid

    Starszy sposób: błąd widać tylko w polach, które nie są puste. Puste pole wymagane zostaje neutralne.
  • form:invalid

    Formularz też pasuje do :invalid, gdy ma w środku choć jedno błędne pole.

Typowe zastosowania w praktyce

#

input:invalid

Wszystkie błędne pola od razu. Puste pole wymagane świeci na czerwono, choć nikt go jeszcze nie dotknął.
input:invalid { border-color: #f43f5e; }

input:valid

Przeciwieństwo: pola z poprawną wartością. Popraw drugie pole na pełny adres, żeby zobaczyć zmianę.
input:valid { border-color: #10b981; }

input:user-invalid

Czerwona ramka pojawia się dopiero po interakcji. Zmień wartość któregoś pola na błędną i kliknij obok.
input:user-invalid { border-color: #f43f5e; }

input:not(:placeholder-shown):invalid

Starszy sposób: błąd widać tylko w polach, które nie są puste. Puste pole wymagane zostaje neutralne.
input:not(:placeholder-shown):invalid { border-color: #f43f5e; }

form:invalid

Formularz też pasuje do :invalid, gdy ma w środku choć jedno błędne pole.
form:invalid {
  outline: 2px dashed #f43f5e;
  outline-offset: 4px;
}

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Nie pokazuj błędów, zanim użytkownik zacznie działać. Błędne pola wyróżniaj przez :user-invalid, a :invalid zostaw np. do przygaszania przycisku wysyłania.
  • Sam kolor nie wystarczy, bo nie każdy go rozróżnia. Dodaj obok pola komunikat tekstowy albo ikonę.
  • Walidacja w HTML i CSS to wygoda dla użytkownika, a nie zabezpieczenie. Dane i tak trzeba sprawdzić po stronie serwera.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.