Większość ról, które widzisz, zdefiniowano jako część ARIA 1.0, a następnie włączono do HTML5. Niektóre nowe elementy HTML5 (okno dialogowe, główne itp.) Są nawet oparte na oryginalnych rolach ARIA.
http://www.w3.org/TR/wai-aria/
Istnieją dwa podstawowe powody, aby używać ról oprócz natywnego elementu semantycznego.
Powód nr 1. Nadpisywanie roli, w której żaden element języka hosta nie jest odpowiedni lub, z różnych powodów, zastosowano mniej odpowiedni semantycznie element.
W tym przykładzie użyto łącza, mimo że uzyskana funkcjonalność jest bardziej podobna do przycisku niż łącza nawigacyjnego.
<a href="#" role="button" aria-label="Delete item 1">Delete</a>
Czytniki ekranu usłyszą to jako przycisk (w przeciwieństwie do linku), a możesz użyć selektora atrybutów CSS, aby uniknąć class-itis i div-itis.
*[role="button"] {
/* style these a buttons w/o relying on a .button class */
}
Powód nr 2. Tworzenie kopii zapasowej roli elementu rodzimego w celu obsługi przeglądarek, które zaimplementowały rolę ARIA, ale jeszcze nie zaimplementowały roli elementu rodzimego.
Na przykład „główna” rola jest obsługiwana w przeglądarkach od wielu lat, ale jest to stosunkowo nowy dodatek do HTML5, więc wiele przeglądarek nie obsługuje jeszcze semantycznego <main>
.
<main role="main">…</main>
Jest to technicznie zbędne, ale pomaga niektórym użytkownikom i nie szkodzi nikomu. Za kilka lat ta technika prawdopodobnie stanie się niepotrzebna.
Napisałeś także:
Widzę, że niektórzy ludzie tworzą własne. Czy to dozwolone, czy prawidłowe użycie atrybutu roli?
To prawidłowe użycie atrybutu, chyba że nie uwzględniono prawdziwej roli. Przeglądarki zastosują pierwszą rozpoznaną rolę na liście tokenów.
<span role="foo link note bar">...</a>
Z listy, tylko link
i note
są ważne role, a więc roli łącza będzie stosowana, ponieważ jest na pierwszym miejscu. Jeśli używasz niestandardowych ról, upewnij się, że nie kolidują one z żadną zdefiniowaną rolą w ARIA lub używanym języku hosta (HTML, SVG, MathML itp.)