tablist
Contrassegna un contenitore come la barra delle schede in un'interfaccia a schede. Contiene elementi figli con role="tab". Le schede e i tabpanel sono un pattern esclusivamente ARIA — non esiste un equivalente HTML nativo.
Quando utilizzarlo
Attorno alla riga (o colonna) di elementi role="tab" in un’interfaccia a schede. Il tablist DEVE avere un nome accessibile tramite aria-label o aria-labelledby — senza di esso, un utente di screen reader che sente «elenco schede» non riesce a distinguere quale tablist si trovi nella pagina.
Le barre di schede verticali richiedono aria-orientation="vertical". Il valore predefinito è orizzontale, quindi l’attributo può essere omesso per le schede disposte in orizzontale.
Se le «schede» in questione sono in realtà link di navigazione verso altri URL, è preferibile usare <nav> con link <a> — il pattern in cui il clic modifica l’URL non è compatibile con la semantica del tablist.
Contratto tastiera + focus
Secondo il pattern APG per le schede:
- Il tasto Tab sposta il focus nel tablist e sulla scheda selezionata; un ulteriore Tab sposta il focus fuori (tipicamente nel tabpanel attivo).
- I tasti freccia sinistra/destra spostano il focus tra le schede (su/giù per i tablist verticali). Il wrap-around è facoltativo ma convenzionale.
- Home / Fine saltano alla prima / ultima scheda.
- Attivazione: in modalità automatica, i tasti freccia spostano il focus E selezionano. In modalità manuale (consigliata quando l’attivazione è onerosa), Spazio o Invio selezionano la scheda focalizzata.
Il tablist stesso non gestisce il focus — il focus va sulla scheda, non sul contenitore tablist.
Errori comuni
- Tablist senza nome accessibile. Più tablist sulla stessa pagina diventano indistinguibili.
- Tutti i tab con
tabindex="0". Il pattern prevede un unico tab-stop; solo la scheda selezionata hatabindex="0". - Mancanza di
aria-orientation="vertical"su un tablist verticale — lo screen reader istruisce l’utente a usare i tasti sinistra/destra quando il layout visivo richiede su/giù. role="tablist"che racchiude link (<a href="#section">) invece di pulsanti. Lo scroll dell’ancora interrompe il funzionamento del pulsante indietro.- Tabpanel nascosto sia con
display: noneche con l’attributohiddenquando ne è sufficiente uno.
Esempio
<div role="tablist" aria-label="Project sections" aria-orientation="horizontal">
<button role="tab" id="t-overview" aria-selected="true" aria-controls="p-overview" tabindex="0">Overview</button>
<button role="tab" id="t-files" aria-selected="false" aria-controls="p-files" tabindex="-1">Files</button>
<button role="tab" id="t-team" aria-selected="false" aria-controls="p-team" tabindex="-1">Team</button>
</div>