Menu

Label w HTML: atrybut for i etykiety pól formularza

Jak element <label> nadaje nazwę polu formularza: połączenie przez for i id albo przez objęcie pola, większy obszar kliknięcia dla checkboxów i radio, podpowiedzi i komunikaty o błędach, ukryte etykiety oraz błędy, które zrywają połączenie.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Co robi element label

<label> nadaje polu formularza nazwę. Połącz go przez for z wartością id pola, a zyskasz dwie rzeczy: czytniki ekranu odczytają etykietę, gdy pole dostanie fokus, a kliknięcie tekstu etykiety przeniesie fokus na pole. Kliknij oba teksty poniżej:

Kliknięcie "City" ustawia kursor w polu. Kliknięcie "Country" nic nie robi, a czytnik ekranu na drugim polu powie tylko "edit text", bez żadnej nazwy. Oba wyglądają tak samo; tylko jedno ma etykietę.

Dwa sposoby połączenia etykiety

Użyj for i id albo umieść pole wewnątrz etykiety:

for i idObjęcie pola
Wymaga idTak, unikalnego na stronieNie
Etykieta i pole mogą być osobnoTak (komórka tabeli, siatka)Nie, pole jest w środku
Łatwo zepsućLiterówką albo zduplikowanym idWstawiając dwa pola do jednej etykiety

for musi odpowiadać id pola, a nie jego name. Często to to samo słowo, co ukrywa błąd, dopóki ktoś nie zmieni jednego z nich. Połączenie obu sposobów (objęcie i for) jest w porządku i spotykane często.

Etykietę można połączyć z <input> (poza type="hidden"), <select>, <textarea>, <button>, <meter>, <output> i <progress>. Jedna etykieta nazywa jedno pole. Pole może mieć więcej niż jedną etykietę, choć jedna jasna etykieta jest prostsza dla wszystkich.

Większy obszar kliknięcia dla checkboxów i radio

Przy małych kontrolkach etykieta ma największe znaczenie: kliknięcie w dowolnym jej miejscu przełącza pole, więc celem jest cała linia tekstu, a nie kwadrat 13 na 13 pikseli. Ostylowana etykieta może dać jeszcze większy obszar:

Kliknij w padding każdego wiersza, z dala od pola. Pierwszy wiersz się przełącza; drugi nie reaguje, chyba że trafisz w samo pole. Więcej o checkboxach w checkbox w HTML.

Podpowiedzi i komunikaty o błędach

Etykieta powinna być krótka: to nazwa pola. Dodatkowe instrukcje i komunikaty o błędach trafiają do osobnych elementów połączonych przez aria-describedby, dzięki czemu czytniki ekranu czytają najpierw etykietę, a po niej opis:

Naciśnij Create przy pustym polu, potem z AB, potem z ada99. Dzięki aria-describedby czytnik ekranu powie coś w rodzaju "Username, required, edit text, 3 to 16 lowercase letters or digits, Enter a username." Gwiazdka ma aria-hidden, bo atrybut required już mówi "required"; usłyszenie "star" niczego nie wnosi.

Ukryte etykiety

Niektóre pola mają inną widoczną wskazówkę niż tekstowa etykieta, na przykład pole wyszukiwania obok przycisku Search. Etykieta i tak jest potrzebna; ukryj ją wizualnie, ale zostaw na stronie dla czytników ekranu:

Nie ukrywaj jej przez display: none ani visibility: hidden: to ukrywa ją także przed czytnikami ekranu, a nie każda przeglądarka i czytnik ekranu wciąż używa ukrytej etykiety jako nazwy. Drugą opcją jest aria-label="Search courses" na polu input, które nadaje nazwę bez żadnego elementu label. Widoczna etykieta to nadal najlepszy wybór wszędzie, gdzie jest na nią miejsce: każdy zyskuje, widząc, do czego służy pole.

Częste błędy

  • for wskazujące na name zamiast na id. Nic się nie łączy.
  • Zduplikowane id. for łączy się z pierwszym elementem o tym id, a może to być pole w innym formularzu na stronie.
  • Placeholder zamiast etykiety. Znika podczas pisania i nie jest pewną nazwą.
  • Dwa pola w jednej etykiecie. Etykieta nazywa jedno pole; drugie zostaje bez etykiety.
  • Link wewnątrz etykiety checkboxa, na przykład "Akceptuję regulamin" ze słowem "regulamin" jako linkiem. Część linii przełącza pole, a część otwiera stronę, więc łatwo trafić przez pomyłkę. Umieść link poza etykietą.
  • Ukrywanie etykiety przez display: none. Użyj klasy ukrywającej wizualnie.
  • Tekst obok pola, który nie jest <label>. Wygląda tak samo i nic nie robi. O formularzu wokół pól przeczytasz w formularze HTML.

Najczęściej zadawane pytania

Co robi znacznik label w HTML?

Nadaje nazwę polu formularza. Czytniki ekranu odczytują etykietę, gdy pole dostaje fokus, a kliknięcie etykiety przenosi fokus na pole albo przełącza je, jeśli to checkbox lub przycisk radio.

Czym jest atrybut for w elemencie label?

for zawiera id pola, do którego należy etykieta: <label for="email">Email</label> <input id="email">. Musi dokładnie odpowiadać id, a nie name.

Umieścić input w środku label czy użyć for?

Oba sposoby działają w obecnych przeglądarkach i czytnikach ekranu. Objęcie pola nie wymaga id; for i id pozwalają umieścić etykietę i pole w różnych miejscach kodu, na przykład w osobnych komórkach tabeli. Wiele zespołów obejmuje pole i dodatkowo dodaje for.

Czy placeholder może zastąpić label?

Nie. Placeholder znika, gdy tylko zaczniesz pisać, często ma słaby kontrast i nie zawsze jest odczytywany jako nazwa pola. Użyj widocznego <label>, a placeholder zostaw co najwyżej na przykładową wartość.

Jak ukryć label, ale zostawić go dla czytników ekranu?

Zostaw <label> i ukryj go wizualnie klasą, która zmniejsza go do 1 piksela i przycina, zamiast display: none, które ukrywa go także przed czytnikami ekranu. Gdy przy polu nie ma miejsca na żadną etykietę, alternatywą jest aria-label na samym polu.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ