HTML・CSS・JavaScriptでスマホ&PC対応のダークモードを自動手動切替 実装

スマホ&PC対応のダークモード

HTML・CSS・JavaScriptのみを使って、スマホとPCの両方に対応したダークモードの自動&手動切り替え機能を実装する方法を詳しく解説します。


ダークモードに対応するメリット

  • 夜間の閲覧がしやすく、目の負担を軽減?
  • デバイスのバッテリー消費を抑制?(OLEDディスプレイの場合)
  • ユーザーのOS設定に合わせたUIで満足度向上

方法1:CSSだけで実現する自動ダークモード

ユーザーのOSやブラウザの設定に応じて自動的に切り替えるには、以下のように prefers-color-scheme メディアクエリを使います。

/* 通常(ライトモード) */
body {
  background-color: white;
  color: black;
}

/* ダークモード */
@media (prefers-color-scheme: dark) {
  body {
    background-color: #121212;
    color: white;
}

方法2:JavaScriptとlocalStorageを使った手動切り替え

ユーザーがボタンを使って自分でライト/ダークを切り替えたい場合は、以下の3つのファイルを用意します。

1. HTMLコード

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>ダークモード切替</title>
  <link rel="stylesheet" href="style.css" />
</head>
<body>
  <button id="toggle-theme">テーマ切り替え</button>
  <h1>こんにちは、世界!</h1>
  <p>ライト/ダークテーマを自動&手動で切り替えできます。</p>
  <script src="script.js"></script>
</body>
</html>

2. CSSコード

:root {
  --bg-color: white;
  --text-color: black;
}

[data-theme="dark"] {
  --bg-color: #121212;
  --text-color: white;
}

body {
  background-color: var(--bg-color);
  color: var(--text-color);
  font-family: sans-serif;
  transition: background-color 0.3s, color 0.3s;
}

button {
  margin: 1rem;
  padding: 0.5rem 1rem;
  cursor: pointer;
}

3. JavaScriptコード

const toggleButton = document.getElementById('toggle-theme');
const userPrefKey = 'theme';

function applyTheme(theme) {
  document.documentElement.setAttribute('data-theme', theme);
}

function initTheme() {
  const savedTheme = localStorage.getItem(userPrefKey);
  if (savedTheme) {
    applyTheme(savedTheme);
  } else {
    const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
    applyTheme(systemPrefersDark ? 'dark' : 'light');
  }
}

toggleButton.addEventListener('click', () => {
  const current = document.documentElement.getAttribute('data-theme');
  const newTheme = current === 'dark' ? 'light' : 'dark';
  applyTheme(newTheme);
  localStorage.setItem(userPrefKey, newTheme);
});

initTheme();

スマホ&PC対応状況(2025年最新)

デバイス/ブラウザ対応状況
iOS Safari✅ 完全対応
Android Chrome✅ 完全対応
Windows Edge / Chrome✅ 完全対応
macOS Safari / Chrome✅ 完全対応

ユーザーフレンドリー&SEOにも有利なダークモード対応

今回紹介したように、HTML・CSS・JavaScriptだけで、OS設定連動+手動切替が可能なダークモード対応を簡単に実装できます。
ダークモードは単なる見た目だけでなく、ユーザー体験やサイト評価向上に貢献します。ぜひあなたのWebサイトにも導入してみてください。


MBTI診断 | あなたの性格タイプを分析

PNGをファビコン(favicon.ico)に変換

Googleサーチコンソールに反映されるための最低限のSEO構造とは

Googleサイト確認のTXTレコードをnslookupで確認する方法

PHPで複数ファイルを順番に削除する方法

linux / macOS grep サブディレクトリ テキストファイルの文字列を探す

macOS grep 画面

macOSやLinuxで複数あるテキストファイルの中の特定の文字列を検索する場合、ターミナルアプリのgrepコマンドを使えば簡単に検索が可能です。下のような2つのフォルダ内にそれぞれCSVファイルが入っています。CSVファイルはテキストファイルなのでgrepで検索できます。

複数フォルダにまたがったCSVファイル
複数フォルダにまたがったCSVファイル

grepコマンドで -rのオプションをつけて実行します。grep -r [検索したい文字] [パス]です。

grep -r ワイン ./

上記コマンドを実行すると下のようにフォルダ名含めた結果が表示されます。

grep コマンド実行結果
grep -r コマンド実行結果

より正確に(色付き・行番号などオプション付き)

下記の例は、ログファイル内からIPアドレスを検索しています。

grep -rn --color=auto "52.xx.xx.xxx" .

-n: 該当行の行番号を表示。

--color=auto: 一致部分を色付きで表示。

find と grepを使っても同じような結果が得られます。下記はfind grepコマンドです。

find ./ -type f | xargs grep ワイン  
find [フォルダ名] -type f | xargs grep [検索文字列]
find [フォルダ名] -type f | xargs grep [検索文字列]

拡張子などを限定したい場合(例:.log ファイルのみ)

下記の場合もLOGファイルからIPアドレス検索する例です

find . -type f -name "*.log" -exec grep -Hn --color=auto "52.xxx.xx.xxx" {} +

find.log ファイルだけを対象にし、grep に渡しています。


macOSの.weblocファイルとは?作り方・使い方!

MacのFileVaultとは?設定方法と企業向けセキュリティ対策をわかりやすく解説

macOS Sequoia 15.5 ユーザーアプリを配布と起動 セキュリティ設定

ユーザーアプリを起動させるセキュリティ設定方法

macOS Sequoia 15.5 上で ユーザーアプリを配布(ダウンロード)し起動する セキュリティ設定方法

ユーザーが作ったアプリをダウンロードした場合、macOSのデフォルトセキュリティ設定では起動しない場合があります。

目的のアプリが信頼できることが条件として下記の処理をすれば起動できます。

ユーザーアプリを起動後すぐに [システム設定] → [プライバシーとセキュリティ]を開く

下の方にスクロールしていくと [セキュリティ]項目に「お使いのMacを保護するために “xxxx”がブロックされました」と表示されます。

お使いのMacを保護するために "xxxx"がブロックされました

[このまま開く]ボタンがあるのでクリックするとアプリは起動します。

起動時に警告メッセージが出ます。

Appleは、このアプリに Macに損害を与えたり、プライバシーを侵害する可能性のあるマ
ルウェアが含まれていないことを検証できません。信頼できる提供元からのものであることが確認できない限り、このアプリを開いていないでください。
信頼できる提供元からのものであることが確認できない限り、このアプリを開いていないでください。

信頼できるダウンロードアプリということであれば「このまま開く」をクリックすると起動します。

さらに、Touch ID(指紋認証)を要求される場合があります

Macに損害を与えたり、プライバシーを侵害する可能性のあるアプリを開こうとしています
許可するには管理者のTouch IDを使用するか管理者のパスワードを入力してください。
Touch IDを使用するか管理者のパスワードを入力要求画面


macOSの.weblocファイルとは?作り方・使い方!

MacのFileVaultとは?設定方法と企業向けセキュリティ対策をわかりやすく解説

PDFファイル結合|パスワード設定ツール

簡単MBTI診断 | あなたの性格タイプを分析