La maggior parte dei ruoli che vedi sono stati definiti come parte di ARIA 1.0 e successivamente incorporati in HTML5. Alcuni dei nuovi elementi HTML5 (finestra di dialogo, principale, ecc.) Sono persino basati sui ruoli ARIA originali.
http://www.w3.org/TR/wai-aria/
Esistono due motivi principali per utilizzare i ruoli oltre all'elemento semantico nativo.
Motivo n. 1. Sostituzione del ruolo in cui nessun elemento della lingua host è appropriato o, per vari motivi, è stato utilizzato un elemento meno semanticamente appropriato.
In questo esempio, è stato utilizzato un collegamento, anche se la funzionalità risultante è più simile a un pulsante rispetto a un collegamento di navigazione.
<a href="#" role="button" aria-label="Delete item 1">Delete</a>
Gli screen reader sentiranno questo come un pulsante (anziché un collegamento) e puoi usare un selettore di attributi CSS per evitare class-itis e div-itis.
*[role="button"] {
/* style these a buttons w/o relying on a .button class */
}
Motivo n. 2. Backup del ruolo di un elemento nativo, per supportare i browser che hanno implementato il ruolo ARIA ma non hanno ancora implementato il ruolo dell'elemento nativo.
Ad esempio, il ruolo "principale" è stato supportato nei browser per molti anni, ma è un'aggiunta relativamente recente a HTML5, quindi molti browser non supportano ancora la semantica <main>
.
<main role="main">…</main>
Questo è tecnicamente ridondante, ma aiuta alcuni utenti e non ne danneggia nessuno. Tra qualche anno, questa tecnica diventerà probabilmente superflua.
Hai anche scritto:
Vedo che alcune persone si inventano da sole. È consentito o un uso corretto dell'attributo ruolo?
Questo è un uso valido dell'attributo a meno che non sia incluso un ruolo reale. I browser applicheranno il primo ruolo riconosciuto nell'elenco token.
<span role="foo link note bar">...</a>
Fuori dall'elenco, solo link
e note
sono ruoli validi, quindi il ruolo di collegamento verrà applicato perché viene prima. Se usi ruoli personalizzati, assicurati che non siano in conflitto con nessun ruolo definito in ARIA o nella lingua host che stai utilizzando (HTML, SVG, MathML, ecc.)