本文へ移動
easeweb
ご相談
トピックを検索

Tabで届くのに読み上げられない、aria-hiddenの要素

閉じたスライド式メニューを画面の外に移してaria-hidden="true"を付けているため、リンクはスクリーンリーダーから隠れても、すべてTabの移動先に残っています。

WCAG 2.2
SC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <nav class="drawer" aria-hidden="true">
アクセシビリティの問題を示した図: Tabが閉じたメニューの中に入る。
01

問題

キーボードやスクリーンリーダーの利用者が、見えず読み上げられないリンクにたどり着きます。

02

試してみる

メニューボタンからTabキーを押し、フォーカスを追ってください。

メニューを閉じたまま、メニューボタンの次にフォーカスがどこへ行き、スクリーンリーダーが何を読むか見てください。次にメニューを開いて、Tabで中を移動してください。

問題あり 修正できますか?

今週の新着

3色のリネンのティータオルと、石器の水差し。

読みものを読む

スクリーンリーダーの読み上げ:

(Tabでメニューボタンへ移動)

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

閉じたメニューは、CSSかinertで、画面、Tab、スクリーンリーダーから一度に隠します。

  1. 1フォーカスを受ける要素にも、それを含む要素にも、aria-hidden="true"を付けない。
  2. 2使わない部分は全員から一度に隠す。CSSで隠すかinertを付けるか、中の操作要素をすべてTabの移動先から外す。
  3. 3フォーカスがある部分を隠す前に、フォーカスを外へ移す。
修正前 スクリーンリーダーからだけ隠した、閉じたメニュー
<button type="button" class="menu-button" aria-expanded="false" aria-controls="menu">Menu</button><nav id="menu" class="drawer" aria-label="Main" aria-hidden="true">  <a href="/shop">Shop</a>  <a href="/journal">Journal</a>  <a href="/about">About</a>  <a href="/contact">Contact</a></nav>
修正後

CSSで隠した、閉じたメニュー

<button type="button" class="menu-button" aria-expanded="false" aria-controls="menu">Menu</button><nav id="menu" class="drawer" aria-label="Main">  <a href="/shop">Shop</a>  <a href="/journal">Journal</a>  <a href="/about">About</a>  <a href="/contact">Contact</a></nav>

この方法を選ぶ理由:隠すときは、全員から一度に隠す

AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得

04

修正の確認

マウスを使わない5つの確認

確認方法: キーボード、スクリーンリーダー

5件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。共通のメニュー、カルーセル、ダイアログのコンポーネントを変更した際は、再度確認します。

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。対象は、aria-hidden で隠してもフォーカスが届く部分です。フォーカスを受けないものの、価格や注意書きのように必要な情報を持つ要素に aria-hidden を付けるのは別の問題で、このガイドでは扱いません。隠れたリンクで何が読み上げられるかはブラウザーとスクリーンリーダーによって違うため、利用者が使う組み合わせで確認してください。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

コードを更新しても、使いやすさを保つために

ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。

再テストの進め方