表示されるほとんどの役割は、ARIA 1.0の一部として定義され、その後HTML5に組み込まれました。新しいHTML5要素のいくつか(ダイアログ、メインなど)は、元のARIAロールにも基づいています。
http://www.w3.org/TR/wai-aria/
ネイティブのセマンティック要素に加えてロールを使用する主な理由は2つあります。
理由#1。適切なホスト言語要素がない場合、またはさまざまな理由により、意味的にあまり適切でない要素が使用された場合の役割のオーバーライド。
この例では、結果の機能がナビゲーションリンクよりもボタンに似ていますが、リンクが使用されました。
<a href="#" role="button" aria-label="Delete item 1">Delete</a>
スクリーンリーダーはこれを(リンクではなく)ボタンとして認識します。CSS属性セレクターを使用して、class-itisやdiv-itisを回避できます。
*[role="button"] {
/* style these a buttons w/o relying on a .button class */
}
理由#2。ARIAロールを実装したが、まだネイティブ要素のロールを実装していないブラウザーをサポートするための、ネイティブ要素のロールのバックアップ。
たとえば、「メイン」の役割はブラウザで長年サポートされてきましたが、HTML5への比較的最近の追加であるため、多くのブラウザはまだのセマンティクスをサポートしていません<main>
。
<main role="main">…</main>
これは技術的に冗長ですが、一部のユーザーに役立ち、害はありません。数年後には、この手法はおそらく不要になるでしょう。
あなたも書いた:
自分で作る人もいます。それは許可されていますか、それとも役割属性の正しい使用ですか?
実際のロールが含まれていない限り、これは属性の有効な使用法です。ブラウザーは、トークンリストで最初に認識されたロールを適用します。
<span role="foo link note bar">...</a>
リストのうち、唯一link
かつnote
有効な役割であり、それが最初に来るので、リンクの役割が適用されますので。カスタムの役割を使用する場合は、ARIAで定義されている役割や使用しているホスト言語(HTML、SVG、MathMLなど)と競合しないようにしてください。