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

マウスでしか開かないドロップダウンメニュー

上段の項目の下にあるサブメニューが:hoverのルールだけで表示されるため、Tabキーでは中のページをすべて飛ばしてしまいます。

WCAG 2.2
SC 2.1.1ASC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり .has-sub:hover > ul { display: block; }
アクセシビリティの問題を示した図: マウスでは一覧が開く。Tabでは開かない。
01

問題

キーボードやスクリーンリーダーの利用者が、上段の項目の下にあるページにたどり着けません。

02

試してみる

TabとEnterだけで「照明」まで移動してください。

マウスを「商品」に重ねて一覧を確かめてから、キーボードで試してください。一覧が開いたらEscapeも試し、「会社概要」の先へTabで進んでください。一覧が次のリンクを覆いますか?

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

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

(Tabでメニューへ移動)

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

03

修正方法

どのサブメニューもキーボードで開けるようにし、開いているかどうかを伝えます。

  1. 1サブメニューは、button、summary、キーボードのフォーカスのいずれかで、マウスなしで開く。
  2. 2サブメニューを開く操作部品は、開閉状態を伝える。
  3. 3ページに重なって開くサブメニューは、Escapeで閉じ、フォーカス中の要素を隠さない。
修正前 マウスを重ねると開くサブメニュー
<nav aria-label="メイン">  <ul class="menu">    <li><a href="/">ホーム</a></li>    <li class="has-sub">      <a href="/products">商品</a>      <ul>        <li><a href="/products/lamps">照明</a></li>        <li><a href="/products/chairs">椅子</a></li>        <li><a href="/products/rugs">ラグ</a></li>      </ul>    </li>    <li><a href="/about">会社概要</a></li>  </ul></nav>
修正後

サブメニューを開くbutton

<nav aria-label="メイン">  <ul class="menu">    <li><a href="/">ホーム</a></li>    <li class="has-sub">      <button type="button" aria-expanded="false" aria-controls="sub-products">商品</button>      <ul id="sub-products" tabindex="-1" hidden>        <li><a href="/products">すべての商品</a></li>        <li><a href="/products/lamps">照明</a></li>        <li><a href="/products/chairs">椅子</a></li>        <li><a href="/products/rugs">ラグ</a></li>      </ul>    </li>    <li><a href="/about">会社概要</a></li>  </ul></nav>

この方法を選ぶ理由:まずHTMLの要素を使う

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

04

修正の確認

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

確認方法: キーボード、スクリーンリーダー、ズーム、タッチ

5件中0件を確認済み

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

制限

このサンプルはサイトのナビゲーションメニューのための出発点で、コマンドを並べるアプリケーションのメニューは対象外です。そうしたメニューはARIAのメニューパターンと矢印キーの操作に従います。スクリプトは、アニメーション、マウスを重ねて開く操作、入れ子の階層を含まない最小限の例です。狭い画面のメニューも含めて、実際に使用する支援技術で操作全体を確認してください。

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

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

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

再テストの進め方