Сейчас загружается

JavaScript переключение на светлую/темную тему для сайта

JavaScript переключение на светлую/темную тему для сайта

Вот простой пример реализации переключения светлой и темной темы на сайте с использованием JavaScript, HTML и CSS.

1. HTML

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>Темная/Светлая тема</title>
  <link rel="stylesheet" href="styles.css" />
</head>
<body>
  <header>
    <h1>Мой сайт</h1>
    <button id="theme-toggle">🌙 / ☀️</button>
  </header>

  <main>
    <p>Это пример текста на сайте.</p>
  </main>

  <script src="script.js"></script>
</body>
</html>

2. CSS (styles.css)

/* Светлая тема по умолчанию */
:root {
  --bg-color: #ffffff;
  --text-color: #000000;
  --button-bg: #f0f0f0;
}

/* Темная тема */
[data-theme="dark"] {
  --bg-color: #121212;
  --text-color: #ffffff;
  --button-bg: #333333;
}

body {
  background-color: var(--bg-color);
  color: var(--text-color);
  transition: background-color 0.3s, color 0.3s;
  font-family: Arial, sans-serif;
  margin: 0;
  padding: 20px;
}

button {
  background-color: var(--button-bg);
  color: var(--text-color);
  border: 1px solid var(--text-color);
  padding: 8px 12px;
  cursor: pointer;
  border-radius: 4px;
  transition: background-color 0.3s, color 0.3s;
}

3. JavaScript (script.js)

// Получаем кнопку и корневой элемент
const themeToggleBtn = document.getElementById('theme-toggle');
const body = document.body;

// Проверяем, есть ли сохранённая тема в localStorage
const savedTheme = localStorage.getItem('theme');
if (savedTheme) {
  body.setAttribute('data-theme', savedTheme);
}

// Функция переключения темы
function toggleTheme() {
  const currentTheme = body.getAttribute('data-theme');

  if (currentTheme === 'dark') {
    body.removeAttribute('data-theme');
    localStorage.setItem('theme', 'light');
  } else {
    body.setAttribute('data-theme', 'dark');
    localStorage.setItem('theme', 'dark');
  }
}

// Назначаем обработчик на кнопку
themeToggleBtn.addEventListener('click', toggleTheme);

Как это работает:

  • По умолчанию используется светлая тема.
  • При клике на кнопку тема переключается между светлой и тёмной.
  • Выбор темы сохраняется в localStorage, чтобы при перезагрузке страницы тема оставалась прежней.
  • Используются CSS-переменные для удобного управления цветами.

Обновлённый JavaScript-код, который меняет иконку кнопки в зависимости от текущей темы — 🌙 для светлой темы (переключение на тёмную) и ☀️ для тёмной темы (переключение на светлую):

Обновлённый script.js

const themeToggleBtn = document.getElementById('theme-toggle');
const body = document.body;

// Функция для установки иконки кнопки в зависимости от темы
function updateButtonIcon() {
  const currentTheme = body.getAttribute('data-theme');
  if (currentTheme === 'dark') {
    themeToggleBtn.textContent = '☀️'; // Солнце — переключить на светлую
  } else {
    themeToggleBtn.textContent = '🌙'; // Луна — переключить на тёмную
  }
}

// Проверяем сохранённую тему из localStorage
const savedTheme = localStorage.getItem('theme');
if (savedTheme === 'dark') {
  body.setAttribute('data-theme', 'dark');
}

// Обновляем иконку сразу при загрузке
updateButtonIcon();

// Функция переключения темы
function toggleTheme() {
  const currentTheme = body.getAttribute('data-theme');

  if (currentTheme === 'dark') {
    body.removeAttribute('data-theme');
    localStorage.setItem('theme', 'light');
  } else {
    body.setAttribute('data-theme', 'dark');
    localStorage.setItem('theme', 'dark');
  }

  // Обновляем иконку после переключения
  updateButtonIcon();
}

// Назначаем обработчик на кнопку
themeToggleBtn.addEventListener('click', toggleTheme);

Обновлённый HTML (кнопка без текста по умолчанию)

<button id="theme-toggle" aria-label="Переключить тему"></button>

Или оставьте как было — с 🌙 / ☀️ — но теперь скрипт будет заменять это на нужную иконку при загрузке.

Теперь:

  • При светлой теме кнопка показывает 🌙 (нажми, чтобы включить тёмную).
  • При тёмной теме кнопка показывает ☀️ (нажми, чтобы вернуться к светлой).

И всё это сохраняется между перезагрузками страницы! 🌓

Share this content:

Отправить комментарий