アイコンボタン
componentアイコンだけの小さなボタンです。編集・削除・閉じるなど、限られたスペースでの操作に使います。
Variant × Theme size = medium / state = enable
| solid | outline | ghost | |
|---|---|---|---|
| primary | |||
| neutral | |||
| negative |
size
primary / solid · icon は常に 24×24
state
primary / solid / medium
プロパティ
| prop | values | description |
|---|---|---|
thema |
primary · neutral · negative |
アイコンボタンは secondary を持たない。3 色のみ。 |
size |
sm · md · lg |
32 / 40 / 48 の正方形。アイコンは常に 24×24 で固定。 |
variant |
solid · outline · ghost |
subtle は持たない。3 つだけ。 |
state |
enable · :hover · :focus-visible · :disabled |
loading は持たない。 |
aria-label |
必須 | アイコンだけの操作なので、スクリーンリーダー用に aria-label を必ず付与する。 |
機能
このコンポーネントの用途
アイコンのみで操作を表すボタン。省スペースな操作に使う。
文言ラベルを見せたい主操作は icon-button ではなく button。
使用法
推奨される使い方と、やりがちな NG パターン
OK
- ✓必ず aria-label で操作名を与える(視覚ラベルが無いため)。
- ✓リストの各行に同じ操作ボタンが並ぶ時は aria-label に対象を含めて一意化する
- ✓thema / size / variant を用途に合わせて選ぶ。
NG
- ✕aria-label を省略しない → 何のボタンか読み上げられない。
- ✕遷移に使わない → href のナビゲーションは link。
アイコンボタンのアクセシビリティ
ネイティブ <button> ベースで役割・フォーカスは自動。可視ラベルが無いため aria-label が必須です。WCAG 2.2 全基準は アクセシビリティ ページを参照。
期待される配慮
Presentation / Adaptability / Interaction / Assistive Technology
アイコンは意味を担うが、操作名は aria-label で言語化する。破壊的操作は negative で色でも示す。
サイズは sm 32 / md 40 / lg 48。アイコンは常に 24。sm でもターゲット最小 24px を満たす。
Tab で到達、Enter/Space で実行。フォーカスリング(info/600・2px・offset 2px)が出る。
名前は aria-label、アイコン SVG は aria-hidden。同じ操作が並ぶ時は対象を含めて一意にする。
DS が担保する機能
追加実装なしで満たされる
- ✓ネイティブ
<button>ベース — 役割・状態が標準で確立 - ✓キーボードフォーカスリング(
:focus-visible・info/600・2px・offset 2px) - ✓
sm(32px)以上でターゲット最小(WCAG 2.5.8)を満たす - ✓ヘッダの雛形で
aria-label必須を明示(MCPget_componentの正本)
実装時の必須対応
プロダクト側で担保する
- !すべてのアイコンボタンに
aria-label(操作名)を付ける - !アイコン SVG は
aria-hidden="true"(装飾) - !同じ操作が並ぶ時は対象を
aria-labelに含めて一意化(例: 「『りんご』を削除」) - !ページ遷移には使わない →
link(icon-btn は操作用)
テスト方法
キーボード / スクリーンリーダー / 自動チェック
| キー | 動作 |
|---|---|
| Tab | アイコンボタンへ移動(フォーカスリング表示) |
| Enter / Space | 操作を実行する |
- SR
aria-labelの操作名が読まれる(「ボタン」だけにならない) - 自動axe / Lighthouse で name(
aria-label)・コントラスト・ターゲットサイズを確認
アイコンだけのボタンには aria-label
達成基準:WCAG 4.1.2 名前・役割・値 / 1.1.1 非テキストコンテンツ
aria-label="削除" で操作名を与える。アイコン SVG は装飾なので aria-hidden。
<button class="icon-btn …" aria-label="削除"> <svg aria-hidden="true">…</svg> </button>
名前が無いと SR で「ボタン」としか読まれず、何の操作か伝わらない。
<button class="icon-btn …"> <!-- aria-label なし --> <svg>…</svg> </button>
同じ操作が並ぶ時は対象込みで一意化
達成基準:WCAG 2.4.4 リンクの目的(コンテキスト内) / 4.1.2 名前・役割・値- りんご
- みかん
読み上げ名に対象を含める(「『りんご』を削除」)。どの行の削除か区別できる。
<button class="icon-btn …" aria-label="『りんご』を削除">…</button>
- りんご
- みかん
全て「削除」だと、SR では「削除、削除…」で対象が区別できない。
<button class="icon-btn …" aria-label="削除">…</button> <!-- 各行同じ -->