CSSアクセシビリティ改善テクニック
インタラクティブデモ
prefers-contrast / scroll-margin-top / order プロパティの動作を確認できます
1. prefers-contrast — ハイコントラストモード対応
prefers-contrast: more メディア特性を使うと、OSのハイコントラスト設定を検知してスタイルを強化できます。下のトグルでシミュレーションできます。
現在のカラー変数
フォーム要素のコントラスト確認
テキストスタイルの確認
通常のテキストです。イタリック体のテキストはハイコントラストモードで太字になります。
小さいテキスト(small要素)も太字に強化されます。
リンクテキストの色もより識別しやすい色に変更されます。
テキスト選択時の text-shadow 無効化
このテキストを選択してみてください。通常モードでは text-shadow が適用されていますが、ハイコントラストモードでは無効化されます。
適用されるCSS
prefers-contrast の値一覧
| 値 | 説明 |
|---|---|
no-preference | ユーザーが特に設定を行っていない状態(デフォルト) |
more | より高いコントラストを希望している状態 |
less | より低いコントラストを希望している状態 |
custom | 特定のカラーパレットを指定している状態 |
prefers-contrast はあくまでユーザーの設定を検知するためのものです。まずはデフォルトのスタイルで十分なコントラスト比を確保することが最も大切です。
2. scroll-margin-top — 固定ヘッダーでのアンカーリンク対応
固定ヘッダーがあるページでアンカーリンクをクリックすると、コンテンツがヘッダーの下に隠れてしまう問題を scroll-margin-top で解決できます。
適用されるCSS
scroll-margin-top と scroll-padding-top の違い
| プロパティ | 適用先 | 用途 |
|---|---|---|
scroll-margin-top |
スクロール先の子要素 | 個別のアンカーターゲットごとにオフセットを調整 |
scroll-padding-top |
スクロールコンテナ(親要素) | すべてのスクロール先に一括でオフセットを設定 |
レスポンシブ対応
アンカーターゲット A
このセクションにはアンカーリンクでジャンプできます。ヘッダーの下に隠れずに表示されていることを確認してください。
アンカーターゲット B
scroll-margin-top が設定されているため、ヘッダー分のオフセットが自動的に確保されます。キーボードナビゲーションやスクリーンリーダーの利用者にとっても、現在位置が明確になります。
アンカーターゲット C
従来の padding-top + margin-top(負の値)による方法と異なり、レイアウトへの副作用がありません。
3. order プロパティ — 視覚順序とDOM順序の注意点
CSSの order プロパティで視覚的な並び順を変更すると、キーボードのTab移動順序やスクリーンリーダーの読み上げ順序と一致しなくなる場合があります。
❌ orderで並べ替えた場合(問題あり)
視覚的な順序: ブログ → 会社概要 → ニュース
Tab移動順序: ニュース → ブログ → 会社概要(HTML記述順)
✅ HTMLの順序を視覚的な順序に合わせた場合(推奨)
注意が必要なCSSプロパティ
| プロパティ | ずれが起こるケース |
|---|---|
order | Flex / Grid アイテムの表示順を変更した場合 |
flex-direction: row-reverse | Flexアイテムの並び順が逆になる場合 |
grid-row / grid-column | Grid アイテムを明示的に配置した場合 |
position: absolute / fixed | 要素を通常のフローから外して配置した場合 |
Chrome 137以降の新機能: reading-flow
reading-flow は2026年3月時点では Chrome 137以降のみの対応です。他のブラウザではまだサポートされていないため、本番環境での利用にはブラウザ対応状況の確認が必要です。