ダークモードと高コントラスト対応のアクセシビリティ完全ガイド:配色設計・コントラスト検証・OS設定尊重・アイコン/画像・フォーカス可視まで(WCAG 2.1 AA)
概要サマリー(先に要点)
- ダークモードは“おしゃれ”ではなく、眩しさ軽減・疲労軽減・光過敏への配慮として重要なアクセシビリティ施策ですの。
- ただし暗い背景は、コントラストが足りないと一気に読めなくなります。鍵は ①文字コントラスト ②色の意味に頼らない ③非テキスト要素(境界・アイコン・フォーカス)の3:1 ④テーマ間で一貫した状態表現。
- OS設定(
prefers-color-scheme/prefers-contrast)を尊重し、ユーザーが選んだ環境を上書きしないことが大切です。- 画像・アイコン・グラフは“テーマで破綻しやすい”代表選手。SVGのcurrentColor、デュアルアセット、背景板、輪郭線で対策します。
- この記事には、すぐ使える 配色トークン例、CSSテンプレ、チェックリスト、5分スモークテストを収録しています。
対象読者(具体):UI/UXデザイナー、フロントエンドエンジニア、デザインシステム担当、広報/編集者(画像を扱う方)、QA/テスター、SaaS/業務システム開発者
アクセシビリティレベル:WCAG 2.1 AA 準拠を目標(関連:1.4.3、1.4.11、1.4.1、2.4.7、2.1.1 ほか)
1. はじめに:ダークモードは“見やすさの選択肢”を増やす
暗い画面は、夜間や暗所での閲覧に向き、眩しさを減らしてくれます。光に敏感な方、片頭痛が起きやすい方、疲労時に白背景がつらい方には、ダークモードが大きな助けになりますの。
一方で、黒背景に薄いグレー文字、細いアイコン、淡い境界線……といった“雰囲気重視”のダークUIは、読めない・押せない・状態が分からない、という事故を生みがちです。
ダークモードをアクセシブルにするには、単に背景を黒くするのではなく、コントラスト、色の意味、状態表現、フォーカスをテーマとして再設計する必要があります。この記事では、その具体策を実務向けに解説しますね。
2. 基本原則:ダークでもライトでも“同じ理解”に着地させる
2.1 文字のコントラスト(1.4.3)
- 通常文字:4.5:1 以上
- 大きい文字:3:1 以上
ダーク背景で白文字を使うとコントラストは確保しやすいですが、#FFFFFFは“眩しさ”が強いこともあります。実務では、本文は少し落ち着いた白(例:#E9ECF1)にして、行間をわずかに広げると読み疲れが減りますの。
2.2 非テキスト要素(1.4.11)
- ボタンの境界線
- 入力欄の枠
- アイコン
- フォーカスリング
これらは 3:1 以上が目安です。薄い境界線で“あるように見える”だけは危険です。
2.3 色だけで意味を伝えない(1.4.1)
ダークモードは特に、色の差が分かりにくくなりがちです。
- エラー=赤だけ
- 選択=青だけ
ではなく、アイコン・太字・下線・形状で重ねましょう。
3. OS設定を尊重する:prefers-color-scheme と prefers-contrast
3.1 prefers-color-scheme(ライト/ダーク)
:root{
--bg:#ffffff;
--fg:#222222;
--muted:#555;
--border:#c9d1d9;
--link:#0b63f6;
--focus:#ff9900;
}
@media (prefers-color-scheme: dark){
:root{
--bg:#0f1115;
--fg:#e9ecf1;
--muted:#a9b3c1;
--border:#273142;
--link:#58a6ff;
--focus:#ffb020;
}
}
body{ background:var(--bg); color:var(--fg); }
a{ color:var(--link); text-decoration: underline; }
:focus-visible{ outline:3px solid var(--focus); outline-offset:3px; }
3.2 prefers-contrast(高コントラスト)
高コントラスト設定の利用者には、フォーカスや境界線を強めると安心ですわ。
@media (prefers-contrast: more){
:root{
--border:#ffffff;
}
a{ text-decoration-thickness: .14em; }
:focus-visible{ outline-width:4px; }
}
3.3 ユーザーの選択を上書きしない
サイト内トグル(ライト/ダーク切替)を提供する場合も、OS設定を無視して勝手に固定しないように。
おすすめは
- 初回:OS設定に従う
- 変更:ユーザーの明示選択を保存
です。
4. 配色設計:トークンで破綻を防ぐ(デザインシステム連携)
ダークモードで事故が起きる最大の理由は、色が“値ベタ書き”で増殖し、状態ごとに統一されないことです。
そこで、色は「用途」でトークン化します。
4.1 最小トークンセット(例)
- 背景:
--bg/--surface - 文字:
--fg/--muted - 枠:
--border - リンク:
--link - 状態:
--danger/--success/--warning - フォーカス:
--focus
4.2 状態色は“背景との組み合わせ”で設計
エラー色(赤)も、背景が暗いと沈んで見えたり、逆に鮮やかすぎて痛かったりします。
- 背景(surface)上での見え方
- テキストとして載せた場合
- 枠線として使う場合
をセットで確認しますの。
5. リンク・ボタン・フォーム:ダークで起きやすい事故と対策
5.1 リンク:色+下線で判別
ダーク背景だと、リンク色が本文色に溶けやすいです。下線は“最後の砦”ですの。
a{ text-decoration: underline; text-underline-offset:.2em; }
a:hover, a:focus-visible{ text-decoration-thickness:.14em; }
5.2 ボタン:境界と押下状態を明確に
- 境界線や影だけに頼らない
- hover/focus/active の差を 明度差+輪郭 で出す
5.3 入力欄:枠線の3:1とプレースホルダー
- プレースホルダーは薄くなりがちなので、ラベルを必ず可視に
- 入力欄は背景(surface)と境界(border)を明確に
- エラーは色だけにせず、アイコン+文言で
6. 画像・アイコン・図表:テーマで壊れやすい要素の攻略
6.1 SVGは currentColor を活用
文字色に追随するアイコンは、テーマ切替に強いです。
<svg aria-hidden="true" width="20" height="20" fill="currentColor">…</svg>
6.2 画像の“黒が溶ける”問題
- ロゴが黒1色
- 図が黒線だけ
はダーク背景で消えます。対策は - ダーク用ロゴを用意
- 輪郭線を追加
- 背景板(白の薄いカード)を敷く
のいずれかですわ。
6.3 グラフは色以外の符号化を
ダークモードでは色の見分けが難しくなることもあります。
- 線種(実線/破線)
- マーカー形状(●▲◆)
- ラベルを線の近くに
で、テーマを超えて理解できるようにします。
7. フォーカス可視:ダークで見失いがちな“現在地”を守る
ダーク背景では、フォーカスリングの色選定が難しくなります。
- 背景と十分な明度差
- 画像や色面の上でも見える
- 細すぎない(3px以上)
を基本に、トークンで固定しましょう。
:focus-visible{
outline:3px solid var(--focus);
outline-offset:3px;
}
8. 高コントラストモード(Windows等)と強制色への備え
OSが強制的に色を置き換えるモードでは、意図した配色が崩れます。
- 重要な情報を背景色だけに依存しない
- 下線、枠線、アイコンの形状など“色以外”の情報を用意
が効きますの。
加えて、SVGやアイコンが消える場合があるので、重要アイコンはテキスト併用が安全です。
9. 5分スモークテスト:ダークモードの最小確認
- 本文・リンク・ボタン文字が読める(4.5:1目安)
- 境界線・アイコン・フォーカスリングが見える(3:1目安)
- リンクは色だけでなく下線で判別できる
- フォーカスがライト/ダーク両方で見える
- エラー・成功・選択状態が色だけに依存していない
- ロゴや重要画像が背景に溶けない
- グラフが色だけで識別されていない
- OS設定(prefers-color-scheme/contrast)で期待通り変わる
- 200%拡大でも破綻しない(リフロー)
10. 対象読者にとっての価値(具体)
- 光過敏・片頭痛がある方:眩しさが減り、長時間でも利用しやすい。
- 弱視・拡大利用者:高コントラストと明確な境界で、要素の判別が安定する。
- 色覚多様性のある方:色だけに依存しない状態表現で、理解が揺れにくい。
- キーボード利用者:フォーカスリングが常に見え、迷子にならない。
- 運用チーム:トークン化で配色の破綻が減り、更新時の品質を守りやすい。
11. まとめ:暗い画面でも“同じ理解”へ導く
- ダークモードは眩しさ軽減のアクセシビリティ施策。雰囲気より可読性を優先。
- 文字4.5:1、非テキスト3:1を目安に、テーマごとに検証する。
- OS設定(prefers-color-scheme/contrast)を尊重し、ユーザーの選択を上書きしない。
- トークン化で配色・状態表現・フォーカスを標準化し、破綻を防ぐ。
- 画像・アイコン・グラフは壊れやすいので、currentColor・輪郭・背景板・形状の重複で守る。
- 5分スモークテストで、更新後も読みやすさと判別性を維持する。
ダークモードは、“選べる”ことそのものが優しさですわ。
その選択肢が、どんな人にも同じ意味で届くように、落ち着いた配色と確かなコントラストで支えていきましょうね。

