カテゴリ: Bootstrap 更新日: 2025/11/30

CSS変数でテーマ切替を完全ガイド!Bootstrapでライトとダークを一瞬でスイッチする実装

CSS変数でテーマ切替:ライト/ダークを一瞬でスイッチする実装
CSS変数でテーマ切替:ライト/ダークを一瞬でスイッチする実装

先生と生徒の会話形式で理解しよう

生徒

「Bootstrapでライトモードとダークモードを切り替える方法ってあるんですか?」

先生

「はい、CSS変数を使えば、ボタンを押すだけでテーマを切り替えることができます。」

生徒

「CSS変数ってなんですか?難しい設定が必要ですか?」

先生

「CSS変数は、色やサイズを名前で登録しておいて、どこからでも同じ値を使える便利な仕組みです。初心者でも簡単にテーマ切替を実現できますよ。」

1. CSS変数とは?初心者向けに解説

1. CSS変数とは?初心者向けに解説
1. CSS変数とは?初心者向けに解説

CSS変数とは、スタイルシートで繰り返し使う色やサイズを「変数」という形で保存しておける機能です。変数を設定しておくと、デザインを変更したいときに変数の値を変えるだけで、サイト全体のデザインを一括で変更できます。例えば、背景色を指定するときに直接「白」と書くのではなく、変数--bs-body-bgを使って「白」と登録しておけば、後から一か所書き換えるだけで済みます。

2. ライトモードとダークモードの基本設計

2. ライトモードとダークモードの基本設計
2. ライトモードとダークモードの基本設計

Bootstrapでは、標準でライトモード(白背景・黒文字)が使われます。ここにCSS変数を活用して、ダークモード(黒背景・白文字)も同時に定義することで、ユーザーの好みに応じて切り替えられるようにできます。重要なのは、「ライト」と「ダーク」の両方を同じCSSファイルに書いておくことです。切り替えはdata-themeという属性を使って実現します。

3. 実際のテーマ切替のCSSコード例

3. 実際のテーマ切替のCSSコード例
3. 実際のテーマ切替のCSSコード例

以下のコードでは、:root(ルート要素)にライトモードの色を定義し、[data-theme="dark"]の中でダークモード用の色を上書きしています。


<style>
:root {
    --bs-body-bg: #ffffff;  /* ライト背景 */
    --bs-body-color: #000000; /* ライト文字色 */
}

[data-theme="dark"] {
    --bs-body-bg: #121212;  /* ダーク背景 */
    --bs-body-color: #ffffff; /* ダーク文字色 */
}
</style>

<div id="themeArea" data-theme="dark" class="p-3" style="background-color: var(--bs-body-bg); color: var(--bs-body-color);">
    テーマ切替のテストコンテンツ
</div>
ブラウザ表示

この時点で、data-theme属性を切り替えれば、背景色と文字色が瞬時に入れ替わります。

4. ボタンでライト/ダークを切り替える方法

4. ボタンでライト/ダークを切り替える方法
4. ボタンでライト/ダークを切り替える方法

実際のサイトでは、ユーザーがクリックしてテーマを切り替える仕組みを作ることが多いです。JavaScriptをほんの少し書くだけで、data-themeを切り替えることができます。


<style>
:root {
    --bs-body-bg: #ffffff;
    --bs-body-color: #000000;
}
[data-theme="dark"] {
    --bs-body-bg: #121212;
    --bs-body-color: #ffffff;
}
</style>

<div id="themeArea" class="p-3" style="background-color: var(--bs-body-bg); color: var(--bs-body-color);">
    ボタンでテーマを切り替えてみましょう
</div>

<button id="switchBtn" class="btn btn-primary mt-3">テーマ切替</button>

<script>
const btn = document.getElementById("switchBtn");
const area = document.getElementById("themeArea");
btn.addEventListener("click", () => {
  if (area.getAttribute("data-theme") === "dark") {
    area.removeAttribute("data-theme");
  } else {
    area.setAttribute("data-theme", "dark");
  }
});
</script>
ブラウザ表示

このように、ボタンを押すたびにライトモードとダークモードが切り替わります。

5. Bootstrapのボタンやテキストもテーマ対応させる

5. Bootstrapのボタンやテキストもテーマ対応させる
5. Bootstrapのボタンやテキストもテーマ対応させる

単純に背景と文字色だけを切り替えるだけでなく、Bootstrapのボタンや見出しにもテーマカラーを反映できます。例えば、プライマリーボタンをライトモードではオレンジ、ダークモードでは少し淡いオレンジに切り替えるように設定することも可能です。


<style>
:root {
    --bs-body-bg: #ffffff;
    --bs-body-color: #000000;
}

[data-theme="dark"] {
    --bs-body-bg: #121212;
    --bs-body-color: #ffffff;
}

/* ボタンの色を直接指定 */
.btn-primary {
    --bs-btn-bg: #ff6600;
    --bs-btn-border-color: #ff6600;
}
[data-theme="dark"] .btn-primary {
    --bs-btn-bg: #ffaa66;
    --bs-btn-border-color: #ffaa66;
}
</style>

<div id="themeArea" class="p-3" style="background-color: var(--bs-body-bg); color: var(--bs-body-color);">
    <button class="btn btn-primary">テーマ対応ボタン</button>
</div>
ブラウザ表示

これで、背景や文字色だけでなく、ボタンの見た目もテーマに合わせて変化させられます。

6. 実運用で気を付けたいポイント

6. 実運用で気を付けたいポイント
6. 実運用で気を付けたいポイント

実際に運用する場合、以下の点に注意するとスムーズにテーマを導入できます。

  • CSS変数を使うと色を一括管理できるので、後から配色を変更するときも楽になります。
  • ライト/ダークでコントラスト(明暗の差)を意識することが大切です。見やすさが失われないように配慮しましょう。
  • テーマ切替の状態をユーザーごとに保存したい場合は、JavaScriptでローカルストレージに記録する方法もあります。

7. まとめの前の補足

7. まとめの前の補足
7. まとめの前の補足

CSS変数とBootstrapを組み合わせれば、難しいSassや特別なビルド環境を使わなくても簡単にテーマ切替を実現できます。初心者でも、数行のCSSとJavaScriptを書くだけで、今流行りのダークモード対応サイトを作ることができます。

カテゴリの一覧へ
新着記事
New1
CSS
CSSの子要素セレクタを完全ガイド!初心者でもわかる:first-child・:last-child・:nth-child()
New2
CSS
CSSの擬似要素::beforeと::afterを徹底解説!初心者でも使える具体例つき
New3
Bootstrap
Bootstrapのアクセシビリティ完全ガイド!初心者でもわかるvisually-hiddenの使い方
New4
CSS
CSSで見出しと本文をきれいに分ける方法!初心者でもわかるスタイルの使い方
人気記事
No.1
Java&Spring記事人気No1
CSS
CSSの文字色と背景色の組み合わせで読みやすさアップ!初心者でもわかる可読性の改善方法
No.2
Java&Spring記事人気No2
CSS
CSSのスクロール可能なボックスを作る方法!初心者でもわかるoverflowとheightの使い方
No.3
Java&Spring記事人気No3
CSS
CSSの複数セレクタ指定を完全解説!初心者でもわかるカンマ区切りの使い方
No.4
Java&Spring記事人気No4
CSS
CSSで要素のサイズを自動調整!autoとfit-contentの使い方
No.5
Java&Spring記事人気No5
Bootstrap
Bootstrap 5 のフォームの基本:入力・バリデーション・エラーメッセージ設計
No.6
Java&Spring記事人気No6
CSS
CSSセレクタとは?初心者でもわかる要素の指定方法をやさしく解説
No.7
Java&Spring記事人気No7
Bootstrap
Bootstrap 5のモーダルとオフキャンバスを完全ガイド!初心者がつまずくポイントも解説
No.8
Java&Spring記事人気No8
CSS
CSSの文字色と背景色をやさしく解説!初心者でもわかる基本の設定方法