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

選択が読まれず、チップをキーボードで消せない複数選択

「スキル」欄は選んだスキルをチップで示しますが、チップの×はクリック処理を付けたsvgで、一覧のチェックマークもクラスで描いています。そのため、キーボードではチップを外せず、スクリーンリーダーにはどのスキルを選んだかが伝わりません。

WCAG 2.2
SC 2.1.1ASC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <svg class="chip-remove" viewBox="0 0 16 16">
アクセシビリティの問題を示した図: 手の操作:リサーチはどうやって外すの?
01

問題

キーボード利用者は選んだスキルを外せず、スクリーンリーダーの利用者はどのスキルを選んだか分からないため、どちらも欄の内容を確かめたり直したりできません。

02

試してみる

マウスを使わずに操作してください。Tabで「スキル」へ移動し、Enterで開き、矢印キーとSpaceでライティングを選び、Escapeで閉じてから、デザインを外します。

「スキル」は、選んだスキルをチップとして中に並べるドロップダウンです。問題1では、Tabはどの×にも止まらず、選んだスキルは一覧から消えるため、選んだものを取り消せません。×はクリックなら外せます。問題2では一覧でチェックを外し、下の欄を見てください。どのスキルにチェックが付いているか、一度でも読まれますか?修正後のチェックボックスでは、Tabでボックスの間を移動します。

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

スキル
デザイン リサーチ

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

(Tabで「スキル」へ移動)

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

03

修正方法

各チップにTabキーで届く削除ボタンを付け、各選択肢が選ばれているかどうかをコードで伝えます。

  1. 1チップの×は、Tabキーで届き、チップの名前を持つボタンにする。
  2. 2各選択肢が選ばれているかどうかは、チェックボックス、select、aria-selectedのいずれかでコードに示す。
  3. 3チップを外したら、フォーカスを次のチップか欄へ戻す。
修正前

マウスでしか外せない選んだスキル

<span id="skills-label">スキル</span><div class="skills-field">  <span class="chips">    <span class="chip">      デザイン      <svg class="chip-remove" data-for="skill-design" viewBox="0 0 16 16">…</svg>    </span>    <span class="chip">      リサーチ      <svg class="chip-remove" data-for="skill-research" viewBox="0 0 16 16">…</svg>    </span>  </span>  <button type="button" class="skills-toggle" aria-labelledby="skills-label"    aria-haspopup="listbox" aria-expanded="false" aria-controls="skills-list">    <span class="placeholder">スキルを追加</span>    <svg class="chevron" viewBox="0 0 16 16" aria-hidden="true">…</svg>  </button></div><ul id="skills-list" class="skills" role="listbox" tabindex="-1" aria-labelledby="skills-label" hidden>  <li id="skill-design" role="option" hidden>デザイン</li>  <li id="skill-writing" role="option">ライティング</li>  <li id="skill-research" role="option" hidden>リサーチ</li>  <li id="skill-coding" role="option">コーディング</li>  <li id="skill-video" role="option">動画編集</li></ul>
修正後

ドロップダウンの中のチェックボックスと、各チップのボタン

<span id="skills-label">スキル</span><div class="skills-field">  <span class="chips">    <span class="chip">      デザイン      <button type="button" class="chip-remove" data-for="skill-design" aria-label="デザインを削除">        <svg viewBox="0 0 16 16" aria-hidden="true">…</svg>      </button>    </span>    <span class="chip">      リサーチ      <button type="button" class="chip-remove" data-for="skill-research" aria-label="リサーチを削除">        <svg viewBox="0 0 16 16" aria-hidden="true">…</svg>      </button>    </span>  </span>  <button type="button" class="skills-toggle" aria-labelledby="skills-label"    aria-expanded="false" aria-controls="skills-list">    <span class="placeholder">スキルを追加</span>    <svg class="chevron" viewBox="0 0 16 16" aria-hidden="true">…</svg>  </button></div><div id="skills-list" class="skills" role="group" aria-labelledby="skills-label" hidden>  <label class="skill">    デザイン    <input type="checkbox" id="skill-design" name="skills" value="design" checked>  </label>  <label class="skill">    ライティング    <input type="checkbox" id="skill-writing" name="skills" value="writing">  </label>  <label class="skill">    リサーチ    <input type="checkbox" id="skill-research" name="skills" value="research" checked>  </label>  <label class="skill">    コーディング    <input type="checkbox" id="skill-coding" name="skills" value="coding">  </label>  <label class="skill">    動画編集    <input type="checkbox" id="skill-video" name="skills" value="video">  </label></div>

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

AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得、または全ガイドをコーディングエージェントで使う。

04

デザインの案

何を選んだかをコードが伝えていれば、選んだ値はどんな見た目でも構いません。

複数選択の見せ方としてよく見かけるものを、さらに5通り並べました。クリックしてから、マウスを使わずにTab、Space、Enterで試してください。3つは適合します。1つはTabが×に届かず、1つはピルを塗るだけで、選んだことをコードで伝えていません。

デザインファイルで

  • 選択肢はチェックボックス、チップの×はボタンとデザインファイルに書き、本物の要素で作られるようにする。
  • 各×ボタンの横に、「デザインを削除」のようにチップの言葉を入れた名前を書く。
  • すべての×と選択肢を、Tabで到達したときのフォーカスの枠付きで描く。
  • チップを外したあとのフォーカスの行き先を示す。次のチップか、残っていなければ欄。
  • キーボードの利用者はホバーせず、タッチの利用者にはタップするまで出ないか、まったく出ないので、×はホバー時だけでなく常に表示する。

合格

  • チェックマークが付くスキルのチップ すべてのスキルがピルで、ピル自体がチェックボックスです。オフは#6b7280の枠線(4.83:1)、オンは青緑の枠線と#ccfbf1の塗りに、言葉の前のチェックマークが付きます。文字は#115e59で、塗りに対して6.73:1です。外すための別のチップはなく、その場のピルでSpaceを押せば外れます。
  • スキル
    2件選択中
    件数と「すべて解除」付きのチェック一覧 チップは使いません。チェックボックスの上の行に選んだ件数を示し、横に「すべて解除」ボタンを置きます。件数はグループの中にあり、スクリーンリーダーは一覧と一緒に見つけられます。どのスキルも一覧のその場で外せるので、余分に移動する場所がありません。
  • デザインライティング
    「+2件」ボタンで省略したチップ チップは2つだけ表示し、その後ろに残りを開く「+2件」ボタンを置きます。ボタンは開いているかどうかを伝えます。表示中のチップも開いたチップも、それぞれ×ボタンを持つので、届かないものはありません。

不合格

  • デザイン ライティング リサーチ コーディング
    ホバーで×が出るすっきりしたチップWCAG 2.1.1 何もしていないときのチップは言葉だけで、マウスを重ねると×が出ます。×はボタンではないためTabでは届かず、タッチ画面では、タップするまで×が出ないか、まったく出ません。Tabで試してください。
  • 塗られるだけで何も伝えないピルWCAG 4.1.2 各ピルはボタンなのでTabとEnterで操作でき、選ぶと#0f766eに白い文字(5.47:1)で塗られます。しかし塗りはクラスから描かれ、スクリーンリーダーには、選んでいてもいなくても「ライティング、ボタン」としか聞こえません。
05

修正の確認

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

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

5件中0件を確認済み

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

制限

これは、決まった選択肢の短い一覧のための出発点となる実装例です。グループ分けした選択肢、スクロールに合わせて読み込む選択肢、チップの並べ替えには当てはまりません。実際の選択肢を使い、対応するブラウザーと支援技術で操作全体を確認してください。

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

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

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

再テストの進め方