Label accessibili per select, textarea e campi speciali

by Anastasia P.
SHARE
Label accessibili per select, textarea e campi speciali
© Guida-HTML5.it

Introduzione

Quando si parla di accessibilità dei form HTML, l’attenzione si concentra spesso sugli elementi <input>. Tuttavia, un modulo può contenere anche menu a tendina, aree di testo, campi per date, caricamento di file e caselle di ricerca. Tutti questi controlli devono avere un’etichetta chiara e correttamente associata.

Un’etichetta ben progettata permette agli utenti di capire che cosa inserire, indipendentemente dal dispositivo o dalla tecnologia assistiva utilizzata. Un lettore di schermo, per esempio, annuncia il nome del campo quando questo riceve il focus. Se la label manca o non è collegata, l’utente potrebbe sentire soltanto “casella di modifica” o “menu”, senza sapere quale informazione fornire.

In questo tutorial vedremo come usare le label con elementi diversi dal semplice input testuale. L’obiettivo è costruire un modulo realistico per raccogliere una richiesta di assistenza, mantenendo una struttura semantica, navigabile da tastiera e comprensibile.

Codice completo

<form action="/assistenza" method="post" enctype="multipart/form-data">
  <h2>Richiedi assistenza</h2>

  <p>
    I campi contrassegnati con <strong>*</strong> sono obbligatori.
  </p>

  <div>
    <label for="categoria">Categoria della richiesta *</label>
    <select id="categoria" name="categoria" required>
      <option value="">Seleziona una categoria</option>
      <option value="account">Account e accesso</option>
      <option value="pagamento">Pagamenti e fatturazione</option>
      <option value="tecnico">Problema tecnico</option>
    </select>
  </div>

  <div>
    <label for="descrizione">Descrivi il problema *</label>
    <textarea
      id="descrizione"
      name="descrizione"
      rows="6"
      required></textarea>
  </div>

  <div>
    <label for="data-preferita">Data preferita per il ricontatto</label>
    <input
      type="date"
      id="data-preferita"
      name="data-preferita">
  </div>

  <div>
    <label for="allegato">Allega uno screenshot, se necessario</label>
    <input
      type="file"
      id="allegato"
      name="allegato"
      accept="image/png, image/jpeg, application/pdf">
  </div>

  <div>
    <label for="email">Indirizzo email per la risposta *</label>
    <input
      type="email"
      id="email"
      name="email"
      autocomplete="email"
      required>
  </div>

  <button type="submit">Invia richiesta</button>
</form>

Spiegazione

Label e menu select

L’elemento <select> deve avere una label che spieghi il significato del menu. Il collegamento viene creato usando un valore identico tra l’attributo for della label e l’attributo id del select:

<label for="categoria">Categoria della richiesta</label>
<select id="categoria" name="categoria">
  ...
</select>

Il testo della prima <option> funziona come istruzione iniziale, ma non sostituisce la label. La label identifica il controllo; l’opzione indica invece quale valore scegliere. Per un campo obbligatorio è utile usare un’opzione iniziale con value="", così il browser può verificare che l’utente abbia effettuato una scelta reale.

Label e textarea

Una <textarea> non dovrebbe essere identificata soltanto tramite un testo segnaposto. Il placeholder scompare quando l’utente inizia a scrivere e non rappresenta una vera etichetta accessibile.

<label for="descrizione">Descrivi il problema</label>
<textarea id="descrizione" name="descrizione"></textarea>

È preferibile lasciare la textarea vuota e posizionare le istruzioni nella label o in un testo separato. In questo modo il nome del campo rimane disponibile anche dopo l’inserimento del contenuto.

Campi data e file

Anche i controlli specializzati, come type="date" e type="file", richiedono una label. Il browser può mostrare un’interfaccia diversa in base al sistema operativo, ma il collegamento semantico resta valido in ogni ambiente.

L’attributo accept limita i tipi di file suggeriti all’utente, ma non sostituisce una descrizione comprensibile. La label dovrebbe chiarire che cosa allegare e, quando necessario, quali formati sono accettati.

La differenza tra name e id

L’attributo id serve soprattutto a collegare la label al controllo e deve essere univoco nella pagina. L’attributo name identifica invece il dato inviato al server. In un form corretto, entrambi sono normalmente presenti, ma svolgono ruoli differenti.

Best practice

  • Usa una label visibile per ogni controllo che richiede un’informazione dall’utente.
  • Assicurati che ogni valore di for corrisponda a un solo id esistente.
  • Scrivi label specifiche: “Descrivi il problema” è più utile di “Messaggio”.
  • Non usare il placeholder come unica etichetta del campo.
  • Inserisci required solo sui campi realmente obbligatori.
  • Indica chiaramente il significato dell’asterisco e non affidarti esclusivamente al colore.
  • Usa autocomplete per dati comuni, come l’indirizzo email, così da velocizzare la compilazione.
  • Non nascondere la label con tecniche visive che la rendano indisponibile alle tecnologie assistive.
  • Controlla il modulo usando soltanto la tastiera: il focus deve raggiungere ogni campo in un ordine logico.
  • Verifica il risultato con un lettore di schermo e con gli strumenti di analisi del browser.

Riepilogo

Le label non sono limitate ai campi di testo: devono accompagnare anche select, textarea, date picker, upload di file e altri controlli del modulo. Il collegamento esplicito tramite for e id rende il rapporto tra descrizione e controllo riconoscibile da browser e tecnologie assistive.

Una buona label deve essere visibile, concisa e descrittiva. Placeholder, attributi tecnici e icone possono completare l’interfaccia, ma non devono sostituire l’etichetta. Partire da HTML semantico e da associazioni corrette consente di creare form più comprensibili per tutti gli utenti.

Approfondisci con risorse ufficiali

SHARE