Імплементуйте темний режим на своєму веб-сайті за допомогою цього вичерпного посібника. Дізнайтеся про медіа-запити CSS, перемикачі JavaScript, доступність та найкращі практики.
Імплементація темного режиму: повний посібник із CSS та JavaScript
Темний режим стає все більш популярним, пропонуючи більш комфортне сприйняття, особливо в умовах слабкого освітлення. Цей посібник надає вичерпний огляд того, як реалізувати темний режим на вашому веб-сайті за допомогою CSS та JavaScript, забезпечуючи плавний та доступний користувацький досвід для глобальної аудиторії.
Чому варто впроваджувати темний режим?
Існує кілька вагомих причин розглянути можливість впровадження темного режиму:
- Покращений користувацький досвід: Багато користувачів вважають темний режим легшим для очей, зменшуючи напругу, особливо під час перегляду вночі або в слабо освітлених приміщеннях. Це обслуговує глобальну аудиторію з різними звичками використання екрана та умовами освітлення.
- Доступність: Темний режим може покращити доступність для користувачів із порушеннями зору або чутливістю до світла. Надаючи опцію високого контрасту, ви робите свій веб-сайт більш інклюзивним.
- Тривалість роботи акумулятора: На пристроях з екранами OLED або AMOLED темний режим може зменшити енергоспоживання, продовжуючи час роботи акумулятора. Це особливо актуально для мобільних користувачів у районах з обмеженим доступом до зарядної інфраструктури.
- Сучасна тенденція дизайну: Темний режим є популярною тенденцією дизайну, і його реалізація може зробити ваш веб-сайт більш сучасним та привабливим. Це покращує сприйняття бренду та залученість користувачів.
Методи впровадження темного режиму
Існує кілька підходів до впровадження темного режиму, кожен зі своїми перевагами та недоліками. Ми розглянемо найпоширеніші методи:
- Медіа-запити CSS (
prefers-color-scheme
): Цей метод автоматично виявляє бажану схему кольорів користувача на основі налаштувань його операційної системи. - Перемикач JavaScript: Цей метод надає ручний перемикач (наприклад, повзунок або кнопку), який дозволяє користувачам перемикатися між світлим і темним режимом.
- Комбінування медіа-запитів та JavaScript: Цей підхід поєднує переваги обох методів, забезпечуючи автоматичне виявлення та дозволяючи користувачам перевизначати системні налаштування.
1. Впровадження темного режиму за допомогою медіа-запитів CSS
Медіа-запит CSS prefers-color-scheme
дозволяє виявляти бажану схему кольорів користувача та відповідним чином застосовувати різні стилі. Це найпростіший та найефективніший спосіб реалізувати темний режим для користувачів, які вже встановили свої системні налаштування.
Приклад коду
Додайте наступний CSS до вашого файлу стилів:
/* Стандартна (світла) тема */
body {
background-color: #fff;
color: #000;
}
/* Темна тема */
@media (prefers-color-scheme: dark) {
body {
background-color: #222;
color: #fff;
}
/* Налаштуйте інші елементи за потреби */
h1, h2, h3 {
color: #ddd;
}
a {
color: #8ab4f8;
}
}
Пояснення:
- Перший блок CSS визначає стандартні (світлі) стилі теми.
- Блок
@media (prefers-color-scheme: dark)
застосовує стилі лише тоді, коли система користувача налаштована на темний режим. - У блоці
@media
ви можете визначити стилі темного режиму для різних елементів, таких як фон тіла та колір тексту, заголовки та посилання.
Переваги
- Автоматичне виявлення: Браузер автоматично виявляє переваги користувача, забезпечуючи плавний досвід.
- Просте впровадження: Цей метод вимагає мінімального коду і простий у реалізації.
- Продуктивність: Медіа-запити CSS ефективно обробляються браузером.
Недоліки
- Обмежений контроль: Користувачі не можуть вручну перемикатися між світлим і темним режимом на вашому веб-сайті.
- Залежність від системних налаштувань: Зовнішній вигляд повністю залежить від системних налаштувань користувача, про які він може не знати або не мати можливості змінити.
2. Впровадження темного режиму за допомогою перемикача JavaScript
Використання перемикача JavaScript надає користувачам ручний перемикач для керування темою веб-сайту. Це дає користувачам більше контролю та дозволяє їм перевизначати системні налаштування. Цей підхід має вирішальне значення для обслуговування користувачів на різних пристроях та платформах, які можуть не послідовно підтримувати або надавати доступ до системних налаштувань темного режиму.
Структура HTML
Спочатку додайте елемент перемикача до свого HTML:
<label class="switch">
<input type="checkbox" id="darkModeToggle">
<span class="slider round"></span>
</label>
Це створює простий перемикач за допомогою прапорця та деяких користувацьких стилів CSS.
Стилізація CSS (Необов'язково)
Ви можете стилізувати перемикач за допомогою CSS. Ось приклад:
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #2196F3;
}
input:focus + .slider {
box-shadow: 0 0 1px #2196F3;
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Круглі повзунки */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
Код JavaScript
Тепер додайте наступний код JavaScript для обробки функціональності перемикача:
const darkModeToggle = document.getElementById('darkModeToggle');
const body = document.body;
// Функція для перемикання темного режиму
function toggleDarkMode() {
body.classList.toggle('dark-mode');
// Зберегти переваги користувача в localStorage
if (body.classList.contains('dark-mode')) {
localStorage.setItem('darkMode', 'enabled');
} else {
localStorage.setItem('darkMode', 'disabled');
}
}
// Перевірити localStorage на збережені переваги
if (localStorage.getItem('darkMode') === 'enabled') {
body.classList.add('dark-mode');
darkModeToggle.checked = true;
}
// Додати обробник подій до перемикача
darkModeToggle.addEventListener('change', toggleDarkMode);
Пояснення:
- Код отримує елемент перемикача та елемент тіла.
- Функція
toggleDarkMode
перемикає класdark-mode
на елементі тіла. - Код використовує
localStorage
для збереження переваг користувача, щоб вони зберігалися між сесіями. - Код перевіряє
localStorage
під час завантаження сторінки, щоб застосувати збережені переваги. - До перемикача додається обробник подій, щоб функція
toggleDarkMode
викликалася під час натискання перемикача.
Стилізація CSS для темного режиму (з використанням класу)
Оновіть свій CSS, щоб використовувати клас dark-mode
для застосування стилів темної теми:
/* Стандартна (світла) тема */
body {
background-color: #fff;
color: #000;
}
/* Темна тема */
body.dark-mode {
background-color: #222;
color: #fff;
}
body.dark-mode h1, body.dark-mode h2, body.dark-mode h3 {
color: #ddd;
}
body.dark-mode a {
color: #8ab4f8;
}
Переваги
- Керування користувачем: Користувачі можуть вручну перемикатися між світлим і темним режимом на вашому веб-сайті.
- Збереження: Переваги користувача зберігаються за допомогою
localStorage
, тому вони зберігаються між сесіями.
Недоліки
- Більш складне впровадження: Цей метод вимагає більше коду, ніж використання лише медіа-запитів CSS.
- Залежність від JavaScript: Функціональність перемикача залежить від увімкненого JavaScript у браузері користувача.
3. Комбінування медіа-запитів та JavaScript
Найкращий підхід часто полягає в поєднанні медіа-запитів CSS та перемикача JavaScript. Це забезпечує найкраще з обох світів: автоматичне виявлення бажаної схеми кольорів користувача, а також дозволяє користувачам вручну перевизначати системні налаштування. Це задовольняє ширшу аудиторію, включаючи тих, хто може не знати про системні налаштування теми або не мати можливості їх змінити.
Приклад коду
Використовуйте той самий HTML та CSS з прикладу перемикача JavaScript. Змініть JavaScript, щоб перевірити системні налаштування:
const darkModeToggle = document.getElementById('darkModeToggle');
const body = document.body;
// Функція для перемикання темного режиму
function toggleDarkMode() {
body.classList.toggle('dark-mode');
// Зберегти переваги користувача в localStorage
if (body.classList.contains('dark-mode')) {
localStorage.setItem('darkMode', 'enabled');
} else {
localStorage.setItem('darkMode', 'disabled');
}
}
// Перевірити localStorage на збережені переваги, потім системні налаштування
if (localStorage.getItem('darkMode') === 'enabled') {
body.classList.add('dark-mode');
darkModeToggle.checked = true;
} else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
body.classList.add('dark-mode');
darkModeToggle.checked = true;
}
// Додати обробник подій до перемикача
darkModeToggle.addEventListener('change', toggleDarkMode);
Пояснення:
- Код спочатку перевіряє
localStorage
на наявність збережених переваг. - Якщо в
localStorage
не знайдено жодних переваг, він перевіряє, чи система користувача віддає перевагу темному режиму за допомогоюwindow.matchMedia
. - Якщо система віддає перевагу темному режиму, до тіла додається клас
dark-mode
, і перемикач позначається як вибраний.
Переваги
- Автоматичне виявлення та керування користувачем: Надає як автоматичне виявлення, так і ручне керування.
- Збереження: Переваги користувача зберігаються за допомогою
localStorage
.
Недоліки
- Трохи складніше: Цей метод трохи складніший, ніж використання кожного методу окремо.
- Залежність від JavaScript: Залежить від увімкненого JavaScript.
Міркування щодо доступності
При впровадженні темного режиму надзвичайно важливо враховувати доступність, щоб ваш веб-сайт залишався придатним для всіх користувачів. Пам'ятайте, що просте інвертування кольорів не гарантує автоматичної доступності. Ось кілька ключових міркувань:
- Контрастність кольорів: Забезпечте достатню контрастність кольорів між текстом та фоном як у світлому, так і в темному режимі. Використовуйте такі інструменти, як Contrast Checker від WebAIM (webaim.org/resources/contrastchecker/), щоб переконатися, що ваші колірні комбінації відповідають стандартам доступності. Це особливо важливо для користувачів з поганим зором.
- Індикатори фокусу: Переконайтеся, що індикатори фокусу добре видимі як у світлому, так і в темному режимі, щоб користувачі, які навігують за допомогою клавіатури, могли легко бачити, який елемент зараз у фокусі.
- Зображення та піктограми: Розгляньте, як зображення та піктограми виглядатимуть у темному режимі. Можливо, вам доведеться надати альтернативні версії або використовувати CSS-фільтри для налаштування їх кольорів для оптимальної видимості.
- Тестування користувачів: Протестуйте свою реалізацію темного режиму з користувачами, які мають різні порушення зору, щоб виявити та усунути будь-які проблеми з доступністю.
Найкращі практики для впровадження темного режиму
Ось кілька найкращих практик, яких слід дотримуватися при впровадженні темного режиму на вашому веб-сайті:
- Використовуйте CSS-змінні (користувацькі властивості): CSS-змінні дозволяють визначати кольори та інші стилі в центральному місці, що полегшує керування та оновлення вашої теми.
- Ретельно тестуйте: Протестуйте свою реалізацію темного режиму на різних пристроях та браузерах, щоб забезпечити узгодженість.
- Надайте чіткий перемикач: Зробіть перемикач теми легко знайти та використовувати. Використовуйте чіткий та інтуїтивно зрозумілий значок, щоб вказати його функцію.
- Враховуйте переваги користувачів: Поважайте переваги користувачів та зберігайте їх за допомогою
localStorage
або файлів cookie. - Підтримуйте узгодженість: Переконайтеся, що ваша реалізація темного режиму послідовна на всьому вашому веб-сайті.
Приклад: CSS-змінні для тематизації
CSS-змінні полегшують перемикання між світлими та темними темами. Визначте змінні в псевдокласі :root
:
:root {
--bg-color: #fff;
--text-color: #000;
--link-color: #007bff;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
}
a {
color: var(--link-color);
}
body.dark-mode {
--bg-color: #222;
--text-color: #fff;
--link-color: #8ab4f8;
}
Тепер, коли клас dark-mode
додається до тіла, CSS-змінні оновлюються, і стилі застосовуються автоматично.
Висновок
Впровадження темного режиму може значно покращити користувацький досвід вашого веб-сайту, покращити доступність і навіть заощадити час роботи акумулятора. Дотримуючись методів та найкращих практик, викладених у цьому посібнику, ви можете створити плавний та приємний досвід темного режиму для своїх користувачів у всьому світі.
Пам'ятайте, що пріоритетом є доступність та ретельне тестування вашої реалізації, щоб гарантувати, що ваш веб-сайт залишається придатним для всіх користувачів, незалежно від їхніх переваг або візуальних можливостей.
Продумано впроваджуючи темний режим, ви не просто слідуєте тенденції, але й створюєте більш інклюзивний та зручний веб-досвід для глобальної аудиторії. Ця відданість користувацькому досвіду може значно покращити загальну продуктивність та привабливість вашого веб-сайту.