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

開いているか伝わらない表示・非表示ボタン

ボタンでパネルを開閉できますが、開閉状態がCSSのクラスにしかないため、支援技術にはどちらの状態でも同じボタンとして伝わります。

WCAG 2.2
SC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり class="filter-toggle is-open"
アクセシビリティの問題を示した図: 開いているのに「ボタン」としか言わない。
01

問題

スクリーンリーダーの利用者は、ボタンを押せても、パネルが開いているのか、押して何か変わったのかが分かりません。

02

試してみる

Tabで「フィルター」へ移動し、Enterで開いてください。

下の欄に、スクリーンリーダーの読み上げが出ます。絞り込みが開いているか分かりますか?

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

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

(Tabで「フィルター」へ移動)

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

03

修正方法

ボタンのaria-expandedか、detailsとsummaryで開閉状態を伝えます。

  1. 1開閉するたびに、状態をパネルの表示と一致させる。
  2. 2ボタンには表示する内容の名前を付け、名前は変えない。
  3. 3パネルはボタンの直後に置き、閉じたら届かないようにする。
修正前 クラスで開閉を描くボタン
<button type="button" class="filter-toggle">  フィルター <svg class="chevron" aria-hidden="true">…</svg></button><div class="filter-panel">  <label><input type="checkbox" name="stock"> 在庫ありのみ</label>  <label><input type="checkbox" name="sale"> セール中</label></div>
修正後

今あるボタンにaria-expanded

<button type="button" class="filter-toggle" aria-expanded="false" aria-controls="filters">  フィルター <svg class="chevron" aria-hidden="true">…</svg></button><div class="filter-panel" id="filters" hidden>  <label><input type="checkbox" name="stock"> 在庫ありのみ</label>  <label><input type="checkbox" name="sale"> セール中</label></div>

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

04

修正の確認

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

確認方法: キーボード、スクリーンリーダー、ズーム、強制配色

5件中0件を確認済み

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

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。summary の読み上げ方はスクリーンリーダーによって異なり、ボタンではなく開閉の三角として伝えるものもあります。スクリプトは、アニメーションやパネル内の閉じるボタンを含まない最小限の例です。実際に使用する支援技術で、絞り込みの操作全体を確認してください。

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

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

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

再テストの進め方