Add theme toggle
This commit is contained in:
parent
44de54fd84
commit
fa420b1702
5 changed files with 65 additions and 20 deletions
18
assets/scripts/themeToggle.js
Normal file
18
assets/scripts/themeToggle.js
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
const toggleSwitch = document.querySelector('input[type="checkbox"].theme-switch');
|
||||||
|
|
||||||
|
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme:dark)').matches)) {
|
||||||
|
document.documentElement.classList.add('dark');
|
||||||
|
toggleSwitch.checked = true;
|
||||||
|
} else {
|
||||||
|
document.documentElement.classList.remove('dark')
|
||||||
|
}
|
||||||
|
function switchTheme(e) {
|
||||||
|
if (e.target.checked) {
|
||||||
|
localStorage.setItem('theme', 'dark');
|
||||||
|
document.documentElement.classList.add('dark');
|
||||||
|
} else {
|
||||||
|
localStorage.setItem('theme', 'light');
|
||||||
|
document.documentElement.classList.remove('dark')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
toggleSwitch.addEventListener('change', switchTheme, false);
|
|
@ -1,5 +1,6 @@
|
||||||
/** @type {import('tailwindcss').Config} */
|
/** @type {import('tailwindcss').Config} */
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
darkMode: 'selector',
|
||||||
content: ["./templates/**/*.html"],
|
content: ["./templates/**/*.html"],
|
||||||
theme: {
|
theme: {
|
||||||
extend: {
|
extend: {
|
||||||
|
|
|
@ -18,6 +18,14 @@
|
||||||
font-family: "JetBrains Mono", sans-serif, system-ui;
|
font-family: "JetBrains Mono", sans-serif, system-ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.theme-switch:checked {
|
||||||
|
@apply transition-transform transform translate-x-6 duration-300;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-switch:checked + .theme-switch-label {
|
||||||
|
@apply bg-turquoise;
|
||||||
|
}
|
||||||
|
|
||||||
h1,
|
h1,
|
||||||
h2,
|
h2,
|
||||||
h3 {
|
h3 {
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
<link rel="stylesheet" href="/assets/fa/all.min.css">
|
<link rel="stylesheet" href="/assets/fa/all.min.css">
|
||||||
<link rel="preload" href="/assets/index.css" as="style">
|
<link rel="preload" href="/assets/index.css" as="style">
|
||||||
<link rel="preload" href="/assets/fa/all.min.css" as="style">
|
<link rel="preload" href="/assets/fa/all.min.css" as="style">
|
||||||
|
|
||||||
|
<script async src="/assets/scripts/themeToggle.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="flex flex-col min-h-screen bg-base dark:bg-base-dark text-sm text-text dark:text-text-dark">
|
<body class="flex flex-col min-h-screen bg-base dark:bg-base-dark text-sm text-text dark:text-text-dark">
|
||||||
|
|
|
@ -13,28 +13,44 @@
|
||||||
<h2><a href="https://kc.viyurz.fr/" target="_blank">Account</a></h2>
|
<h2><a href="https://kc.viyurz.fr/" target="_blank">Account</a></h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="basis-1/6 flex flex-row justify-end items-center">
|
<div class="basis-1/6 flex flex-row justify-end items-center">
|
||||||
<div class="hidden relative inline-block opacity-10">
|
<div class="flex items-center z-30"></div>
|
||||||
<div>
|
<svg class="h-5 w-5 mr-2 text-surface" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
<button type="button"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
class="md:before:content-['Language'] inline-flex w-full justify-center gap-x-1.5 px-3 py-2"
|
d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z" />
|
||||||
id="menu-button" aria-expanded="true" aria-haspopup="true">
|
</svg>
|
||||||
<svg class="-mr-1 h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
<div class="relative inline-block w-10 select-none">
|
||||||
<path fill-rule="evenodd"
|
<input type="checkbox" name="toggleTheme" id="toggleTheme"
|
||||||
d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"
|
class="transition-transform transform translate-x-0 duration-300 theme-switch absolute block w-4 h-4 rounded-full bg-overlay appearance-none cursor-pointer mx-1 my-1">
|
||||||
clip-rule="evenodd" />
|
<label for="toggleTheme"
|
||||||
</svg>
|
class="theme-switch-label block overflow-hidden w-12 h-6 rounded-full bg-surface cursor-pointer"></label>
|
||||||
</button>
|
</div>
|
||||||
</div>
|
<svg class="h-5 w-5 ml-4 text-turquoise" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
<div class="hidden absolute right-0 z-10 mt-2 text-right origin-top-right rounded-lg border border-overlay dark:border-overlay-dark bg-surface dark:bg-surface-dark focus:outline-none"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
role="menu" aria-orientation="vertical" aria-labelledby="menu-button" tabindex="-1">
|
d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z" />
|
||||||
<div class="py-1" role="none">
|
</svg>
|
||||||
<a href="#" class="text-gray-700 block px-4 py-2 text-sm" role="menuitem" tabindex="-1"
|
</div>
|
||||||
id="menu-item-0">English</a>
|
<div class="hidden relative inline-block opacity-10">
|
||||||
<a href="#" class="text-gray-700 block px-4 py-2 text-sm" role="menuitem" tabindex="-1"
|
<div>
|
||||||
id="menu-item-1">Français</a>
|
<button type="button"
|
||||||
</div>
|
class="md:before:content-['Language'] inline-flex w-full justify-center gap-x-1.5 px-3 py-2"
|
||||||
|
id="menu-button" aria-expanded="true" aria-haspopup="true">
|
||||||
|
<svg class="-mr-1 h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
||||||
|
<path fill-rule="evenodd"
|
||||||
|
d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"
|
||||||
|
clip-rule="evenodd" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="hidden absolute right-0 z-10 mt-2 text-right origin-top-right rounded-lg border border-overlay dark:border-overlay-dark bg-surface dark:bg-surface-dark focus:outline-none"
|
||||||
|
role="menu" aria-orientation="vertical" aria-labelledby="menu-button" tabindex="-1">
|
||||||
|
<div class="py-1" role="none">
|
||||||
|
<a href="#" class="text-gray-700 block px-4 py-2 text-sm" role="menuitem" tabindex="-1"
|
||||||
|
id="menu-item-0">English</a>
|
||||||
|
<a href="#" class="text-gray-700 block px-4 py-2 text-sm" role="menuitem" tabindex="-1"
|
||||||
|
id="menu-item-1">Français</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
Loading…
Reference in a new issue