aria-hidden-focus

ARIAで隠された要素をフォーカス可能にしてはいけません

automaticWCAG 4.1.2 (A)確度:high重大度:seriousrobust

aria-hidden="true"の要素がフォーカス可能でなく、フォーカス可能な子孫も含まないことを確認します。

適用範囲:aria-hidden="true"を持つ要素に適用されます。値は大文字と小文字を区別せず、前後の空白を無視して読み取ります(ブラウザーでもaria-hidden="TRUE"はコンテンツを隠します)。

期待される結果:aria-hidden="true"を持つ要素自体がフォーカス可能であってはならず、aria-hidden="true"のサブツリー内にフォーカス可能な要素が存在してはなりません。

検出結果が報告する内容:

  • metrics.focusableTotal:隠された要素が含むフォーカス可能な要素の数です。要素自体がフォーカス可能であれば、それも数えます。
  • metrics.focusableDescendants:そのうち、要素の内側にあるものの数です。
  • metrics.rootIsFocusable:隠された要素自体がフォーカスを受け取れるかどうかです。
  • offenders:フォーカス可能な要素を最大5つ挙げたものです。各項目には、そのtag、tabindex、href(リンクの場合)、type(inputの場合)、visibilityHintsが入ります。metrics.offendersCapturedは挙げられた数です。
  • metrics.visibilityHints:フォーカス可能な要素が、フォーカスを受け取れるまま見えなくされている方法で、opacityZero、offscreen、clipped、zeroSizeOverflowHiddenです。このような要素は、目の見えるキーボードユーザーには見えないフォーカスの停止位置になります。
  • metrics.modalOpen:ページの別の場所でモーダルダイアログが開いていたかどうかです。開いていた場合、検出結果はレビュー対象になります。
  • runtimeProbe:唯一のフォーカス可能な要素にフォーカスを当てたときに、フォーカスが隠された要素の外へ直接移った場合を除いてnullです。移った場合は、redirected: true、フォーカスの移動先の要素のタグとid(redirectedToTag、redirectedToId)、フォーカスが通過した要素を示すfocusTraceが入ります。このようにフォーカスを先へ渡す隠れたフォーカス用の番兵要素は、レビュー対象として報告されます。

これらのdata.detailsのフィールドは、検出結果を読み解き、再現するのに役立ちます。reasonCodeと、出力スキーマで安定と明記された一部のフィールドを除き、安定した契約ではありません。マイナーリリースで名前が変わったり、なくなったりすることがあるため、これらに依存した実装はしないでください。

例

pass
<div aria-hidden="true">
<p>Decorative text</p>
</div>

隠されたサブツリー内にフォーカス可能な要素がないため、支援技術から隠しても、何も伝わらないフォーカス位置は生じません。

fail
<div aria-hidden="true">
<a href="/x">Link</a>
</div>

aria-hiddenでアクセシビリティツリーから除外されているのに、リンクがタブ順序に残っています。

確認方法

このルールが判断できない場合はcantTellを報告し、判断を人に委ねます。ルールが投げかける各質問を、理由コードごとに、答えるための手順とともにここに示します。検出結果にも同じ手順がhowToCheckとして、スキャンの言語で含まれます。出力スキーマを参照してください。

ariaHiddenFocusable_modalOpen_needsReview

  1. ページで開いているモーダルダイアログの背後にある、レポートに示された要素を見つけ、その中でフォーカスを受け取れるものを控えてください。
  2. ダイアログを開いたままTabキーを何度か押し、次にShift+Tabを押して、フォーカスがどこへ移るかを見てください。
  3. フォーカスがダイアログの外に出たように見えたら、開発者ツールのコンソールでdocument.activeElementを確認してください。

満たす場合:フォーカスは開いているダイアログの中にとどまり、背後の隠れた内容に届くことはありません。

満たさない場合:フォーカスがダイアログの背後のaria-hidden="true"の中の内容に届き、そこではスクリーンリーダーが何も読み上げないため、WCAG 4.1.2を満たしません。

ariaHiddenFocusable_runtimeRedirect_needsReview

  1. レポートに示された要素のすぐ手前をクリックし、フォーカスが届くはずのところまでTabキーを押してください。
  2. フォーカスがどこに移るかを見て、開発者ツールのコンソールでdocument.activeElementを確認してください。
  3. 後ろのコントロールからShift+Tabを押し、フォーカスが隠れた要素で止まるか、そのまま通り過ぎるかを確認してください。

満たす場合:フォーカスが隠れた要素にとどまることはなく、フォーカストラップの番兵要素と同じように、表示されているコントロールへそのまま移ります。

満たさない場合:フォーカスがaria-hidden="true"の中の要素にとどまることがあり、そこではスクリーンリーダーが何も読み上げないため、WCAG 4.1.2を満たしません。

関連するルール

ソースコードを見る