オレンジのリンク、写真の上の見出し、ホバー時のボタンが読みにくい
テキストが、明るいブランドカラー、明るい写真、薄くなるホバー状態など、後ろの色に近い色で描かれています。
問題
ロービジョンの利用者が、メニュー、写真の上の見出し、マウスを重ねたときのボタンの文字を読めません。
あるベーカリーのサイトは、明るいオレンジをブランドカラーにしています。メニューのリンクと価格は、白の上にそのオレンジで表示されます。トップページはクリーム色の店先の写真から始まり、白い見出しと説明文が写真の上に直接のっています。その下の「注文する」ボタンは、濃いオレンジの上の白い文字で読みやすいのですが、マウスを重ねると薄いオレンジに変わり、クリックしようとしたところで文字がほとんど見えなくなります。
どのテキストも、後ろの色に近い色で描かれています。白の上のオレンジ #e8762c は2.97:1です。クリーム色の壁 #f6e7d8 の上の白い見出しは1.21:1です。ボタンのホバー状態は #f0954f の上の白で、2.30:1です。WCAG 1.4.3では、通常の文字に4.5:1以上、大きな文字(24px以上、または18.66px以上の太字)に3:1以上を求めています。見出しは32pxの太字なので3:1、説明文、リンク、ボタンの文字は通常の文字なので4.5:1が必要です。どれも届いていません。
ロービジョンの利用者や多くの高齢の読者は、薄い文字から読めなくなります。文字が背景ににじみ、単語を推測するしかありません。色覚に特性のある人には、見た目以上に近い色に見える組み合わせもあります。日差しの下でスマートフォンを見る人、暗いノートパソコンの画面や画面拡大を使う人も同じです。ホバー時の問題は、選ぼうとしているものを確かめたいその瞬間に、マウスの利用者を困らせます。
axeなどの自動チェックは、無地の背景の上の通常時の文字を確認します。画像の上の文字は、文字の後ろの色が写真によって変わり、編集者が翌日に写真を差し替えることもあるため、多くの場合「要確認」になるか、何も報告されません。ホバーやフォーカスも行わないため、ホバー時に薄くなる文字は測定されません。AIはデザインに合うブランドカラーをリンクに選びがちで、デザイン案の最も明るい部分ではなく、平均的な背景で確認しがちです。
試してみる
メニューと見出しを読み、ボタンにマウスを重ねるかTabで移動してください。
ホバーやフォーカス中のボタンも含め、すべての文字が読めますか?
今朝焼きました
サワードウ、パン、季節のタルト。
再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。
修正方法
すべてのテキストを、どの状態でも、実際に後ろにある色に対して4.5:1以上にします。
- 1通常の文字は4.5:1以上、24px以上または18.66px以上の太字は3:1以上にする。
- 2画像の上の文字は、重なりうる最も明るい部分に対して測定し、背景を敷く。
- 3ホバーとフォーカスも通常時と同じ比率にし、明るくせずに濃くする。
:root { --brand: #e8762c; /* 白の上で2.97:1 */}.nav a,.price { color: var(--brand);}.hero-text { color: #fff; /* クリーム色の壁の上で1.21:1 */}.button { background: #b4501a; /* 白い文字で5.12:1 */ color: #fff;}.button:hover,.button:focus-visible { background: #f0954f; /* 白い文字で2.30:1 */}:root { --brand: #e8762c; /* 装飾専用 */ --brand-text: #b4501a; /* 白の上で5.12:1 */ --brand-strong: #8a3c0d; /* 白い文字で7.68:1 */}.nav a,.price { color: var(--brand-text);}.hero-text { color: #fff; /* 写真が真っ白でも、白い文字で5.74:1 */ background: rgb(0 0 0 / 0.6); padding: 1rem 1.25rem;}.button { background: var(--brand-text); color: #fff;}.button:hover,.button:focus-visible { background: var(--brand-strong); text-decoration: underline;}どの色もデザインファイルの上で自然に見えるよう選ばれています。オレンジはブランドの色で、白い見出しは写真の暗い部分では映え、薄いホバーは軽い演出に見えます。しかし、利用者が見る状態で、文字の実際の後ろの色に対して測定されたものはありません。
リンクと価格は同じオレンジの濃い色を使い、5.12:1になります。見出しは60%の黒い背景の上にあります。最も明るい写真、つまり真っ白の上でもこの背景は #666666 になり、白い文字は5.74:1です。どの写真に差し替えても崩れません。ホバー状態は明るくせずに濃くして7.68:1にし、下線で色に頼らない手がかりも加えます。
ブランドカラーは残し、その色に合った役割を与えます。文字としては基準を満たさない明るいオレンジも、大きな面の塗り、装飾の線、暗い文字をのせる背景には使えます。文字用の濃い色は専用のトークンにして、どのオレンジが文字に使えるかを覚えておく必要がないようにします。
画像の上の文字は、平均ではなく最も不利な部分で測定します。背景のパネル、文字の下のグラデーション、写真自体を暗くする方法のいずれも有効です。編集者がどの画像をアップロードしても影響を受けないため、背景のパネルが最も確実です。細い文字の影だけで比率に届くことはまれです。影に頼る場合は、各文字の実際の後ろの色を測定してください。
ホバー、フォーカス、押下中、訪問済み、選択中の状態もすべて対象です。色が変わる状態はそれぞれ確認します。文字への opacity や半透明の文字色にも注意してください。計算された結果は、トークンの色より薄くなります。ダークモードを含め、サイトが提供するテーマごとに測定が必要です。白の上で基準を満たす組み合わせも、グレーの上では満たさないことがあります。
ロゴ、無効化された操作要素の文字、純粋な装飾や見えない文字は対象外です。プレースホルダーは対象外ではなく、ページで最も薄い文字であることがよくあります。強制カラーでは、ブラウザーが文字と背景の色を利用者の設定に置き換え、Chromiumでは画像の上の文字の後ろに背景板が描かれます。想定に頼らず、強制カラーでもヒーローを確認してください。
WebAIMのContrast Checkerは、色の組み合わせが分かっている場合に最も手軽な方法です。文字の色を前景(Foreground)、後ろの色を背景(Background)に、16進数で入力します。WCAG AAの2つの結果を確認します。「Normal Text」が4.5:1、「Large Text」が3:1の判定です。基準を満たさない場合は、前景の下のLightnessスライダーを動かし、AAの両方の結果が合格になる色を探します。ブランドの #e8762c から、文字用の #b4501a を見つけたのもこの方法です。透明度は入力できないため、実際に表示される色を入力します。DevToolsの計算済みスタイルからコピーするか、画面から色を取得してください。
ブラウザーのDevToolsでは、ページ上でそのまま測定できます。ChromeやEdgeでは、文字を検証し、Stylesペインの color の横にある色見本をクリックします。カラーピッカーに、検出された背景に対するコントラスト比が表示され、AAとAAAの判定と、基準を満たす色の候補も示されます。ホバーとフォーカスは、:hov パネルで :hover または :focus-visible にチェックを入れてから、もう一度色見本をクリックして測定します。FirefoxのAccessibility Inspectorでもコントラストを確認できます。どちらも、写真のどの部分が各文字の後ろにあるかは判断できないため、画像の上の文字の数値は当てにしないでください。
Colour Contrast Analyser(CCA)は、TPGiが無料で提供するデスクトップアプリで、画面上の任意の画素を取得できるスポイトがあります。画像の上の文字に使います。文字の色を取得し、次に文字の後ろの最も明るい画素(暗い文字なら最も暗い画素)を取得します。テキストの枠に表示されうるすべての画像で繰り返します。
修正の確認
4つの確認
確認方法: コントラストの測定、マウス、キーボード、強制配色
OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。色のトークン、テーマ、ヒーローの画像を変更した際は、再度確認します。
制限
このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。色の値とトークン名は例のため、実際の配色を実際の背景で測定してください。コントラスト比は最低限の基準であり、読みやすいことの証明ではありません。同じ比率でも、細い書体、小さな文字、長い行は読みにくくなります。必要とする人と一緒に、ページ全体を確認してください。
よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。
コードを更新しても、使いやすさを保つために
ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。