DEV Community

Cover image for Build a Dark Mode Toggle in Vite + React
Akhilesh
Akhilesh

Posted on

Build a Dark Mode Toggle in Vite + React

Dark Mode isn’t just a “cool feature” anymore — it’s a user expectation.
Let’s learn how to build a sleek Dark Mode Toggle for your website in just a few minutes using Vite + React + TailwindCSS 🚀

Step 1:Setup Your Project

# Create Vite project
npm create vite@latest dark-mode-toggle
cd dark-mode-toggle
npm install

# Add TailwindCSS
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

Enter fullscreen mode Exit fullscreen mode

Enable dark mode in tailwind.config.cjs:

export default {
  darkMode: 'class',
  content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
  theme: { extend: {} },
  plugins: [],
}

Enter fullscreen mode Exit fullscreen mode

Step 2: Create the Toggle Logic

Inside App.jsx:

import { useState, useEffect } from "react";

function App() {
  const [darkMode, setDarkMode] = useState(
    localStorage.getItem("theme") === "dark"
  );

  useEffect(() => {
    if (darkMode) {
      document.documentElement.classList.add("dark");
      localStorage.setItem("theme", "dark");
    } else {
      document.documentElement.classList.remove("dark");
      localStorage.setItem("theme", "light");
    }
  }, [darkMode]);

  return (
    <div className="min-h-screen flex items-center justify-center bg-white dark:bg-gray-900 text-gray-900 dark:text-white transition-colors duration-500">
      <div className="text-center">
        <h1 className="text-3xl font-bold mb-6">Dark Mode Toggle 🌗</h1>
        <button
          onClick={() => setDarkMode(!darkMode)}
          className="px-6 py-2 rounded-2xl bg-gray-200 dark:bg-gray-700 hover:scale-105 transition-transform"
        >
          {darkMode ? "☀ Light Mode" : "🌙 Dark Mode"}
        </button>
      </div>
    </div>
  );
}

export default App;

Enter fullscreen mode Exit fullscreen mode

Step 3: Test It Out

Run your app:

npm run dev

Enter fullscreen mode Exit fullscreen mode

What You Achieved

✔ Fully working Dark/Light theme switch
✔ Theme preference saved in localStorage
✔ Smooth transition with Tailwind’s utility classes

🔥 That’s it! You’ve just built a modern Dark Mode Toggle for your React website.
Now your project looks sleek in both 🌞 Light and 🌙 Dark.

👉 Save this post for later & share it with a friend who loves Dark Mode!

Top comments (0)