Menu

Label HTML: l'attributo for e come etichettare i campi

Come l'elemento <label> dà un nome a un campo di un modulo: collegarlo con for e id o racchiudendo il campo, l'area cliccabile più grande per checkbox e radio, suggerimenti e messaggi di errore, etichette nascoste e gli errori che rompono il collegamento.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Cosa fa l'elemento label

<label> dà un nome a un campo di un modulo. Collegalo con for, impostato sull'id del campo, e succedono due cose: gli screen reader annunciano l'etichetta quando il campo riceve il focus, e cliccando il testo dell'etichetta il focus passa al campo. Clicca entrambi i testi qui sotto:

Cliccando "City" il cursore va nel suo campo. Cliccando "Country" non succede niente, e uno screen reader che arriva su quel secondo campo sente solo "modifica testo", senza nome. I due sembrano identici; solo uno ha un'etichetta.

Due modi per collegare un'etichetta

Usa for e id, oppure metti il campo dentro l'etichetta:

for e idCampo racchiuso
Serve un idSì, unico nella paginaNo
Etichetta e campo possono stare separatiSì (una cella di tabella, una griglia)No, il campo è dentro
Facile da rompereCon un refuso o un id duplicatoMettendo due campi in un'etichetta

for deve corrispondere all'id del campo, non al suo name. Spesso sono la stessa parola, e questo nasconde l'errore finché qualcuno non ne cambia uno. Fare entrambe le cose (racchiudere il campo e usare for) va bene ed è comune.

Un'etichetta si può collegare a <input> (tranne type="hidden"), <select>, <textarea>, <button>, <meter>, <output> e <progress>. Un'etichetta dà il nome a un solo campo. Un campo può avere più di un'etichetta, ma un'unica etichetta chiara è più semplice per tutti.

Un'area cliccabile più grande per checkbox e radio

L'etichetta conta soprattutto per i controlli piccoli: cliccando in qualsiasi punto dell'etichetta la casella cambia stato, quindi l'area cliccabile è l'intera riga di testo, non un quadratino di 13 pixel. Dando uno stile all'etichetta l'area diventa ancora più grande:

Clicca nel padding di ogni riga, lontano dalla casella. La prima riga cambia stato; la seconda non fa niente a meno di colpire proprio la casella. Trovi di più sulle checkbox in checkbox HTML.

Suggerimenti e messaggi di errore

Un'etichetta deve essere breve: il nome del campo. Le istruzioni aggiuntive e i messaggi di errore vanno in elementi separati, collegati con aria-describedby, così gli screen reader leggono prima l'etichetta e poi la descrizione:

Premi Create con il campo vuoto, poi con AB, poi con ada99. Con aria-describedby, uno screen reader annuncia qualcosa come "Username, obbligatorio, modifica testo, 3 to 16 lowercase letters or digits, Enter a username." L'asterisco ha aria-hidden perché l'attributo required dice già "obbligatorio"; sentire "asterisco" non aggiunge nulla.

Etichette nascoste

Alcuni campi hanno un indizio visibile diverso da un'etichetta di testo, come una casella di ricerca accanto a un pulsante Search. L'etichetta serve comunque; nascondila alla vista ma lasciala nella pagina per gli screen reader:

Non nasconderla con display: none o visibility: hidden: così la nascondi anche agli screen reader, e non tutti i browser e gli screen reader usano ancora un'etichetta nascosta come nome. L'altra possibilità è aria-label="Search courses" sull'input, che gli dà un nome senza nessun elemento label. Un'etichetta visibile resta la scelta migliore ogni volta che c'è spazio: vedere a cosa serve un campo aiuta tutti.

Errori comuni

  • for che punta al name invece che all'id. Non si collega niente.
  • Id duplicati. for si collega al primo elemento con quell'id, che può essere un campo di un altro modulo nella pagina.
  • Placeholder al posto di un'etichetta. Sparisce quando scrivi e non è un nome affidabile.
  • Due campi dentro un'etichetta. Un'etichetta dà il nome a un solo campo; il secondo resta senza etichetta.
  • Un link dentro l'etichetta di una checkbox, come "Accetto le condizioni" con "condizioni" come link. Una parte della riga cambia lo stato della casella e un'altra apre una pagina, ed è facile sbagliare. Metti il link fuori dall'etichetta.
  • Nascondere l'etichetta con display: none. Usa una classe che la nasconde solo alla vista.
  • Testo accanto a un campo che non è un <label>. Ha lo stesso aspetto e non fa niente. Per il modulo che contiene i tuoi campi, vedi form HTML.

Domande frequenti

Cosa fa il tag label in HTML?

Dà un nome a un campo di un modulo. Gli screen reader leggono l'etichetta quando il campo riceve il focus, e cliccando l'etichetta il focus passa al campo, oppure lo seleziona e deseleziona se è una checkbox o un radio button.

Cos'è l'attributo for di un label?

for contiene l'id del campo a cui appartiene l'etichetta: <label for="email">Email</label> <input id="email">. Deve corrispondere esattamente all'id, non al name.

Metto l'input dentro il label o uso for?

Entrambi i modi funzionano nei browser e negli screen reader attuali. Racchiudere il campo non richiede id; for e id permettono a etichetta e campo di stare in punti diversi del markup, come celle di tabella separate. Molti team racchiudono il campo e aggiungono anche for.

Un placeholder può sostituire un label?

No. Il placeholder sparisce appena si inizia a scrivere, spesso ha poco contrasto e non sempre viene annunciato come nome del campo. Usa un <label> visibile e lascia il placeholder per un valore di esempio, se proprio serve.

Come nascondo un label ma lo lascio agli screen reader?

Tieni il <label> e nascondilo solo alla vista con una classe che lo riduce a 1 pixel e lo ritaglia, invece di display: none, che lo nasconde anche agli screen reader. Per un campo senza spazio per nessuna etichetta, l'alternativa è aria-label sul campo.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA