ダークモード対応の実装方法(CSS・SCSS・JavaScript)

Dark Mode

OSやブラウザのダークモード設定に応じてスタイルを切り替える方法をまとめます。CSSのメディアクエリ、SCSSのmixin、JavaScriptのmatchMediaを組み合わせた実装例です。

See the Pen Dark Mode by oheyril (@oheyril) on CodePen.

CSSでのダークモード判定

prefers-color-schemeメディアクエリを使うことで、ユーザー環境がダークモードのときだけスタイルを適用できます。

CSS
@media (prefers-color-scheme: dark) {
  /* ダークモード時に適用するCSS */
}

SCSSのmixinを使った管理方法

SCSSでは、ダークモード用スタイルをまとめるためのmixinを作成できます。

SCSS
@mixin dark {
  @media (prefers-color-scheme: dark) {
    @content;
  }
}

.example {
  color: #000;

  @include dark {
    color: #fff;
  }
}

ポイント

  • @mixin dark内の@contentに、呼び出し元のスタイルが挿入される。
  • @include dark { … }の中はダークモード時のみ適用される。
  • 複数コンポーネントのダークスタイルを一箇所に整理できるため、保守性が高い。

JavaScriptによるモード検知とクラス付与

JavaScriptのmatchMediaを使うと、現在のモードと、ユーザーがライト/ダーク設定を切り替えた瞬間を検知できます。

JavaScript
const darkQuery = window.matchMedia("(prefers-color-scheme: dark)");

function applyTheme() {
  if (darkQuery.matches) {
    document.body.classList.add("dark");
  } else {
    document.body.classList.remove("dark");
  }
}

applyTheme();
darkQuery.addEventListener("change", applyTheme);

ポイント

  • darkQuery.matchesで現在のモードを取得。
  • 判定結果に応じて<body>darkクラスを付与。
  • changeイベントでOS設定変更にも自動対応。

CSSとJavaScriptを併用する理由

CSSだけでもダークモード対応は可能ですが、JavaScriptを併用すると以下が柔軟に行えます。

  • 切り替えアニメーションの追加
  • 手動切り替えボタンとの同期
  • DOM構造の状態変更(アイコン変更など)

まとめ

CSSのprefers-color-scheme、SCSSのmixin、JavaScriptのmatchMediaを組み合わせることで、ユーザー環境に合わせたダークモードを自動的に実装できます。サイトの視認性向上やユーザー体験の改善につながるため、テーマ制作やWebアプリケーション構築で有効な手法です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


Java Scriptの読み込み設計(deferとDOMContentLoadedの使い分け)
外部サイトからトップページにアクセスされたときに処理を実行する方法

L o a d i n g . . .