トピックを検索
色だけで区別されるステータス表示
注文一覧が、各注文の状態を緑・黄・赤の小さな点と上の凡例だけで示しているため、どの支払いが失敗したかは点の色でしか分かりません。
.status-failed { background: #e03131; } 問題
点の色でしか示されていないため、赤と緑を見分けられない人には、どの注文の支払いが失敗したか分からない
ショップのアカウントページに、注文履歴が並んでいます。注文番号、日付、合計金額、そして各行の最後に小さな色の点があります。緑は配達済み、黄は配送中、赤は支払い失敗で、一覧の上の凡例がそれを説明しています。スマートフォンでも各行が1行に収まるように、デザインは行を短く保っています。言葉なら折り返してしまうところを、点ならひと目で読めます。実装も丁寧です。各点には視覚的に隠したテキストがあり、スクリーンリーダーは行の最後で「支払い失敗」と読み上げます。
赤と緑を見分けにくい色覚特性のひとつ、2型色覚の見え方で、この一覧を見てみます。緑、黄、赤は、ほとんど同じオリーブ色になります。凡例はどの色が何を意味するかを説明していますが、凡例の3つの点も同じに見えます。注文1044は支払いに失敗していて、ショップは別のカードを待っています。しかし本人には同じように見える4件の注文が並んでいるだけで、どれに対応すればよいのか、画面のどこにも示されていません。
WCAG 1.4.1(色の使用)は、情報を伝える視覚的な手段を色だけにしてはいけないとしています。注文のステータスも情報です。点どうしの違いは色だけで、大きさも、丸い形も、行の中の位置も同じです。凡例は助けになりません。行との対応を、同じ色で取るしかないためです。隠したテキストでも解決しません。1.4.1の解説書は、コードを通じて支援技術に伝わる情報があっても、この基準を満たすとは限らないとしています。求められているのは、色に代わる目に見える手段だからです。
1.4.1の解説書は、色で違いを示せる方法を一つだけ認めています。2つの色の明るさにも差があり、その間のコントラスト比が3:1以上なら、2つ目の視覚的な手がかりになるというものです。この3色は、この条件に遠く及びません。緑 #2f9e44、黄 #b7791f、赤 #e03131 の間のコントラスト比は1.06:1から1.31:1しかなく、違いはほぼ色相だけです。そして色覚特性で見分けられなくなるのが、まさにその色相です。白いページに3つのステータスの点を置く限り、この例外はどんな色の組み合わせでも満たせません。言葉を添えない点には、達成基準1.4.11(非テキストのコントラスト)により白に対して3:1が必要で、その範囲には互いに3:1離れた色を2つまでしか置けず、3つは置けないためです。
日差しの下のスマートフォンや、暗くしたノートPCの画面でも同じことが起きます。3色が互いに溶け合って見えるためです。スクリーンリーダーの利用者はここでは困りません。隠したテキストが各ステータスを伝えています。問題が起きるのは、一覧を目で見る人です。
10グループ中3グループに影響
- 全盲 (影響なし)
- 弱視 (影響あり)
- 色覚 (影響あり)
- ろう (影響なし)
- 難聴 (影響なし)
- 発話 (影響なし)
- 手の操作 (影響なし)
- 筋力・可動域 (影響なし)
- 認知 (影響あり)
- 光過敏 (影響なし)
- 色を知覚しない 赤と緑を見分けにくい色覚特性があると、緑、黄、赤の点がどれも同じオリーブ色に見えることがあります。行を見ても凡例を見ても、どの支払いが失敗したか分かりません。
- 視覚が限られる コントラストの感度が低い人には、10ピクセルの点は小さなしみにすぎません。400%に拡大すると凡例は画面の外に出るため、色を覚えておいてから照らし合わせることになります。
- 言語・認知・学習の能力が限られる 色の凡例は、覚えたうえで、行を読む間ずっと頭に置いておく必要があります。記憶や注意に困難のある人には負担です。行の中の言葉なら、何も覚える必要がありません。
マークアップに誤りはありません。各点は見えない名前が付いた空のspanで、名前を確認するスキャンは通ります。axeが色だけの区別を確認するのは文章の中のリンクだけで、一覧の点どうしを比べるルールはありません。この監査では、目に見える言葉がなく、1つの一覧や表の中で2色以上に分かれる小さな色の印を見つけられますが、その色に意味があるかどうかは人が判断する必要があるため、確認の候補として扱います。修正を頼まれたAIのコーディングツールは、点に title や aria-label を付けがちです。どちらも、誰の目にも見えないテキストが増えるだけです(titleが表示されるのは、10ピクセルの点にマウスを止めたときだけです)。色覚特性に配慮したとされる配色に替えることもあります。色相を見分けやすくなる人はいますが、色が唯一の手がかりであることは変わりません。
修正方法
各ステータスを点の横に言葉で書く。または、ステータスごとに固有の形を付ける
- 1色で示すステータスは、言葉か固有の形でも示す。
- 2ステータスの言葉は背景に対して4.5:1、言葉を添えないアイコンや点は3:1が必要。
- 3スクリーンリーダーにだけ伝わるテキストは、2つ目の手がかりにならない。目に見える必要がある。
<h2>注文履歴</h2><ul class="legend"> <li> <span class="status status-delivered"></span> 配達済み </li> <li> <span class="status status-shipped"></span> 配送中 </li> <li> <span class="status status-failed"></span> 支払い失敗 </li></ul><ol class="orders"> <li> <a href="/orders/1044">注文 1044</a> <span>10月15日</span> <span>$64.00</span> <span class="status status-failed"><span class="visually-hidden">支払い失敗</span></span> </li> …</ol>点の横にステータスを書く
<h2>注文履歴</h2><ol class="orders"> <li> <a href="/orders/1044">注文 1044</a> <span>10月15日</span> <span>$64.00</span> <span class="status status-failed">支払い失敗</span> </li> …</ol>この方法を選ぶ理由:見た目だけでなく、言葉でも伝える
スクリーンリーダーでは各ステータスが聞こえますが、画面上の点の違いは色だけです。上の凡例も、同じ色でしか点と対応させられません。
各行がステータスを言葉で示すので、色はステータスを担う役から、言葉を補う役に変わります。点は残るため、色を見分けられる人にはデザインの色分けがそのまま伝わります。一覧の上の凡例は要らなくなり、隠したテキストも外します。スクリーンリーダーは目に見える言葉を読むからです。言葉はステータスの色ではなく、本文の色で表示します。黄は白に対して3.64:1で、点には十分ですが、文字に必要な4.5:1には届きません。スマートフォンでは、言葉を消さずに、合計金額の下に折り返します。
どちらも1.4.1を満たします。言葉を使ってください。凡例が要らず、どの拡大率でも、どの読み手にも伝わります。必要なのは各行にステータスの言葉が入る場所だけで、デザインファイルのスマートフォンの表示では、言葉を消さずに折り返す形で描きます。形は行の短さを保てますが、凡例に頼ります。社内のダッシュボードの密な表のように、どうしても言葉が入らない場所でだけ選び、凡例と隠したテキストには、それぞれの形の言葉を残します。
点に付けた title は、2つ目の手がかりになりません。表示されるのはマウスを点に止めたときだけで、タッチやキーボードでは表示されません。ラベルやヒントがツールチップにしかない入力欄でも、入力欄について同じ限界を説明しています。ステータスの色を薄くした背景に言葉を載せる柔らかいピル形も、言葉だけの場合と同じように使えます。下のデザインの案で、ほかの見せ方と合わせて紹介しています。
ステータスは、色ではなく言葉を受け取るコンポーネントにします。<OrderStatus status="failed"> が一つの表から点と「支払い失敗」の両方を表示すれば、言葉のない点をどのページでも描けなくなります。同じ点が使われがちな在庫、支払いの状態、予約枠にも、同じ表を使えます。
Windowsのコントラスト テーマでは、ブラウザーが背景色をテーマの色に置き換えるため、修正前の点はまったく見えなくなります。1つ目の修正の言葉は残ります。2つ目の修正の形も、currentColor の線で描いているので残ります。塗りの色を固定したアイコンは元の色のまま描かれ、テーマの背景に紛れることがあります。この場合はハイコントラストモードで消えるフォーカス・アイコン・選択状態で扱っています。
デザインの案
色を残したまま、色がなくても読めるステータスにできる
同じ2件の注文を、ガイドと同じ色でさらに4通りに描きました。2つはどの支払いが失敗したかを言葉で伝え、2つは色だけで伝えています。
デザインファイルで
- 各ステータスを、表示するすべての場所で言葉で書く。
- 言葉が入らない場所では、色だけでなく、ステータスごとに固有の形を付ける。
- ステータスの色の横にコントラスト比を書く。言葉は最低4.5:1、言葉を添えないアイコンは最低3:1。
- スマートフォンの表示を、ステータスの言葉を消さずに合計金額の下に折り返して描く。
合格
- アイコンと言葉の入った柔らかいピル ステータスの色を薄くした背景に、同じ色の濃い色で言葉を載せます。#fdececの上の#b42323は5.74:1、#e7f5eaの上の#1e6b30は5.83:1です。色分けは背景が担い、意味は言葉とアイコンが担います。
基本原則:見た目だけでなく、言葉でも伝える
- 必要な対応ごとにまとめた注文 支払いに失敗した注文を「ご対応が必要です」の見出しの下に分け、残りは「配達済み」の下に並べます。各注文に何が必要かは見出しが伝え、点はそれを補うだけです。利用者に対応を求めるステータスがある一覧に向いています。
不合格
- カードの端の色の帯WCAG 1.4.1 多くのダッシュボードのように、各注文のカードの左端に、ステータスの色で4pxの帯を引きます。2枚のカードの違いは帯の色相だけで、#e03131と#2f9e44の差は1.31:1です。
- ステータスで色を付けた行WCAG 1.4.1 行全体に薄い赤や薄い緑を敷く、柔らかく今風の見せ方です。2つの背景色#fdececと#e7f5eaの差は1.01:1で、色相が分からなければ2行は同じに見えます。
修正の確認
5項目、マウス不要
確認方法: 色覚シミュレーション、コントラストの測定、拡大表示、強制配色
OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。ステータスの色や注文一覧のレイアウトを変更した際は、再度確認します。
制限
このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。色の値は例のため、実際の配色を実際の背景で測定してください。このガイドは、色の付いた印で示すステータスを扱います。ほかの場所で色だけを使う場合も同じ基準を満たさず、それぞれにガイドがあります。色だけで区別される本文中のリンク、色だけで示された必須項目、直し方がわからないフォームエラーです。「赤い注文をご確認ください」のように、色で対象を指し示す指示は、色や形、位置だけに頼る操作の指示で扱っています。塗りだけで示す選択中の項目や、色だけで区別するグラフの線も同じ問題で、今後それぞれのガイドで扱います。必要とする人と一緒に、ページ全体を確認してください。
よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。
コードを更新しても、使いやすさを保つために
ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。