У меня есть сайт с двумя кнопками, которые я использую для переключения между темной темой [по умолчанию] и светлой. Я делаю это с помощью директивы :root
и переменных CSS, например:
HTML:
<body>
<div>
Here is some text
</div>
<br/>
<button type="button" onclick="lightToggle()">Light Theme</button>
<button type="button" onclick="darkToggle()">Dark Theme</button>
</body>
CSS:
:root {
--bg-color-1: #011627;
}
.light {
--bg-color-1: #fbfbfb;
}
body {
background-color: var(--bg-color-1);
}
JS:
function lightToggle() {
var element = document.body;
element.classList.add("light");
}
function darkToggle() {
var element = document.body;
element.classList.remove("light");
}
Это хорошо работает для отдельных страниц. Теперь я хотел бы, чтобы тема сохранялась при переходе на другую веб-страницу в том же домене. Я не хочу использовать файлы cookie и не хочу хранить постоянные данные на стороне клиента, поэтому решил, что sessionStorage
наиболее подходит для этого. Я добавил setItem
в свои HTML и JS, но мне трудно переключить класс light
, используя это значение sessionStorage
(и я даже не уверен, что это лучшая практика при использовании webStorage?) . Вот откуда я начинаю:
HTML:
<script>
sessionStorage.setItem("theme", "dark");
</script>
<body>
<div>
Here is some text
</div>
<br />
<button type="button" onclick="lightToggle()">Light Theme</button>
<button type="button" onclick="darkToggle()">Dark Theme</button>
</body>
CSS (без изменений):
:root {
--bg-color-1: #011627;
}
.light {
--bg-color-1: #fbfbfb;
}
body {
background-color: var(--bg-color-1);
}
JS:
function lightToggle() {
var element = document.body;
element.classList.add("light");
sessionStorage.setItem("theme", "light");
}
function darkToggle() {
var element = document.body;
element.classList.remove("light");
sessionStorage.setItem("theme", "dark");
}
Как лучше всего использовать веб-хранилище, чтобы применить class
к HTML body
?