JavaScript

Переключатель светлой и тёмной темы

Algonexys · 07.08.2026 · 👁 0

Сохранение выбора пользователя и учёт системной настройки 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');
});