はじめに
Bootstrap v5.3では、標準機能としてダークモードが実装されています。
以前のバージョンではCSSを自作して対応する必要がありましたが、v5.3以降では data-bs-theme を利用することで簡単にテーマを切り替えできます。
この記事では、ダークモード実装方法を紹介します。
目次
1. Bootstrap v5.3のダークモードについて
Bootstrap v5.3では、data-bs-theme の値によってテーマが切り替わります。
例えば以下のように設定すると、Bootstrap側で用意されている配色へ自動的に切り替わります。
<html data-bs-theme="dark">
Bootstrapのカードやフォーム、テーブルなどのコンポーネントは、Bootstrap側でテーマ対応されています。
そのため、独自CSSを大量に書かなくてもダークモードへ対応できます。
公式ドキュメントはこちら
https://getbootstrap.com/docs/5.3/customize/color-modes/
2. HTMLを作成する
今回はスイッチでダークモードの切り替えをできるように作成します。
<!doctype html> <!-- data-bs-themeでダークモード対応 --> <html lang="ja" data-bs-theme="light"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" </head> <body> <div class="container py-5"> <div class="d-flex align-items-center gap-2 mb-4"> <span>ダークモード</span> <div class="form-check form-switch m-0"> <input class="form-check-input" type="checkbox" id="themeSwitch" > </div> </div> <h1 class="mb-3">サンプルページ</h1> <p>ダークモード実装例です。</p> <div class="card"><h5 class="card-header">カードヘッダー</h5><div class="card-body"><h5 class="card-title">カードボディ1</h5> <p class="card-text">カードボディ2</p> <a href="#" class="btn btn-primary">ボタン</a></div> </div> </div> </body>
この時点ではまだテーマは切り替わりません。
次にJavaScriptを追加します。
3. JavaScriptでテーマを切り替える
次に、スイッチ切り替え時に data-bs-theme を変更します。
localStorageを利用してページを再読み込みしてもテーマ状態が保持されるようにしています。
また、window.matchMedia を利用することでユーザーのOS設定がダークモードなら初期表示もダークモードになるようにしています。
<script>
document.addEventListener("DOMContentLoaded", () => {
const html = document.documentElement;
const themeSwitch =
document.getElementById("themeSwitch");
const savedTheme = localStorage.getItem("theme") ||
( window.matchMedia(
"(prefers-color-scheme: dark)"
).matches ? "dark" : "light"
); setTheme(savedTheme);
themeSwitch.addEventListener("change", () => {
const nextTheme =
themeSwitch.checked ? "dark" : "light";
setTheme(nextTheme);
localStorage.setItem( "theme", nextTheme );
});
function setTheme(theme){
html.setAttribute( "data-bs-theme", theme );
themeSwitch.checked = theme === "dark";
}
});
</script>
これでダークモードをスイッチで切り替えられるようになりました。
実際の画面は以下
ダークモードOFF
ダークモードON
4. ダークモード対応時の注意点
Bootstrapの多くのコンポーネントが自動でダークモード対応されます。
ただし、固定色を指定するとテーマ切り替えに対応できなくなるため注意が必要です。
例えば以下は常に黒文字になります。
text-dark link-dark style="color:black"
また、独自CSSを書く場合も以下のようにBootstrap変数を利用すると、ダークモード対応しやすくなります。
color: var(--bs-body-color); background-color: var(--bs-body-bg);
5. おわりに
Bootstrap v5.3では、かなり簡単にダークモードを実装できるようになりました。
特にBootstrapコンポーネントを中心に構成している場合は、data-bs-theme を切り替えるだけで多くのUIが自動対応されます。