Dark mode helps reduce eye strain in low light. Using a class to switch modes lets you control when dark mode is on.
You want users to toggle between light and dark mode manually.
You want to apply dark mode only to parts of your website.
You want to avoid relying on the user's system settings for dark mode.
You want to test dark mode easily during development.
You want consistent dark mode styling across your site.
Syntax
Tailwind
<!-- Add 'dark' class to a parent element -->
<div class="dark">
<p class="bg-white dark:bg-gray-800 text-black dark:text-white">Hello, dark mode!</p>
</div>
The dark class on a parent triggers dark styles inside it.
Use dark: prefix in Tailwind to style elements for dark mode.
Examples
The button background and text color change when the dark class is present on the parent.
If no dark class is present, dark styles won't apply.
Tailwind
<div>
<p class="bg-white dark:bg-gray-800">Light background by default, dark background if parent has <code>dark</code> class.</p>
</div>
Sample Program
This example uses Tailwind's class-based dark mode. Clicking the button toggles the dark class on the html element. The box background and text colors change accordingly.
Make sure to set darkMode: 'class' in your Tailwind config to use this strategy.
Toggle the dark class on a parent element like html or body to switch modes.
Use semantic HTML and ensure good color contrast for accessibility in both modes.
Summary
Class-based dark mode uses a dark class on a parent to control dark styles.
Tailwind's dark: prefix applies styles only when the dark class is present.
This method lets users toggle dark mode manually and gives you full control over styling.
Practice
(1/5)
1. What does the dark: prefix in Tailwind CSS do when using class-based dark mode?
easy
A. Applies styles only when a parent element has the dark class.
B. Automatically detects system dark mode and applies styles.
C. Adds a dark background color to all elements.
D. Disables all light mode styles on the page.
Solution
Step 1: Understand the dark: prefix role
The dark: prefix in Tailwind applies styles only when the dark class is present on a parent element.
Step 2: Compare with other options
It does not auto-detect system settings or disable light styles; it depends on the dark class presence.
Final Answer:
Applies styles only when a parent element has the dark class. -> Option A
Quick Check:
dark: prefix = styles with dark class [OK]
Hint: Remember: dark: works only if dark class exists [OK]
Common Mistakes:
Thinking dark: auto-detects system dark mode
Assuming it changes styles without the dark class
Confusing dark: with global dark mode toggle
2. Which of the following is the correct way to enable dark mode using class strategy in Tailwind CSS?
easy
A. "darkMode: 'media'" in tailwind.config.js
B. "darkMode: 'class'" in tailwind.config.js
C. Adding dark attribute to body tag
D. Using dark-mode class instead of dark
Solution
Step 1: Check Tailwind config for dark mode strategy
To use class-based dark mode, you must set darkMode: 'class' in tailwind.config.js.
Step 2: Eliminate other options
darkMode: 'media' uses system preference, not class. The dark class must be added manually; no dark attribute exists. The class name must be exactly dark.
Final Answer:
"darkMode: 'class'" in tailwind.config.js -> Option B
Quick Check:
Config setting for class strategy = 'class' [OK]
Hint: Set darkMode to 'class' in config for class-based dark mode [OK]
What background and text colors will the <div> have when rendered?
medium
A. Background white, text black
B. Background gray-800, text black
C. Background gray-800, text white
D. Background white, text white
Solution
Step 1: Identify presence of dark class
The <html> tag has the dark class, so all dark: styles apply.
Step 2: Apply styles based on class
The div has bg-white and text-black normally, but with dark:bg-gray-800 and dark:text-white when dark class is present. So background is gray-800 and text is white.
Final Answer:
Background gray-800, text white -> Option C
Quick Check:
Dark class present = dark styles apply [OK]
Hint: If dark class exists, dark: styles override [OK]
Common Mistakes:
Ignoring the dark class on html
Mixing normal and dark styles incorrectly
Assuming no style changes without JavaScript
4. You want to toggle dark mode by adding/removing the dark class on body. Which of these JavaScript snippets correctly toggles dark mode?
medium
A. document.body.setAttribute('dark', true)
B. document.body.toggleClass('dark')
C. document.body.className = 'dark'
D. document.body.classList.toggle('dark')
Solution
Step 1: Understand class toggling in JavaScript
The correct method to toggle a class is classList.toggle('className').
Step 2: Check each option
document.body.classList.toggle('dark') uses classList.toggle('dark'), which is correct. document.body.toggleClass('dark') uses a non-existent toggleClass method. document.body.className = 'dark' overwrites all classes, removing others. document.body.setAttribute('dark', true) sets an attribute, not a class.
Final Answer:
document.body.classList.toggle('dark') -> Option D
Quick Check:
Toggle class method = classList.toggle [OK]
Hint: Use classList.toggle('dark') to switch dark mode on/off [OK]
Common Mistakes:
Using jQuery method toggleClass in plain JS
Replacing className instead of toggling
Setting attribute instead of class
5. You want to create a button that toggles dark mode by adding/removing the dark class on the html element. Which React code snippet correctly implements this using Tailwind's class-based dark mode?
Step 1: Identify correct element and method for toggling
Tailwind's class-based dark mode expects the dark class on the html element (document.documentElement). Toggling means adding or removing the class, so classList.toggle is best.
Step 2: Evaluate each option
const toggleDark = () => { document.documentElement.classList.toggle('dark'); };
return Toggle Dark; toggles dark on html correctly. const toggleDark = () => { document.body.classList.add('dark'); };
return Toggle Dark; only adds dark to body (no toggle). const toggleDark = () => { document.documentElement.setAttribute('dark', 'true'); };
return Toggle Dark; sets an attribute instead of class. const toggleDark = () => { document.body.className = 'dark'; };
return Toggle Dark; overwrites all classes on body, removing others.