diff --git a/sources/tech/20211029 A simple CSS trick for dark mode.md b/sources/tech/20211029 A simple CSS trick for dark mode.md new file mode 100644 index 0000000000..58b71ea16e --- /dev/null +++ b/sources/tech/20211029 A simple CSS trick for dark mode.md @@ -0,0 +1,116 @@ +[#]: subject: "A simple CSS trick for dark mode" +[#]: via: "https://opensource.com/article/21/10/dark-themes-websites" +[#]: author: "Ayush Sharma https://opensource.com/users/ayushsharma" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +A simple CSS trick for dark mode +====== +The ability to let your website adjust to the user's theme of choice is +a great accessibility feature. +![Text editor on a browser, in blue][1] + +You're likely already familiar with media queries. They're in widespread use for making websites responsive. The `width` and `height` properties contain the viewport's dimensions. You then use CSS to render different layouts at different dimensions. + +The [prefers-color-scheme media query][2] works the same way. The user can configure their operating system to use a light or dark theme. `Prefers-color-scheme` contains that value. The value is either `light` or `dark`, though the W3C spec states that it might support future values like `sepia`. I specify different values of CSS variables for both modes and let the user's OS decide. + +### The prefers-color-scheme media queries + +The two variations of the `prefers-color-scheme` media query are: + + +``` +/* Light mode */ +@media (prefers-color-scheme: light) { + :root { + --body-bg: #FFFFFF; + --body-color: #000000; + } +} + +/* Dark mode */ +@media (prefers-color-scheme: dark) { + :root { + --body-bg: #000000; + --body-color: #FFFFFF; + } +} +``` + +In the above CSS, `--body-bg` and `--body-color` are [CSS variables][3]. As you can see, they contain different values for both modes. In the light theme, I'm setting a white background with black text. In the dark theme, I'm setting black background with white text. + +Since the [spec][2] says that W3C might introduce future values, it makes sense to convert this CSS into a boolean. + + +``` +/* Light mode */ +:root { + --body-bg: #FFFFFF; + --body-color: #000000; +} + +/* Dark mode */ +@media (prefers-color-scheme: dark) { + :root { + --body-bg: #000000; + --body-color: #FFFFFF; + } +} +``` + +In the above code, I'm defining a light theme by default and converting it to the dark theme if the media query is `dark`. This way, any future values added to the media query will set the light theme by default. + +### Using the CSS variables + +Now that I have different values for different themes, I need to actually use them to style the page. + + +``` +body { + background: var(--body-bg); + color: var(--body-color); +} +``` + +The [var() syntax][3] is how CSS uses variables. In the above code, I'm saying set the `background` to the value of `--body-bg` and set the `color` to the value of `--body-color`. Note that the values of these variables are coming from the media query. Meaning that the background and foreground color changes based on the OS's setting! + +This is the real power of the media query: Providing a consistent user experience from OS to the web page. + +If you go to [findmymastodon.com][4] and switch your OS's theme, you'll see the transition from one theme to the other. + +The [CSS Working Group][2] website also uses the same media queries. Change your OS theme, and the website switches themes to adjust. + +### Conclusion + +Notice that using `prefers-color-scheme` is no different from using a regular programming language. I define variables whose values change based on some logic. And those variables are then used for further operations. + +The ability to let your website adjust to the user's theme of choice is a great accessibility feature. And it further blurs the line between desktop and web for the benefit of the user. The latest browser versions [support prefers-color-scheme][5], so you can begin experimenting today. + +Happy coding. + +* * * + +_This article originally appeared on the [author's website][6] and is republished with permission._ + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/dark-themes-websites + +作者:[Ayush Sharma][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ayushsharma +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_blue_text_editor_web.png?itok=lcf-m6N7 (Text editor on a browser, in blue) +[2]: https://drafts.csswg.org/mediaqueries-5/#prefers-color-scheme +[3]: https://www.w3.org/TR/css-variables-1/ +[4]: https://findmymastodon.com/ +[5]: https://caniuse.com/prefers-color-scheme +[6]: https://ayushsharma.in/2021/10/creating-light-and-dark-themes-for-websites-correctly-using-prefers-color-scheme