aria-roles-valid
role属性は有効で抽象的でないARIAロールである必要があります
明示的なrole=""属性が、実在する抽象的でないWAI-ARIAロールに解決されることを確認します。
適用範囲:合成DOM内で、空でないrole=""属性を持つすべての要素に適用されます。
期待される結果:少なくとも1つのロールトークンが、具体的で抽象的でないARIAロールを指しています。どのトークンも該当しない場合に要素が何にフォールバックするかで判定します。
- ロールを持たないホスト(div、span、カスタム要素)ではFAIL。genericとして公開されたままになり、作成者が意図したロールは誰にも伝わりません。
- 要素がネイティブのロールを持つ場合(<button>、<nav>、<a href>)はCANTTELL。アクセシビリティツリーではそのロールが使われ続けます。ACT 674b10は4.1.2を副次的な要件としてのみ挙げ、「暗黙のロールによって満たされる」としているため、不正なトークンは報告する価値がありますが、それ自体が達成基準の不適合ではありません。
検出結果が報告する内容:
role:role属性の最初のトークンです。属性内のどのトークンも既知のロールでないか、既知のものがすべて抽象ロールです。nativeRole(cantTellの場合):要素のネイティブのロールで、支援技術はこれを使い続けます。
これらのdata.detailsのフィールドは、検出結果を読み解き、再現するのに役立ちます。reasonCodeと、出力スキーマで安定と明記された一部のフィールドを除き、安定した契約ではありません。マイナーリリースで名前が変わったり、なくなったりすることがあるため、これらに依存した実装はしないでください。
例
<div role="button">Click</div>
"button"は実在する具体的なARIAロールです。
<div role="buton"></div>
"buton"は定義されたARIAロールのトークンではありません(タイプミス)。
確認方法
このルールが判断できない場合はcantTellを報告し、判断を人に委ねます。ルールが投げかける各質問を、理由コードごとに、答えるための手順とともにここに示します。検出結果にも同じ手順がhowToCheckとして、スキャンの言語で含まれます。出力スキーマを参照してください。
ARIA_ROLE_ABSTRACT
- レポートに示された要素を調べ、抽象ロール(landmark、widget、commandなど)とそのタグを控えてください。
- ブラウザーの開発者ツールでアクセシビリティペインを開き、代わりに公開されているロール(ネイティブのロール)を確認してください。
- ネイティブのロールが、指定された抽象ロールの具体的な種類であるか(landmarkに対するnav、widgetに対するbutton)を判断してください。
満たす場合:ネイティブのロールは作成者が指定したものの具体的な形であるため、要素は引き続き正しく公開されています(ただし抽象ロールは削除してください)。
満たさない場合:ネイティブのロールが意図と一致しない(landmarkと指定されたボタンなど)ため、意図されたロールが公開されることはなく、WCAG 4.1.2を満たしません(ACT 674b10)。
ARIA_ROLE_INVALID
- レポートに示された要素を調べ、不明なロールの値とそのタグを控えてください。
- どのロールが意図されていたかを推測してください(たとえば「buton」ならbutton)。
- ブラウザーの開発者ツールでアクセシビリティペインを開き、代わりに公開されているロール(要素のネイティブのロール)を確認してください。
- 公開されているロールを、意図されたロールおよび要素の動作と比べてください。
満たす場合:公開されているネイティブのロールが意図されたものであるため、利用者には正しいロールが伝わります(ただし誤字は修正してください)。
満たさない場合:意図されたロールと公開されているロールが異なるため、利用者に誤ったロールが伝わり、WCAG 4.1.2を満たしません(ACT 674b10)。