Skip to content

How to detect dark mode using JavaScript

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's my latest YouTube video

→ Get my JavaScript Beginner's Handbook

→ I wrote 17 books to help you become a better developer, download them all at $0 cost by joining my newsletter

JOIN MY CODING BOOTCAMP, an amazing cohort course that will be a huge step up in your coding career - covering React, Next.js - next edition February 2025

Bootcamp 2025

Join the waiting list