色・コントラスト

視覚は a11y で最も対象範囲が広い領域。色覚特性(約8%の男性、0.5%の女性)、加齢による視力低下、 屋外の明るさ、低品質ディスプレイ、すべてが「視覚条件」。

WCAG コントラスト比

テキストとその背景の明度差の比率。1:1(同じ)〜 21:1(黒と白)。

適合レベル通常テキスト大型テキスト
AA(実務目標)4.5:1 以上3:1 以上
AAA7:1 以上4.5:1 以上
UI コンポーネントとグラフィック3:1 以上(境界線、フォーカスリング、アイコン)

大型テキストの定義: 18pt(24px)以上、または 14pt(18.66px)以上で太字

確認ツール

背景テキスト判定
#ffffff#00000021:1AAA
#ffffff#5959597:1AAA
#ffffff#7676764.54:1AA
#ffffff#9999992.85:1不可
#0b0d12(このサイト)#e7ebf316.6:1AAA
「うすいグレーの placeholder / hint テキスト」が一番危ない

デザイン上、color: #999opacity: 0.5 で控えめに見せたいテキストが コントラスト不足の最頻発元。ダークモードでは特に境界線・hint テキストが見えなくなりがち。

色だけに頼らない

色覚特性(赤緑色弱・青黄色弱・全色盲)の人にとって、「赤が悪い、緑が良い」だけでは伝わらない。 必ず色 + 別の手がかりを使う。

悪い例

<p style="color: red">エラー</p>
<p style="color: green">OK</p>

良い例(色 + アイコン + テキスト)

<p class="error">
  <svg aria-hidden="true"> <!-- ⚠ --> </svg>
  <strong>エラー:</strong> メールアドレスの形式が正しくありません
</p>
<p class="success">
  <svg aria-hidden="true"> <!-- ✓ --> </svg>
  保存しました
</p>

よくある「色だけ」パターン

リンクの下線

WCAG 1.4.1 では「色だけで識別させない」ことを求める。本文中のリンクは下線を付けるのが基本。 ナビゲーションのように位置で明らかな場合は省略可。

/* 本文中のリンクは下線 */
.prose a {
  color: #0066cc;
  text-decoration: underline;
}

/* hover でアクセント */
.prose a:hover {
  text-decoration-thickness: 2px;
}

フォーカスインジケータの色

フォーカスリングも 3:1 以上のコントラストが要る。 ブラウザ標準の青いリングが背景と被るなら、独自に明示する。

:focus-visible {
  outline: 2px solid #38bdf8; /* 背景に対して 3:1 以上 */
  outline-offset: 2px;
}

テキストサイズと拡大

200% ズームで崩れない

WCAG 1.4.4 では、200% ズームで内容と機能が損なわれないことが求められる。 テキストの拡大やブラウザのページズームで横スクロールが出ないように。

400% ズーム / リフロー

WCAG 1.4.10 (Reflow) は320 CSS px の幅でも横スクロールしないこと。 モバイル対応がしっかりしていれば自然に満たせる。

テキスト間隔の調整可能性

WCAG 1.4.12。ユーザーが行間・文字間・段落間を調整しても崩れないこと:

!important 付きの固定 line-height や 文字サイズはこの基準を破りやすい。

ダークモードと color-scheme

OS のダーク/ライト設定に追従する基本パターン。

:root {
  color-scheme: light dark;
  --bg: #fff;
  --fg: #111;
}
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #0b0d12;
    --fg: #e7ebf3;
  }
}
body { background: var(--bg); color: var(--fg); }

Windows ハイコントラストモード

Windows の「ハイコントラスト」設定では、ブラウザが色を強制的に置き換える。 背景画像や CSS でしか色情報が伝わらない要素はそこで消える。

@media (forced-colors: active) {
  .button {
    border: 1px solid CanvasText;
  }
}

視覚特性別の配慮

ロービジョン(弱視)

色覚特性

羞明(光がまぶしい)

「テキスト画像」の扱い

ロゴを除き、テキストを画像化しないのが原則(WCAG 1.4.5)。

Web フォントが普及した今、ほぼ全部 HTML テキスト + CSS で表現できる。

具体的なチェックリスト

最初に整える「カラートークン」

サービス全体で「コントラスト合格済み」のカラーパレットを最初に決めておくと、 以降の実装でほぼ事故が起きない。テキスト用、UI 用、エラー用、ホバー用などにトークン化する。