トピックを検索
ターゲットサイズが44×44ピクセルに届かないボタン
買い物かごのボタンは32ピクセル四方で、最低限の24ピクセルは満たすが44×44ピクセルには届かないため、手が震える人は押し損ねてしまう
min-width: 32px; min-height: 32px 問題
手の震えがある人やヘッドポインターで操作する人が、32ピクセルのボタンを押し損ね、何度もやり直す
買い物かごに、商品が1行ずつ並んでいます。「リネンのナプキン 数量2」の横に、数量の「−」「+」と削除の「×」、三つのアイコンボタンが並びます。ボタンは32×32ピクセルで、間隔は4ピクセルです。これは「ターゲットサイズが足りない、詰まったボタン」のガイドで、同じ行をレベルAAに合わせて直したときの大きさです。手が安定していれば、押すのは簡単です。
手の震えがある人が「+」を狙うと、タップが中心から右へ18ピクセル、つまりボタンの縁から2ピクセル外に落ち、何も起きません。もう一度狙うと、今度はボタンの間の隙間に落ちます。数量を2から5にするには3回押せば済むはずが、調子の悪い日はその倍もタップすることになります。何かが壊れるわけではありませんが、やり直しの手間がかかります。
WCAG 2.5.5「ターゲットのサイズ(高度)」はレベルAAAの達成基準で、ポインターで押すターゲットに44×44 CSSピクセル以上を求めます。このボタンは32ピクセルです。24ピクセルを求める2.5.8「ターゲットのサイズ(最低限)」は満たすため、レベルAAの診断では何も見つかりません。W3Cの達成方法C44は、CSSでターゲットの大きさを指定して2.5.5を満たすもので、以下の修正はどちらもこの方法です。
2.5.8と違い、2.5.5には間隔による例外がありません。レベルAAでは、小さなターゲットでも、その中心に置いた直径24ピクセルの円が、ほかのターゲットや、ほかの小さなターゲットの円と重ならなければ満たせます。レベルAAAでは、ボタンの周りの余白は数えず、ターゲット自体が44×44ピクセル必要です。そのため、ここではボタンの間隔を広げても修正になりません。二つのクリック範囲が重なる場合、重なった部分はどちらのターゲットの大きさにも含めません。
四つの例外のどれにも当たりません。ボタンは文や文章の中になく、ブラウザーが大きさを決めているのでもなく、同じ機能の44ピクセルのコントロールもページになく、買い物かごのボタンを小さくしなければならない理由もありません。ブラウザーはボタンを指定されたとおりの大きさで表示します。32ピクセルはデザイン上の選択で、よく使われる大きさです。
2.5.5が対象とする人は2.5.8と同じで、その人たちにさらに余裕を持たせる基準です。このボタンと比べると、44ピクセルのターゲットは四方とも6ピクセル外側のタップまで受け止めます。揺れるバスの中で親指でタップする人、片手でスマートフォンを持つ人、指の関節や指先の一部でタップする人にも、同じ余裕が役立ちます。
10グループ中3グループに影響
- 全盲 (影響なし)
- 弱視 (影響あり)
- 色覚 (影響なし)
- ろう (影響なし)
- 難聴 (影響なし)
- 発話 (影響なし)
- 手の操作 (影響あり)
- 筋力・可動域 (影響あり)
- 認知 (影響なし)
- 光過敏 (影響なし)
- 筋力や可動域が限られる 手の震えや細かい動きに制限がある人のタップは、狙った位置から数ピクセルずれます。32ピクセルのボタンでは外れることが多く、そのたびに押し直す手間がかかります。
- 手の操作が限られる ヘッドポインターや視線入力、マウススティックは、手で動かすマウスより位置がぶれます。44ピクセルあれば、ターゲットの上で止める余裕ができます。
- 視覚が限られる 弱視の人には小さなボタンの縁がはっきり見えないため、狙いが正確になりにくくなります。
axe-coreの target-size ルールは、レベルAAの最低限である24ピクセルを基準に測るため、この行を合格にします。2.5.5のためのaxeのルールはありません。この診断ツールは、各コントロールの中心から縦横に外へ向かって、クリックがどこに当たるかを調べてクリック範囲を測るため、擬似要素で広げた範囲も数えます。そのうえで、クリック範囲が縦横とも24ピクセル以上あり、どちらかが44ピクセル未満のコントロールを、種類ごとに一つ、確認が必要な項目として記録します。文中のリンクは除きます。確認が必要な項目にとどめるのは、同じ機能の44ピクセルのコントロールがページのほかの場所にあるかどうかを、人にしか判断できないためです。自動のクリックテストは要素のちょうど中心を押すため、小さなボタンでも外しません。AIがコンポーネントライブラリーで画面を組み立てると、ボタンの大きさもそのまま引き継がれます。shadcn/uiとBootstrapの標準サイズと小さいサイズのボタンは、どれも44ピクセル未満です。
試してみる
「手の震え」をオンにして、「+」で数量を5にしてみましょう
「手の震え」をオンにすると、クリックやタップが狙った位置から最大20ピクセルずれ、実際に当たった位置に印が付きます。ボタンに当たれば緑の点、外れれば赤い輪です。「+」の真ん中を狙ってください。32ピクセルのボタンでは外れることがありますが、44ピクセルなら同じ狙い方で毎回当たります。
問題あり 修正できますか?
修正方法
どのターゲットも44×44ピクセル以上にする
<div class="line-actions"> <button type="button" aria-label="数量を減らす">−</button> <button type="button" aria-label="数量を増やす">+</button> <button type="button" aria-label="リネンのナプキンを削除">×</button></div>問題点3点
- 各ターゲットは32×32ピクセルで、縦横とも44ピクセルに12ピクセル足りません。
- ボタンの中心から上下左右に16ピクセルより離れたタップは、ボタンに当たりません。
- 4ピクセルの間隔は役に立ちません。ターゲットの周りの余白は、2.5.5では数えないためです。
ボタンを44ピクセルにする
<div class="line-actions"> <button type="button" aria-label="数量を減らす">−</button> <button type="button" aria-label="数量を増やす">+</button> <button type="button" aria-label="リネンのナプキンを削除">×</button></div>修正の手順3ステップ
- 各ボタンの
min-widthとmin-heightを44ピクセルにします。見えているボタン全体がクリック範囲なので、どこまで押せるかが分かります。 flex-shrink: 0はそのまま残し、狭い画面でボタンが44ピクセルより縮むのを防ぎます。- 間隔を8ピクセルに広げ、大きくなったボタンが一つの塊に見えないようにします。
これで修正前の例は直り、2.5.5を満たします。2.5.8も同時に満たします。HTMLは変わりません。
ボタンを44ピクセルにしてください。クリック範囲を広げる方法と同じ効果を、より少ないCSSで実現でき、目に見えない部分が壊れる心配もありません。狙える範囲が利用者の目にも見えます。クリック範囲を広げる方法は、デザインシステムの32ピクセルのボタンを変更できない場合に使います。基準は満たしますが、利用者は32ピクセルの形を狙うことになります。また、範囲が目に見えないため、後で間隔や行の余白を変えたときに、範囲が重なったり切り取られたりしても気付かれにくくなります。ボタンの間隔を広げる方法は、このレベルでは選択肢になりません。
測るのはアイコンではなく、CSSピクセルでのクリック範囲です。paddingや擬似要素は含まれ、marginは含まれません。角を丸めたボタンは、丸い縁のとおりにクリックを受け取ります。丸いターゲットをこのレベルでどう測るかはWCAGに書かれていないため、丸いボタンは直径44ピクセルの円にするのではなく、44ピクセル四方のクリック範囲の中に描いてください。
広く使われている二つのコンポーネントライブラリーは、ボタンを二つの基準の間の大きさで描いています。shadcn/uiのアイコンボタンは24〜40ピクセル、Bootstrapのボタンは高さ38ピクセル、.btn-sm では31ピクセルです。AppleのデザインガイドラインはiOSとiPadOSの標準のコントロールサイズを44×44ポイントとし、Androidのアクセシビリティガイドは48×48 dp(密度非依存ピクセル)を求めています。width=device-width を指定したページなら、スマートフォンのブラウザーでは1ポイントも1 dpもおよそ1 CSSピクセルなので、三つの数値はそのまま比べられます。44ピクセルの最小サイズは、使う場所ごとではなく共通のアイコンボタンに指定し、詰まった行で再び小さくならないようにします。
例外の範囲は狭いものです。文中のリンクは例外ですが、フッターやページ送りのように文の外に並んだリンクは例外になりません。同じ機能の44ピクセルのコントロールが例外の理由になるのは、同じページにあって同じことをする場合だけです。メニューの中に隠れたものを当てにしないでください。ブラウザーが描くコントロールが例外になるのは、作り手が大きさを変えていない場合だけです。
デザインの案
44ピクセルのターゲットでも、軽やかに見せられる
買い物かごの行を重く見せずに、ターゲットを44ピクセルにする方法を2通り、よく見かけるのに届かない描き方を2通り並べました。それぞれにポインターを重ねるか、Tabで移動してください。現れる塗りが、クリックを受ける範囲です。
デザインファイルで
- 文の外にあるボタンとリンクは、タップを受ける範囲で測って44×44ピクセル以上に描く。
- アイコンがボタンより小さいときは、ホバーしたときにだけ見える形であっても、44ピクセルのボタンの輪郭を描いておく。
- 隣り合う44ピクセルの範囲が重ならないよう、間隔と、行の上下の余白を取る。
- 丸いボタンは、直径44ピクセルの円ではなく、44ピクセル四方の中に描く。
合格
- 44ピクセルのボタンに置いた、枠のないアイコン 普段は20ピクセルのアイコンしか見えないため、小さなボタンを並べたときと同じくらい軽やかです。アイコンはそれぞれ44ピクセル四方(角の丸み12ピクセル)の領域に収まり、ホバーやフォーカスでその領域が塗られます。隣どうしの領域は重なりません。
- リネンのナプキン高さ44ピクセルの数量バー 「−」、数量、「+」を、枠線で囲んだ高さ44ピクセルのバー1本にまとめます。角の丸みはボタンとそろえ、三つのターゲットが一つのコントロールに見えるようにします。各ボタンは幅44ピクセルで、削除はバーから8ピクセル離した44ピクセル四方のボタンです。
不合格
- 高さ32ピクセルのチップWCAG 2.5.5 ギフト包装などのオプションを、高さ32ピクセルの枠付きのピル形にし、8ピクセル間隔で並べます。Material Designのフィルターチップと同じ高さです。このレベルではチップの間の余白は数えないため、各チップを高さ44ピクセルにするか、範囲を44ピクセルまで広げます。
- リネンのナプキン 数量2小さな文字の「あとで買う」と「削除」WCAG 2.5.5 商品の下の操作を、高さ28ピクセルの領域に収めた文字にし、文章の1行のように並べます。操作の並びは文ではないので、文中のリンクの例外には当たりません。どの操作にも高さ44ピクセルの領域を持たせます。
修正の確認
4項目
確認方法: ターゲットの測定、タッチ、マウス、拡大表示
OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。共通のボタンのスタイルを変更した際は、再度確認します。
制限
このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。レベルAAAをすべて求められることはまれですが、この基準のように、AAAの達成基準を一つずつ満たすことはできます。このガイドは1行に並んだアイコンボタンを扱っています。グリッド、スライダー、ドラッグ用のつまみは、別に確認が必要です。押しやすい大きさでも、押し間違いを取り消せなければ困ります。それについては「押した瞬間に実行され、キャンセルできないボタン」で説明しています。実際の利用者と端末で確認してください。
よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。
EaseWebのサービス
修正した問題を、次のリリースで再発させない
このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。