Адаптивная HTML верстка сайта портфолио для новичков на HTML и CSS. Мобильная адаптивная верстка, медиазапросы. Темная тема на CSS переменных и JavaScript. Определение темной темы по системным настройкам. Сохранение выбранной темы в localStorage. Публикация сайта на GitHub Pages.
Содержание
Материалы к уроку:
JS скрипт для определения и отслеживания темной темы
const btnDarkMode = document.querySelector(".dark-mode-btn"); // 1. Проверка темной темы на уровне системных настроек if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches ) { btnDarkMode.classList.add("dark-mode-btn--active"); document.body.classList.add("dark"); } // 2. Проверка темной темы в localStorage if (localStorage.getItem('darkMode') === 'dark') { btnDarkMode.classList.add("dark-mode-btn--active"); document.body.classList.add("dark"); } else if (localStorage.getItem("darkMode") === "light") { btnDarkMode.classList.remove("dark-mode-btn--active"); document.body.classList.remove("dark"); } // Если меняются системные настройки, меняем тему window .matchMedia("(prefers-color-scheme: dark)") .addEventListener("change", (event) => { const newColorScheme = event.matches ? "dark" : "light"; if (newColorScheme === "dark") { btnDarkMode.classList.add("dark-mode-btn--active"); document.body.classList.add("dark"); localStorage.setItem("darkMode", "dark"); } else { btnDarkMode.classList.remove("dark-mode-btn--active"); document.body.classList.remove("dark"); localStorage.setItem("darkMode", "light"); } }); // Включение ночного режима по кнопке btnDarkMode.onclick = function () { btnDarkMode.classList.toggle("dark-mode-btn--active"); const isDark = document.body.classList.toggle("dark"); if (isDark) { localStorage.setItem("darkMode", "dark"); } else { localStorage.setItem("darkMode", "light"); } };