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

キーボードで押せないアイコンが並ぶツールバー

写真を編集するツールを、クリック処理を付けたspanのアイコンで作っているため、Tabキーはツールバー全体を飛ばし、スクリーンリーダーにはツールがあることさえ伝わらない

WCAG 2.2
SC 2.1.1ASC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <span class="tool" data-action="rotate-left">
アクセシビリティの問題を示した図: 手の操作:写真はどう回すの?
01

問題

キーボードやスイッチの利用者は写真編集のツールにたどり着けず押せもしない。スクリーンリーダー利用者には、ツールがあることも、それぞれが何をするかも伝わらない

02

試してみる

横向きに写った写真を、キーボードだけでまっすぐにしてみましょう

Tabキーを押します。フォーカスは6つのツールを飛ばして「写真を保存」へ移り、下の欄でもツールは一度も読まれません。

修正を適用すると、ボタンでは各ツールがTabの移動先になり、ツールバーではTabキーで1回止まったあと、矢印キー、Home、Endでツールの間を移動できます。

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

問題クリック処理を付けたspanのアイコン

写真を編集

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

(Tabで編集画面を移動)

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

03

修正方法

すべてのツールを、働きを表す名前のボタンにする

修正前
問題クリック処理を付けたspanのアイコン
<div class="photo-editor">  <img class="photo" src="/uploads/mug.jpg" alt="ホーローのマグカップ、正面">  <div class="toolbar">    <span class="tool" data-action="rotate-left">      <svg aria-hidden="true">…</svg>    </span>    <span class="tool" data-action="rotate-right">      <svg aria-hidden="true">…</svg>    </span>    <span class="tool" data-action="flip">      <svg aria-hidden="true">…</svg>    </span>    <span class="tool" data-action="zoom-in">      <svg aria-hidden="true">…</svg>    </span>    <span class="tool" data-action="zoom-out">      <svg aria-hidden="true">…</svg>    </span>    <span class="tool" data-action="reset">      <svg aria-hidden="true">…</svg>    </span>  </div>  <button type="button">写真を保存</button></div>
問題点3点
  • ツールはフォーカスを受けないspanの click にしか反応しないため、どのキーでもたどり着けず、押せません。
  • spanには役割がないため、どのツールにも役割がありません。
  • 中身はスクリーンリーダーから隠したアイコンだけのため、どのツールにも名前がありません。
修正後

ツールごとにボタンを使う

<div class="photo-editor">  <img class="photo" src="/uploads/mug.jpg" alt="ホーローのマグカップ、正面">  <div class="toolbar">    <button type="button" class="tool" aria-label="左に回転" data-action="rotate-left">      <svg aria-hidden="true">…</svg>    </button>    <button type="button" class="tool" aria-label="右に回転" data-action="rotate-right">      <svg aria-hidden="true">…</svg>    </button>    <button type="button" class="tool" aria-label="反転" data-action="flip">      <svg aria-hidden="true">…</svg>    </button>    <button type="button" class="tool" aria-label="拡大" data-action="zoom-in">      <svg aria-hidden="true">…</svg>    </button>    <button type="button" class="tool" aria-label="縮小" data-action="zoom-out">      <svg aria-hidden="true">…</svg>    </button>    <button type="button" class="tool" aria-label="元に戻す" data-action="reset">      <svg aria-hidden="true">…</svg>    </button>  </div>  <button type="button">写真を保存</button></div>
修正の手順3ステップ
  1. 各ツールをHTML標準のボタンにします。Tabキーで届き、EnterキーとSpaceキーで押せます。ブラウザーはどちらのキーも、スクリプトがもともと待っている click に変えるため、スクリプトを変える必要はありません。
  2. aria-label で各ボタンに働きを表す名前を付けます。スクリーンリーダーは「右に回転、ボタン」と読み上げ、音声操作の利用者は「右に回転をクリック」と言えます。
  3. CSSでボタン本来の見た目を消してアイコンの見た目に戻し、フォーカスの枠を加えます。

これで修正前の例は直り、2.1.1と4.1.2を満たします。ツールが6つなら、写真と「写真を保存」の間にTabの移動先が6つ並びます。

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

04

デザインの案

どんな見た目のツールバーでも、すべてのツールにキーで届く

写真のツールを5通りに描きました。それぞれをマウスで試してから、マウスを使わずにTabで移動してみてください。3つはキーボードで届いて使え、2つはマウスでしか使えません。

デザインファイルで

  • アイコンだけのツールにも、横に名前を書く。スクリーンリーダーが読む名前にもツールチップにもなる。
  • 1つのツールにフォーカスの枠を描き、列全体がTabで1回止まり矢印キーで移動するのか、ツールごとにTabで止まるのかを書き添える。
  • ホバーで現れるツールバーは、キーボードでフォーカスしたときとタッチスクリーンでの見え方も描く。
  • ダイヤルのようにドラッグで操作するものには、ドラッグせずに同じことができるボタンを横に描く。

合格

  • アイコンの下に言葉を添えたツール 各ツールのアイコンの下に、小さな灰色の文字(#5f6368、白に対して6.05:1)で名前を表示します。記号の意味を推測させずに済み、同じ言葉がスクリーンリーダーの読む名前にも、音声操作で呼ぶ名前にもなります。高さが16pxほど増え、ツールの幅も広がります。名前は削らずに短くします。
  • ツールをまとめて浮かせたピル型のバー ツールを白いピル型のバーにまとめ、写真の下部に常に浮かべます。回転、反転、拡大のまとまりの間には細い区切り線を入れます。ひとつのまとまりに見えるので、Tabで1回止まり矢印キーで移動する形に合います。フォーカスの枠はバー全体ではなく、フォーカスのあるツールに描きます。
  • 100%
    倍率を表示するズームのステッパー 「縮小」と「拡大」を、倍率(100%)の両側に置いて1つの角丸の枠にまとめます。押すたびに結果が見えます。倍率は2つのボタンの間にあるただの文字で、3つ目のコントロールではありません。ボタンにはそれぞれ名前があります。

不合格

  • 写真にポインターを重ねたときだけ現れるツールWCAG 2.1.1 すりガラス風のバーが、ホバーすると写真の上に現れ、ポインターが離れると消えます。ほかに表示する方法がないので、Tabではどのツールも飛ばされ、タッチスクリーンにはそもそもホバーがありません。「ツールをまとめて浮かせたピル型のバー」と同じように、キーボードでフォーカスしたときにも表示し、タッチスクリーンでは常に表示します。
  • 0°
    ドラッグで回す傾き補正のダイヤルWCAG 2.1.1 写真の下の目盛りをドラッグすると、写真が1度ずつ傾きます。スマートフォンの写真アプリでよく見る形です。ポインターの動きにしか反応しないため、キーでは傾きを直せません。矢印キーで動かせるようにするか、横に1度ずつ傾けるボタンを置きます。
05

修正の確認

4項目、マウス不要

確認方法: キーボード、スクリーンリーダー、音声入力、強制配色、拡大表示

4件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。ツールバー、その部品、ライブラリーを変更した際は、再度確認します。

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。ツールバーのスクリプトは最小限の例で、無効なツール、縦向き、ボタン以外のコントロールは扱っていません。エディターの入力欄とその名前は見えているラベルで読み上げられないリッチテキストエディターで、divで作った1つのコントロールはTabキーで到達できないdivのボタンで扱っています。Tabの移動先を1つにする同じパターンをサイドバーで示したのが、キーボードで開けず、階層も伝わらないツリービューです。対象とする支援技術で、一連の操作全体をテストしてください。

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

EaseWebのサービス

修正した問題を、次のリリースで再発させない

このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。

サービス内容を見る