JavaScript
Переключатель светлой и тёмной темы
Сохранение выбора пользователя и учёт системной настройки prefers-color-scheme.
Код
const THEME_KEY = 'theme';
const root = document.documentElement;
function systemTheme() {
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
function applyTheme(theme) {
root.dataset.theme = theme;
root.style.colorScheme = theme;
localStorage.setItem(THEME_KEY, theme);
}
applyTheme(localStorage.getItem(THEME_KEY) || systemTheme());
document.querySelector('#theme-toggle')?.addEventListener('click', () => {
applyTheme(root.dataset.theme === 'dark' ? 'light' : 'dark');
});
// Следим за системной темой, пока пользователь не выбрал свою
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
if (!localStorage.getItem(THEME_KEY)) applyTheme(e.matches ? 'dark' : 'light');
});