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 linke notesono 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.)