Menu

HTML Label: das for-Attribut und Formularfelder beschriften

So gibt das <label>-Element einem Formularfeld seinen Namen: verbinden mit for und id oder durch Umschließen, die größere Klickfläche bei Checkboxen und Radio Buttons, Hinweise und Fehlermeldungen, versteckte Labels und die Fehler, die die Verbindung kaputt machen.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Was das label-Element macht

<label> gibt einem Formularfeld seinen Namen. Verbinde es über for mit der id des Feldes, und zwei Dinge passieren: Screenreader sagen das Label an, wenn das Feld fokussiert wird, und ein Klick auf den Labeltext fokussiert das Feld. Klick beide Texte unten an:

Ein Klick auf „City“ setzt den Cursor in sein Feld. Ein Klick auf „Country“ bewirkt nichts, und ein Screenreader, der das zweite Feld fokussiert, sagt nur „Eingabefeld“ an, ohne Namen. Die beiden sehen identisch aus; nur eines ist beschriftet.

Zwei Wege, ein Label zu verbinden

Nimm for und id oder setz das Feld in das Label:

for und idUmschließen
Braucht eine idJa, eindeutig auf der SeiteNein
Label und Feld können getrennt stehenJa (eine Tabellenzelle, ein Grid)Nein, das Feld steht darin
Leicht kaputt zu machenDurch einen Tippfehler oder eine doppelte idDurch zwei Felder in einem Label

for muss zur id des Feldes passen, nicht zu seinem name. Oft sind beide dasselbe Wort, was den Fehler verbirgt, bis jemand eines davon ändert. Beides zu machen (umschließen und for) ist in Ordnung und verbreitet.

Ein Label kann mit <input> (außer type="hidden"), <select>, <textarea>, <button>, <meter>, <output> und <progress> verbunden werden. Ein Label benennt ein Feld. Ein Feld kann mehr als ein Label haben, aber ein einziges klares Label ist für alle einfacher.

Eine größere Klickfläche für Checkboxen und Radio Buttons

Bei kleinen Bedienelementen zählt das Label am meisten: Ein Klick irgendwo darauf schaltet das Kästchen um, die Klickfläche ist also die ganze Textzeile und kein 13 Pixel großes Quadrat. Mit Styling am Label wird die Fläche noch größer:

Klick in den Innenabstand jeder Zeile, abseits des Kästchens. Die erste Zeile schaltet um; die zweite bewirkt nichts, solange du nicht das Kästchen selbst triffst. Mehr zu Checkboxen unter HTML Checkbox.

Hinweise und Fehlermeldungen

Ein Label sollte kurz sein: der Name des Feldes. Zusätzliche Anweisungen und Fehlermeldungen kommen in eigene Elemente, verbunden über aria-describedby, damit Screenreader zuerst das Label und danach die Beschreibung vorlesen:

Drück auf Create mit leerem Feld, dann mit AB, dann mit ada99. Mit aria-describedby sagt ein Screenreader etwa „Username, erforderlich, Eingabefeld, 3 to 16 lowercase letters or digits, Enter a username.“ an. Das Sternchen ist aria-hidden, weil das Attribut required schon „erforderlich“ sagt; „Stern“ zu hören bringt nichts.

Versteckte Labels

Manche Felder haben einen anderen sichtbaren Hinweis als ein Textlabel, etwa ein Suchfeld neben einem Search-Button. Das Label wird trotzdem gebraucht; versteck es optisch, aber lass es für Screenreader auf der Seite:

Versteck es nicht mit display: none oder visibility: hidden: Die verstecken es auch vor Screenreadern, und nicht jeder Browser und Screenreader verwendet ein verstecktes Label noch als Namen. Die andere Möglichkeit ist aria-label="Search courses" am Input, das es ganz ohne label-Element benennt. Ein sichtbares Label bleibt die beste Wahl, wo immer Platz ist: Allen hilft es, zu sehen, wofür ein Feld da ist.

Häufige Fehler

  • for zeigt auf den name statt auf die id. Nichts wird verbunden.
  • Doppelte ids. for verbindet sich mit dem ersten Element mit dieser id, und das kann ein Feld in einem anderen Formular auf der Seite sein.
  • Platzhalter statt Label. Er verschwindet beim Tippen und ist kein zuverlässiger Name.
  • Zwei Felder in einem Label. Ein Label benennt ein Feld; das zweite bleibt unbeschriftet.
  • Ein Link im Label einer Checkbox, etwa „I accept the terms“ mit „terms“ als Link. Ein Teil der Zeile schaltet das Kästchen um, ein anderer öffnet eine Seite, und man trifft leicht das Falsche. Setz den Link außerhalb des Labels.
  • Das Label mit display: none verstecken. Nimm eine Klasse, die es nur optisch versteckt.
  • Text neben einem Feld, der kein <label> ist. Er sieht gleich aus und bewirkt nichts. Das Formular um deine Felder erklärt die Seite zum HTML Formular.

Häufig gestellte Fragen

Was macht das label-Tag in HTML?

Es gibt einem Formularfeld einen Namen. Screenreader lesen das Label vor, wenn das Feld fokussiert wird, und ein Klick auf das Label fokussiert das Feld oder schaltet es bei einer Checkbox oder einem Radio Button um.

Was ist das for-Attribut bei einem Label?

for enthält die id des Feldes, zu dem das Label gehört: <label for="email">Email</label> <input id="email">. Es muss exakt zur id passen, nicht zum name.

Soll ich das Input ins Label setzen oder for verwenden?

Beides funktioniert in aktuellen Browsern und Screenreadern. Umschließen braucht keine ids; mit for und id können Label und Feld an verschiedenen Stellen im Markup stehen, etwa in getrennten Tabellenzellen. Viele Teams umschließen und setzen zusätzlich for.

Kann ein Platzhalter ein Label ersetzen?

Nein. Der Platzhalter verschwindet, sobald der Leser tippt, hat oft wenig Kontrast und wird nicht zuverlässig als Name des Feldes angesagt. Nimm ein sichtbares <label> und den Platzhalter, wenn überhaupt, für einen Beispielwert.

Wie verstecke ich ein Label, behalte es aber für Screenreader?

Behalte das <label> und versteck es optisch mit einer Klasse, die es auf 1 Pixel verkleinert und abschneidet, statt mit display: none, das es auch vor Screenreadern versteckt. Für ein Feld ohne Platz für ein Label ist aria-label am Feld die Alternative.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S