HTML、CSS、JavaScriptのみでダークモードを実装する方法も紹介します。ReactやNext.jsを使わずに、シンプルなHTML、CSS、そして少しのJavaScriptでダークモードを切り替える方法を説明します。
See the Pen Dark Mode Toggle by techcode sample (@techcode-sample) on CodePen.
1. HTML構造
まず、基本的なHTML構造を用意します。シンプルなページと、ダークモードを切り替えるボタンを用意します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dark Mode Toggle</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<button id="theme-toggle">Dark Mode</button>
<h1>Hello, World!</h1>
<p>This is a simple dark mode implementation.</p>
<script src="script.js"></script>
</body>
</html>
2. CSSスタイル
次に、CSSでライトモードとダークモードのスタイルを定義します。
/* styles.css */
:root {
--background-color: #ffffff;
--text-color: #000000;
}
body {
background-color: var(--background-color);
color: var(--text-color);
transition: background-color 0.3s, color 0.3s;
}
.dark-mode {
--background-color: #000000;
--text-color: #ffffff;
}
button {
padding: 10px 20px;
margin: 20px;
cursor: pointer;
border: none;
background-color: #007BFF;
color: white;
font-size: 16px;
}
解説:
:root
にCSS変数を定義し、これにより、モードに応じた背景色とテキスト色を管理します。body
要素では、background-color
とcolor
をCSS変数に設定し、スムーズなトランジションを実現します。.dark-mode
クラスをbody
に追加することで、ダークモードのスタイルが適用されます。
3. JavaScriptのロジック
次に、JavaScriptを使ってダークモードとライトモードを切り替えるロジックを実装します。
// script.js
const toggleButton = document.getElementById('theme-toggle');
const body = document.body;
toggleButton.addEventListener('click', () => {
body.classList.toggle('dark-mode');
// ボタンのテキストを切り替える
if (body.classList.contains('dark-mode')) {
toggleButton.textContent = 'Light Mode';
} else {
toggleButton.textContent = 'Dark Mode';
}
// ユーザーの選択をlocalStorageに保存
localStorage.setItem('theme', body.classList.contains('dark-mode') ? 'dark' : 'light');
});
// ページ読み込み時に、ユーザーのテーマ選択を適用
window.addEventListener('DOMContentLoaded', () => {
const savedTheme = localStorage.getItem('theme');
if (savedTheme === 'dark') {
body.classList.add('dark-mode');
toggleButton.textContent = 'Light Mode';
}
});
解説:
toggleButton
で、ボタンのクリックイベントをリスンし、body
にdark-mode
クラスをトグルで追加・削除します。- ユーザーがクリックするたびに、ボタンのテキストも “Dark Mode” と “Light Mode” の間で切り替えます。
- ユーザーのテーマ選択を
localStorage
に保存することで、ページを再読み込みしても選択が保持されます。 DOMContentLoaded
イベントで、ページが読み込まれたときに保存されたテーマを適用します。
4. 動作確認
このセットアップで、ボタンをクリックするたびにダークモードとライトモードが切り替わるシンプルなダークモード切り替え機能が完成します。
まとめ
この実装は、シンプルでありながら柔軟性があり、どのウェブページにも簡単に統合できます。JavaScriptを使ったクライアントサイドでの状態管理と、localStorage
による状態の永続化を組み合わせることで、より洗練されたユーザーエクスペリエンスを提供できます。