How to detect dark mode using JavaScript
New Courses Coming Soon
Join the waiting lists
Detecting dark mode, and detecting mode change using JavaScript
Using CSS we can detect dark mode using the prefers-color-scheme
media query.
But.. what if we have to use JavaScript? I recently stumbled on this problem, because I had some JavaScript code that added an image to the page, but I wanted to show a different image based on the light/dark mode.
Here’s how we can do it.
First, detect if the matchMedia
object exists (otherwise the browser does not support dark mode, and you can fall back to light mode).
Then, check if it’s dark mode using
window.matchMedia('(prefers-color-scheme: dark)').matches
This will return true
if dark mode is enabled.
Here’s a full example, where I invert the colors of an image if it’s dark mode:
const img = document.querySelector('#myimage')
if (window.matchMedia &&
window.matchMedia('(prefers-color-scheme: dark)').matches) {
img.style.filter="invert(100%)";
}
There is a problem though: what if the user changes mode while using our website?
We can detect the mode change using an event listener, like this:
window.matchMedia('(prefers-color-scheme: dark)')
.addEventListener('change', event => {
if (event.matches) {
//dark mode
} else {
//light mode
}
})
Here is how can I help you:
- COURSES where I teach everything I know
- CODING BOOTCAMP cohort course - next edition in 2025
- THE VALLEY OF CODE your web development manual
- BOOKS 17 coding ebooks you can download for free on JS Python C PHP and lots more
- Interesting links collection
- Follow me on X