Dark mode helps reduce eye strain in low light. A toggle lets users switch between light and dark themes easily.
Dark mode toggle with JavaScript in Tailwind
<!-- HTML button --> <button id="darkModeToggle">Toggle Dark Mode</button> <!-- JavaScript --> <script> const toggle = document.getElementById('darkModeToggle'); toggle.addEventListener('click', () => { document.documentElement.classList.toggle('dark'); }); </script>
The dark class on html triggers Tailwind's dark styles.
Use document.documentElement to add the class to the root element.
<button id="darkModeToggle">Toggle Dark Mode</button> <script> const toggle = document.getElementById('darkModeToggle'); toggle.addEventListener('click', () => { document.documentElement.classList.toggle('dark'); }); </script>
<button id="darkModeToggle" aria-pressed="false" aria-label="Toggle dark mode">Toggle Dark Mode</button> <script> const toggle = document.getElementById('darkModeToggle'); toggle.addEventListener('click', () => { const isDark = document.documentElement.classList.toggle('dark'); toggle.setAttribute('aria-pressed', isDark.toString()); }); </script>
This page uses Tailwind CSS with a button to switch between light and dark modes. The background and text colors change smoothly. The button updates its ARIA state for accessibility.
<!DOCTYPE html> <html lang="en" class="transition-colors duration-500"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Dark Mode Toggle</title> <script> tailwind.config = { darkMode: 'class', } </script> <script src="https://cdn.tailwindcss.com"></script> </head> <body class="bg-white dark:bg-gray-900 text-gray-900 dark:text-gray-100 min-h-screen flex flex-col items-center justify-center"> <button id="darkModeToggle" aria-pressed="false" aria-label="Toggle dark mode" class="px-6 py-3 bg-gray-200 dark:bg-gray-700 rounded-md focus:outline-none focus:ring-4 focus:ring-blue-500"> Toggle Dark Mode </button> <p class="mt-6 text-lg"> This text changes color based on the theme. </p> <script> const toggle = document.getElementById('darkModeToggle'); toggle.addEventListener('click', () => { const isDark = document.documentElement.classList.toggle('dark'); toggle.setAttribute('aria-pressed', isDark.toString()); }); </script> </body> </html>
Tailwind CSS must be configured to use class strategy for dark mode.
Adding smooth transitions improves user experience.
Always update ARIA attributes for accessibility when toggling states.
Dark mode toggle switches the dark class on the root html element.
Tailwind CSS uses this class to apply dark styles automatically.
Use JavaScript event listeners to handle user clicks on the toggle button.
Practice
dark class to the html element do in Tailwind CSS?Solution
Step 1: Understand Tailwind dark mode mechanism
Tailwind applies dark mode styles when thedarkclass is present on thehtmlelement.Step 2: Effect of the
Addingdarkclassdarktriggers alternate color schemes and styles designed for dark backgrounds.Final Answer:
It enables dark mode styles throughout the website. -> Option BQuick Check:
dark class = enables dark mode [OK]
- Thinking dark class disables styles
- Confusing dark class with font size changes
- Assuming dark class hides images
html element when a button is clicked?Solution
Step 1: Identify the root element for dark mode
Dark mode toggles thedarkclass on thehtmlelement, accessible asdocument.documentElement.Step 2: Use correct method to toggle class
TheclassList.toggle('dark')method adds or removes the class on each click.Final Answer:
document.documentElement.classList.toggle('dark'); -> Option AQuick Check:
Toggle dark class on html element = document.documentElement.classList.toggle('dark'); [OK]
- Using document.body instead of document.documentElement
- Using add or remove instead of toggle
- Trying to set style.dark property which doesn't exist
<html class="dark">
<body class="bg-white dark:bg-gray-900">
<button id="toggle">Toggle Dark Mode</button>
</body>
</html>
<script>
document.getElementById('toggle').addEventListener('click', () => {
document.documentElement.classList.toggle('dark');
});
</script>Solution
Step 1: Initial state has
The page starts withdarkclass onhtmldarkclass, so background is gray (#1a202c) fromdark:bg-gray-900.Step 2: Clicking toggle removes
Toggle removesdarkclassdarkclass, sobg-whiteapplies, making background white.Final Answer:
White background -> Option DQuick Check:
Toggle removes dark class, background = white [OK]
- Assuming background stays gray after toggle
- Confusing initial class presence
- Ignoring that toggle removes dark class
const btn = document.getElementById('toggle');
btn.onclick = function() {
document.querySelector('html').classList.add('dark');
document.querySelector('html').classList.remove('dark');
};Solution
Step 1: Analyze the toggle logic
The code adds then immediately removes thedarkclass on the same element in one function call.Step 2: Effect on the page
Because add and remove happen instantly, the class never stays applied, so no dark mode effect is visible.Final Answer:
It adds and removes 'dark' class immediately, so no visible change. -> Option CQuick Check:
Immediate add and remove cancels out [OK]
- Thinking 'onclick' is invalid
- Using wrong selector for dark mode
- Confusing class name with 'dark-mode'
1. On toggle, add/remove 'dark' class on <html>. 2. Save preference in localStorage. 3. On page load, read preference and set 'dark' class accordingly. Which code snippet correctly sets dark mode on page load?
Solution
Step 1: Retrieve saved theme from localStorage
UselocalStorage.getItem('theme')to get saved preference.Step 2: Apply or remove 'dark' class based on preference
If preference is 'dark', adddarkclass tohtml, else remove it.Final Answer:
if(localStorage.getItem('theme') === 'dark') { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } -> Option AQuick Check:
Check saved theme and add/remove class accordingly [OK]
- Using toggle with localStorage value directly
- Saving boolean instead of string in localStorage
- Adding class to body instead of html
Ready to prove it?
Pass the test and this pattern moves unknown
