feat: add auto theme mode
This commit is contained in:
parent
ab2d732ec5
commit
50640d0590
6 changed files with 39 additions and 15 deletions
|
@ -28,6 +28,23 @@ theme-toggle {
|
|||
stroke: var(--moon);
|
||||
}
|
||||
|
||||
& > .auto svg {
|
||||
& path:nth-of-type(3) {
|
||||
stroke: var(--moon);
|
||||
}
|
||||
|
||||
& path:nth-of-type(2),
|
||||
& path:nth-of-type(4),
|
||||
& path:nth-of-type(5),
|
||||
& path:nth-of-type(6) {
|
||||
stroke: var(--sun);
|
||||
}
|
||||
|
||||
& path:nth-of-type(7) {
|
||||
stroke: var(--twilight);
|
||||
}
|
||||
}
|
||||
|
||||
.light,
|
||||
.dark {
|
||||
display: none;
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
|
||||
--moon: #6a5acd;
|
||||
--sun: #ffa500;
|
||||
--twilight: #9e7485;
|
||||
|
||||
--article: light-dark(#007272, #00ffff);
|
||||
--about: light-dark(#e4513a, #ff967d);
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<script type="module" src="/assets/scripts/components/theme-toggle.js?v={% appVersion %}" crossorigin="anonymous"></script>
|
||||
<span class="client-side">
|
||||
<theme-toggle>
|
||||
<button aria-label="Light and dark theme toggle" class="theme-toggle">
|
||||
<theme-toggle mode="control">
|
||||
<button aria-label="Auto, light, dark theme control" class="theme-toggle">
|
||||
<span class="auto">
|
||||
{% tablericon "sun-moon" %}
|
||||
</span>
|
||||
<span class="light">
|
||||
{% tablericon "sun" %}
|
||||
</span>
|
||||
|
|
|
@ -49,12 +49,15 @@
|
|||
<body>
|
||||
<script>
|
||||
(() => {
|
||||
const currentTheme = sessionStorage.getItem('theme');
|
||||
const currentTheme = sessionStorage.getItem("theme") || "auto";
|
||||
const metaColorScheme = document.querySelector('meta[name="color-scheme"]');
|
||||
const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||
const themeToSet = currentTheme || (prefersDarkScheme ? 'dark' : 'light');
|
||||
if (!currentTheme) sessionStorage.setItem('theme', themeToSet);
|
||||
metaColorScheme.setAttribute('content', themeToSet);
|
||||
if (currentTheme === "auto") {
|
||||
metaColorScheme.setAttribute("content", "light dark");
|
||||
document.documentElement.style.colorScheme = "";
|
||||
} else {
|
||||
metaColorScheme.setAttribute("content", currentTheme);
|
||||
document.documentElement.style.colorScheme = currentTheme;
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<div class="main-wrapper">
|
||||
|
|
Reference in a new issue