Adding a dark mode is basically adding a theme. The principles are the same for adding a light mode to a dark website or alternative styling based on user-defined variables, the time of year or holidays.
I added theming with a mix of and CSS. In this post I’ll go step by step into the details of how I did it and what I learned.
Setup
The themes are activated by CSS classes on the root element. When the page is loaded, I want to apply the theme that most likely suits the visitor (you!) best. After all, most people don’t like configuring websites before they can read a blog post, so the the whole theming feature would likely remain unused otherwise. So I have to make a guess about what the visitor wants and expects. I do that in this order:
- I assume people don’t want the theme to change when they navigate between pages. So if the page loaded isn’t the first page they visit, I want to use the theme that was used before.
- If it’s the first page they view on my site, their browser may be able to tell their preference.
- If no preference is available, we can base the choice based on whether it’s day or night.
Every time a page is loaded, in the current or a new tab, it checks if a theme was set previously. Because the preference for a light or dark theme can change during the day, with every change, I add a time stamp to the saved setting. Only when the state was saved less than two hours ago, it’s applied:
$('#myModal').on('show.bs.modal', function (e) {
if (!data) {
return e.preventDefault() // stops modal from being shown
}
})
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Eaque distinctio nemo tempora similique necessitatibus asperiores inventore ipsum, nostrum velit, quasi vitae natus numquam veritatis nobis, reiciendis deleniti facere molestias a.
Header 1
Header 2
Header 3
Header 4
Header 5
Header 6
Lorem ipsum dolor sit amet consectetur adipisicing elit. Animi velit perferendis labore vel, necessitatibus laboriosam fugit inventore ad odio tenetur vitae veritatis, earum numquam consectetur voluptatem illum, sequi asperiores commodi?
- list item 1
- list item 2
- list item 3
Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque in corrupti animi, natus, aut nisi consequatur reiciendis fugiat quam minima quod deserunt sint error pariatur perspiciatis! Dignissimos similique nam sunt!
- list item 1
- list item 2
- list item 3
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis dolorum quos nisi placeat rem odio consectetur magni impedit deserunt esse. Recusandae omnis deserunt a sunt ad animi laborum fuga cumque?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Fugiat sed voluptates totam rem tenetur minus magnam culpa, itaque sapiente fugit deleniti quasi veritatis? Ea officiis porro, fugiat eos reprehenderit deleniti!
Lorem ipsum dolor sit amet consectetur adipisicing elit. Fugiat sed voluptates totam rem tenetur minus magnam culpa, itaque sapiente fugit deleniti quasi veritatis? Ea officiis porro, fugiat eos reprehenderit deleniti!