Dark Mode: Theme Them All
Dark mode is so in right now that even websites are joining in on the fun. Let's look at how we could leverage the new CSS media query.
10th Dec. 2019
A lot of the mobile and desktop operating systems now support dark mode natively and the browser vendors have started to implement the prefers-color-scheme
media query.
As of this writing, this feature is tagged as experimental and could possibly change in the future. However, that does not mean we could not play with it!
prefers-color-scheme
Media Query
There are three possible values you could use with the prefers-color-scheme
media query.
-
no-preference
Indicates that the user has made no preference known to the system.
-
light
Indicates that user has expressed the preference for a page that has a light theme (dark text on light background).
-
dark
Indicates that user has expressed the preference for a page that has a dark theme (light text on dark background).
You can read more about the draft here.
Show Me The Code!
Take the extremely simple example SCSS below:
// dark-theme.scss
$dark-bg: #2f3640;
@media (prefers-color-scheme: ‘dark’) {
body {
background-color: $dark-bg;
}
}
// styles.scss
$light-bg: #f5f6fa;
body {
background-color: $light-bg;
}
@import ’./dark-theme.scss’;
By default and when our media query returns false
, our website’s background colour will be set to #f5f6fa
. This means we will be covered for when the user’s preferred colour scheme is light
or no-preference
.
The example above should automatically react to the prefers-color-scheme
changes.
As you can see from the video, the theme changes when we switch between the light and dark theme :party_popper:.