アコーディオン
component見出しを開閉して本文を出し入れする開示コンポーネントです。長いページの情報を折り畳んで一覧性を上げます。ネイティブ <details> / <summary> ベースで、開閉とキーボード操作はブラウザ標準に任せます(JS 不要)。
基本
開閉アイコンは見出しの左。既定で開くものは <details open>
配送について
返品・交換について
支払い方法について
使用例 — FAQ
見出しをクリック、または Tab + Enter / Space で開閉
アカウントを解約するには?
パスワードを忘れた場合は?
機能
このコンポーネントの用途
見出しの開閉で本文を出し入れする開示コンポーネント。長いページの情報を
折り畳んで一覧性を上げる。常時見せたい情報や、操作を止めて確認させる用途は
使わない(前者は常時表示、後者は modal)。
使用法
推奨される使い方と、やりがちな NG パターン
OK
- ✓開閉アイコン(chevron)は見出しの左に置き、open で回転させて状態を示す。
- ✓各 details は独立して開閉できる。既定で開くものは <details open>。
- ✓トリガーは必ず <summary>(accordion-trigger)にする(キーボード操作が標準で付く)。
NG
- ✕重要・必須の情報を折り畳みの中だけに置かない → 常時見える場所でも提供する。
- ✕chevron を見出しの右端だけに置かない → 視野狭窄で見落とすため左に置く。
- ✕遷移や実行のトリガーにしない → 遷移は link、実行は button。
開閉アイコンは見出しの「左」に置く
視野狭窄で右端を見落とさない配送について
アイコンを見出しの左に置くと、見出しと操作の起点が同じ視野に入る。
<summary class="accordion-trigger"> <svg class="accordion-icon">…</svg> <!-- 左 --> <span class="accordion-label">配送について</span> </summary>
配送について
アイコンを右端だけに置くと、視野狭窄の利用者が開閉できることに気づきにくい。
<summary class="accordion-trigger"> <span class="accordion-label">配送について</span> <svg class="accordion-icon">…</svg> <!-- 右端 --> </summary>
重要・必須の情報は折り畳みの中だけに置かない
常時表示との使い分け解約後 30 日でデータは削除されます
見落とせない注意は alert 等で常時表示し、補足だけをアコーディオンに入れる。
注意事項
必須の注意を折り畳みの中だけに隠すと、開かない利用者に伝わらない。
アコーディオンのアクセシビリティ
ネイティブ <details> / <summary> ベースで、トグルの役割・展開状態・キーボード操作が標準で確立します。開閉アイコンは見出しの左に置き、視野狭窄でも操作要素を見落とさないようにしています。WCAG 2.2 全基準は アクセシビリティ ページを参照。
期待される配慮
Presentation / Adaptability / Interaction / Assistive Technology
開閉アイコンは見出しの左に置き、open で回転させて状態を示す。開閉は形(回転)とネイティブの展開状態の両方で伝える。
文字は rem / トークンで拡大に追従。見出し・本文とも折り返して破綻しない。
Tab で見出しへ到達、Enter / Space で開閉。フォーカスリング(info/600・2px)が出る。
<summary> が「展開 / 折りたたみ」ボタンとして読まれ、開閉状態も伝わる。
DS が担保する機能
追加実装なしで満たされる
- ✓ネイティブ
<details>/<summary>— 役割・展開状態・キーボード操作が標準で確立(JS 不要) - ✓キーボードフォーカスリング(
:focus-visible・info/600・2px) - ✓開閉アイコンを見出しの左に配置(
accordion-icon) - ✓ヘッダの雛形で「重要情報を折り畳みの中だけに置かない」を明示(MCP
get_componentの正本)
実装時の必須対応
プロダクト側で担保する
- !トリガーは必ず
<summary>(accordion-trigger)にする — div 等にするとキーボード操作が失われる - !開閉アイコンは見出しの左に置く(右端だけにしない)
- !重要・必須の情報を折り畳みの中だけに置かない → alert 等で常時表示する
- !見出しは意味の順序どおりに並べる(見た目の順序と一致させる)
テスト方法
キーボード / スクリーンリーダー / 自動チェック
| キー | 動作 |
|---|---|
| Tab / Shift+Tab | 各見出し(summary)へ移動する |
| Enter / Space | 開閉を切り替える |
- SR見出しが「展開 / 折りたたみ」ボタンとして読まれ、状態変化が伝わる
- 自動axe / Lighthouse で役割・フォーカス可視化・コントラストを確認
開閉アイコンは見出しの左に置く
達成基準:WCAG 1.3.1 情報及び関係性 / 4.1.2 名前・役割・値よくある質問
<details class="accordion-item"> <summary class="accordion-trigger"> <svg class="accordion-icon">…</svg> <!-- 左 --> <span class="accordion-label">よくある質問</span> </summary> <div class="accordion-panel">…</div> </details>
トリガーを <div> で自作すると、キーボードで開けず役割も伝わらない。
<div class="accordion-trigger" onclick="…"> <!-- NG --> <span>よくある質問</span> </div> <!-- summary でないため Tab/Enter で開けない -->