Today I scratched my itch of implementing a dark mode toggle without JacaScript. The implementations I saw typically revolved about adding a 'dark' class to body via JS and then controlling it with JS handlers.<p>Thanks to `:has()` selector [0], that passed 90% browser compatibility [1], it is possible to avoid JS.<p>My implementation uses CSS variables combined with a checkbox, `:checked`, and `:has()`. It is simple, yet supports color scheme preference and updates toggle's label based on active mode.<p>[0]: <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:has" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/CSS/:has</a><p>[1]: <a href="https://caniuse.com/css-has" rel="nofollow">https://caniuse.com/css-has</a>
This is really cool and a great example of the upgrades to CSS. The benefit of JavaScript would be setting a state in localStorage to remember the light/dark value that was set, as yours does not remember what was set after a shift+f5 refresh of the site.
I'm sure it'll make it to Firefox for Android soon. I would imagine these "in page" toggles will fade away as the OS makes the switcher more prominent. In Gnome, it's right in the main menu next to the volume.