Building a Dark Mode Toggle with TailwindCSS and Next.js
2025-06-08
TailwindCSSNext.jsDark Mode
Dark Mode Toggle in Next.js
Adding a theme switcher is a great way to improve UX. Here's how I implemented it in a recent project.
⚙️ Requirements
- TailwindCSS (with dark mode class strategy)
- Next.js (App Router)
useEffect
to persist theme in localStorage
🧩 Step-by-step
- Update
tailwind.config.js
jsmodule.exports = { darkMode: 'class', // ... }
- Add toggle logic in a component
tsx'use client'; import { useEffect, useState } from "react"; export function ThemeToggle() { const [theme, setTheme] = useState("light"); useEffect(() => { document.documentElement.classList.toggle("dark", theme === "dark"); localStorage.setItem("theme", theme); }, [theme]); return ( <button onClick={() => setTheme(t => t === "dark" ? "light" : "dark")}> Toggle {theme === "dark" ? "Light" : "Dark"} Mode </button> ); }
- Add
class="dark"
to<html>
via layout.tsx
🎨 Tailwind Dark Utilities
With dark mode enabled, you can now do:
html<div class="bg-white dark:bg-zinc-900 text-black dark:text-white"> This supports dark mode! </div>
🚀 Final Result
Your site now respects user preferences, saves the theme locally, and gives a polished feel.
Happy theming!