Skip to main content

SITIST - сборник статей про веб разработку

Переключение тем на сайте

Разберем как сделать простенький переключатель темы со светлой на темную и обратно. Он состоит из трех деталей: двух скриптов и стилей.

Для тех, кому сразу хочется посмотреть как это функционирует, вот рабочий пример

Первый скрипт совсем коротенький и его хорошо бы размещать в секции head:

  
<script>
  const theme = localStorage.getItem('color-theme') === 'dark' ? 'dark' : 'light';
  document.documentElement.setAttribute('data-color-theme', theme);
</script>
  

Так он будет выглядеть, если темы две. Если вам захочется сделать больше тем, то нужно будет переписать условие.

На следующем этапе напишем основной скрипт:


document.querySelectorAll('.theme-toggle').forEach(item => {
  item.addEventListener('click', () => {
    const theme = document.documentElement.getAttribute('data-color-theme') === 'dark' ? 'light' : 'dark';
    document.documentElement.setAttribute('data-color-theme', theme);
    localStorage.setItem('color-theme', theme);
  });
});
  

В этом скрипте для html добавляется атрибут со значением выбранной темы: data-color-theme="dark". Если по какой-то причине вам не нравится работать с data-атрибутами, вы можете изменить на класс и внести соответствующие коррективы в селекторы. Осталось сделать стили. В этом лучше всего помогут кастомные свойства.


:root {
  --color-body-bg: white;
  --color-text: #333;
}

[data-color-theme="dark"] {
  --color-body-bg: #333;
  --color-text: #FFFFE0;
}

body {
  background: var(--color-body-bg);
  color: var(--color-text);
}
Вверх