TailwindCSSで、カラーテーマ(ダークモード)をクリック時に切り替える方法

以下の手順を踏む。

1."tailwind.config.js"に特定の記述を行う。
2.HTMLファイルで、ダークモード時に適用したいクラス名の先頭にに"dark:"と記述する。
3.アイコン用のSVG画像を用意して、buttonタグ内に設置する。
4.クリック時のカラーテーマ切り替え処理を、別ファイルに記述する。


順を追って以下に記述を行う。

1."tailwind.config.js"への記述

  darkMode: "class"

2.HTMLファイル内のクラス名への記述

例:
<div class="bg-white dark:bg-black">

3.アイコン用の画像用意及び設置

例:
  <button
    id="theme-toggle"
    class="flex h-10 w-10 items-center justify-center rounded-full dark:bg-background"
  >
    <!-- light icon -->
    <svg
      id="lightButton"
      xmlns="http://www.w3.org/2000/svg"
      fill="none"
      viewBox="0 0 24 24"
      stroke-width="1.5"
      stroke="currentColor"
      class="h-6 w-6"
    >
      <path
        stroke-linecap="round"
        stroke-linejoin="round"
        d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"
      />
    </svg>
    <!-- dark icon -->
    <svg
      id="darkButton"
      xmlns="http://www.w3.org/2000/svg"
      fill="none"
      viewBox="0 0 24 24"
      stroke-width="1.5"
      stroke="currentColor"
      class="h-6 w-6"
    >
      <path
        stroke-linecap="round"
        stroke-linejoin="round"
        d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z"
      />
    </svg>
  </button>

4.カラーテーマ切替用の記述

("darkmode.js"に記述すると仮定する)

例:
function setTheme(themeName) {
  localStorage.setItem("theme", themeName);
  document.documentElement.className = themeName;
}

// アイコンクリック時、テーマに応じて切り替える
function toggleTheme() {
  if (localStorage.getItem("theme") === "dark") {
    setTheme("light");
    document.getElementById("darkButton").setAttribute("hidden", true);
    document.getElementById("lightButton").removeAttribute("hidden");
  } else {
    setTheme("dark");
    document.getElementById("lightButton").setAttribute("hidden", true);
    document.getElementById("darkButton").removeAttribute("hidden");
  }
}

// 初期表示時、ローカルストレージに保存されているテーマに応じて、アイコンの表示を切り替える
(function () {
  if (
    localStorage.getItem("theme") === "dark" ||
    (!("theme" in localStorage) &&
      window.matchMedia("(prefers-color-scheme: dark)").matches)
  ) {
    setTheme("dark");
    document.getElementById("lightButton").setAttribute("hidden", true);
    document.getElementById("darkButton").removeAttribute("hidden");
  } else {
    setTheme("light");
    document.getElementById("darkButton").setAttribute("hidden", true);
    document.getElementById("lightButton").removeAttribute("hidden");
  }
})();

document.getElementById("theme-toggle").addEventListener("click", toggleTheme);

上記の手順を踏めば、アイコンをクリックする度に、アイコン自身と"dark:"を設定した箇所の色が変更される。

この記事が気に入ったらサポートをしてみませんか?