Відкрийте для себе потужність CSS-медіазапитів та користувацьких властивостей для створення автоматичних світлих і темних тем, що адаптуються до вподобань користувачів, покращуючи доступність та візуальну привабливість для глобальної аудиторії.
Функція CSS Light-Dark: Автоматична адаптація теми для глобального вебу
У сучасному глобально пов'язаному світі вебсайти мають бути доступними та візуально привабливими для користувачів з різним походженням та вподобаннями. Один з найефективніших способів досягти цього — автоматична адаптація теми, зокрема пропонування світлої та темної тем, що налаштовуються відповідно до системних налаштувань користувача. Ця стаття допоможе вам реалізувати цю функціональність за допомогою CSS-медіазапитів та кастомних властивостей, забезпечуючи безшовний та комфортний досвід перегляду для вашої міжнародної аудиторії.
Навіщо впроваджувати автоматичні світлу та темну теми?
Існує кілька вагомих причин для включення автоматичної адаптації теми у ваші вебпроєкти:
- Покращений користувацький досвід: Користувачі часто мають чіткі вподобання щодо світлих або темних тем. Врахування їхніх системних налаштувань дозволяє їм переглядати ваш сайт у звичний та комфортний спосіб. Це особливо важливо для користувачів, які проводять багато часу перед екранами, оскільки темні теми можуть зменшити навантаження на очі в умовах слабкого освітлення.
- Покращена доступність: Світлі та темні теми можуть значно покращити доступність для користувачів з вадами зору. Висококонтрастні режими полегшують читання тексту, тоді як темні теми можуть зменшити відблиски та покращити читабельність для користувачів із чутливістю до світла.
- Сучасний вебдизайн: Впровадження світлих і темних тем демонструє прихильність до сучасних принципів вебдизайну та орієнтації на користувача. Це показує, що ви дбаєте про надання витонченого та адаптивного досвіду.
- Зменшення навантаження на очі: Особливо важливо для користувачів у регіонах з довгими робочими годинами перед комп'ютерами (наприклад, у багатьох азійських країнах). Темна тема полегшить навантаження на їхні очі.
- Економія заряду батареї: На пристроях з OLED-екранами темні теми можуть економити заряд батареї, зменшуючи кількість випромінюваного світла. Це актуально для користувачів у всьому світі, особливо для тих, хто використовує мобільні пристрої з обмеженою ємністю батареї.
Як реалізувати автоматичну адаптацію теми за допомогою CSS
В основі автоматичної адаптації теми лежить медіазапит prefers-color-scheme
. Цей CSS-медіазапит дозволяє вам визначити бажану колірну схему користувача (світлу або темну) та застосувати відповідні стилі.
Крок 1: Визначте кастомні властивості (CSS-змінні)
Почніть з визначення кастомних властивостей (CSS-змінних) для зберігання значень кольорів для вашої світлої та темної тем. Це полегшує перемикання між темами шляхом простого оновлення значень змінних.
:root {
--background-color: #ffffff; /* Фон світлої теми */
--text-color: #000000; /* Текст світлої теми */
--link-color: #007bff; /* Посилання світлої теми */
--button-background-color: #f0f0f0;
--button-text-color: #000;
}
@media (prefers-color-scheme: dark) {
:root {
--background-color: #121212; /* Фон темної теми */
--text-color: #ffffff; /* Текст темної теми */
--link-color: #66b3ff; /* Посилання темної теми */
--button-background-color: #333;
--button-text-color: #fff;
}
}
У цьому прикладі ми визначаємо змінні для кольору фону, тексту, посилань та кнопок. Селектор :root
застосовує ці змінні до всього документа. Медіазапит @media (prefers-color-scheme: dark)
потім перевизначає ці змінні значеннями для темної теми, коли користувач встановив темний режим у своїй системі.
Крок 2: Застосуйте кастомні властивості до ваших стилів
Далі застосуйте ці кастомні властивості до ваших CSS-стилів, щоб керувати виглядом елементів вашого вебсайту.
body {
background-color: var(--background-color);
color: var(--text-color);
transition: background-color 0.3s, color 0.3s; /* Плавний перехід */
}
a {
color: var(--link-color);
}
button {
background-color: var(--button-background-color);
color: var(--button-text-color);
border: none;
padding: 10px 20px;
cursor: pointer;
}
Тут ми використовуємо функцію var()
для доступу до значень наших кастомних властивостей. Ми також додали властивість transition
до елемента body
для створення плавного переходу між темами.
Крок 3: Тестування та вдосконалення
Ретельно протестуйте вашу реалізацію в різних браузерах та операційних системах. Сучасні браузери, такі як Chrome, Firefox, Safari та Edge, повністю підтримують медіазапит prefers-color-scheme
. Ви можете перемикатися між світлим та темним режимами в налаштуваннях вашої операційної системи, щоб побачити зміни на вашому вебсайті.
Просунуті техніки та рекомендації
Надання ручного перемикача тем
Хоча автоматична адаптація теми є чудовою відправною точкою, деякі користувачі можуть захотіти вручну змінити системні налаштування. Ви можете надати ручний перемикач теми за допомогою JavaScript та локального сховища.
HTML:
<button id="theme-toggle">Перемкнути тему</button>
JavaScript:
const themeToggle = document.getElementById('theme-toggle');
const body = document.body;
let currentTheme = localStorage.getItem('theme') || 'auto'; // За замовчуванням - авто
function setTheme(theme) {
if (theme === 'dark') {
body.classList.add('dark-theme');
body.classList.remove('light-theme');
} else if (theme === 'light') {
body.classList.add('light-theme');
body.classList.remove('dark-theme');
} else {
body.classList.remove('light-theme', 'dark-theme');
}
localStorage.setItem('theme', theme);
currentTheme = theme;
}
// Застосувати початкову тему при завантаженні сторінки
if (currentTheme === 'dark') {
setTheme('dark');
} else if (currentTheme === 'light') {
setTheme('light');
} else {
//Якщо встановлено авто, дозволити prefers-color-scheme вирішити
}
themeToggle.addEventListener('click', () => {
if (currentTheme === 'auto'){
setTheme('light');
} else if (currentTheme === 'light') {
setTheme('dark');
} else {
setTheme('auto');
}
});
CSS: Додайте наступний CSS разом із попереднім. Зверніть увагу на ручне перевизначення:
body.light-theme {
--background-color: #ffffff; /* Фон світлої теми */
--text-color: #000000; /* Текст світлої теми */
--link-color: #007bff; /* Посилання світлої теми */
--button-background-color: #f0f0f0;
--button-text-color: #000;
}
body.dark-theme {
--background-color: #121212; /* Фон темної теми */
--text-color: #ffffff; /* Текст темної теми */
--link-color: #66b3ff; /* Посилання темної теми */
--button-background-color: #333;
--button-text-color: #fff;
}
Цей фрагмент коду додає кнопку, яка дозволяє користувачам перемикатися між світлою, темною та автоматичною темами. Вибрана тема зберігається в локальному сховищі, щоб вона залишалася при перезавантаженні сторінки.
Обробка зображень та SVG
Деякі зображення та SVG можуть погано виглядати як у світлій, так і в темній темі. Ви можете використовувати CSS-медіазапити для умовного відображення різних версій цих ресурсів.
img.light-mode {
display: block;
}
img.dark-mode {
display: none;
}
@media (prefers-color-scheme: dark) {
img.light-mode {
display: none;
}
img.dark-mode {
display: block;
}
}
Цей фрагмент коду показує одне зображення (з класом light-mode
) у світлому режимі та інше зображення (з класом dark-mode
) у темному режимі.
Рекомендації щодо палітри кольорів для міжнародної аудиторії
Вибираючи палітри кольорів для світлої та темної тем, пам'ятайте про культурні асоціації та міркування доступності. Ось деякі загальні рекомендації:
- Контраст: Забезпечте достатній контраст між текстом та кольором фону, щоб відповідати стандартам доступності (WCAG). Використовуйте інструменти, такі як WebAIM's Contrast Checker, для перевірки коефіцієнтів контрастності.
- Дальтонізм: Враховуйте вплив вашого вибору кольорів на користувачів з дальтонізмом. Використовуйте інструменти, такі як Color Blindness Simulator, для перегляду вашого вебсайту так, як його бачать люди з різними типами дальтонізму.
- Культурні асоціації: Пам'ятайте, що кольори можуть мати різні культурні асоціації в різних частинах світу. Наприклад, білий колір у деяких культурах часто асоціюється з чистотою та трауром, тоді як червоний — з удачею та процвітанням в інших. Досліджуйте культурні асоціації, щоб уникнути ненавмисної образи чи непорозуміння.
- Нейтральні палітри: Якщо ви сумніваєтеся, обирайте нейтральні палітри кольорів, які менш імовірно будуть неправильно витлумачені або образливі. Сірі, бежеві та приглушені тони можуть бути безпечним та універсальним вибором.
- Тестування користувачами: Проводьте тестування з різноманітною групою учасників, щоб зібрати відгуки про ваш вибір кольорів та переконатися, що вони позитивно сприймаються вашою цільовою аудиторією.
- Локалізація: Де можливо, розглядайте використання локалізованих палітр кольорів, адаптованих до культурних уподобань конкретних регіонів або країн. Це може включати коригування відтінків, насиченості та яскравості кольорів відповідно до місцевих смаків.
Рекомендації щодо продуктивності
Хоча реалізація автоматичної адаптації теми є відносно простою, важливо враховувати потенційний вплив на продуктивність. Уникайте надто складних CSS-селекторів або анімацій, які можуть сповільнити рендеринг. Також переконайтеся, що ваші кастомні властивості визначені ефективно, щоб мінімізувати накладні витрати на пошук змінних.
Ось деякі найкращі практики для оптимізації продуктивності:
- Зберігайте CSS-селектори простими: Уникайте надто специфічних або вкладених CSS-селекторів, оскільки вони можуть збільшити час, необхідний браузеру для зіставлення стилів з елементами.
- Використовуйте кастомні властивості CSS розсудливо: Хоча кастомні властивості є потужними, надмірне їх використання може вплинути на продуктивність. Використовуйте їх стратегічно для значень, що часто змінюються, або значень, які використовуються в кількох елементах.
- Мінімізуйте непотрібні анімації: Анімації можуть додати візуальної привабливості вашому сайту, але вони також можуть вплинути на продуктивність, якщо їх реалізовано необережно. Використовуйте CSS-переходи та анімації помірно та оптимізуйте їх для плавного рендерингу.
- Тестуйте на реальних пристроях: Завжди тестуйте ваш сайт на реальних пристроях з різними умовами мережі та апаратними можливостями, щоб виявити потенційні проблеми з продуктивністю. Використовуйте інструменти розробника в браузері для профілювання продуктивності вашого сайту та виявлення областей для покращення.
Найкращі практики доступності
Переконайтеся, що ваші світла та темна теми відповідають рекомендаціям з доступності, таким як WCAG (Web Content Accessibility Guidelines). Це включає забезпечення достатнього контрасту кольорів, використання семантичного HTML та забезпечення доступності всіх інтерактивних елементів з клавіатури.
Ось деякі конкретні найкращі практики доступності, яких варто дотримуватися:
- Достатній контраст кольорів: Переконайтеся, що коефіцієнт контрастності між текстом та фоном відповідає стандартам WCAG 2.1 AA (4.5:1 для звичайного тексту, 3:1 для великого тексту). Використовуйте інструменти, такі як WebAIM's Contrast Checker, для перевірки коефіцієнтів контрастності.
- Семантичний HTML: Використовуйте семантичні HTML-елементи (наприклад,
<header>
,<nav>
,<article>
,<aside>
,<footer>
) для логічної структуризації вашого контенту. Це допомагає скрінрідерам та іншим допоміжним технологіям розуміти контент та ефективно переміщатися по сторінці. - Доступність з клавіатури: Переконайтеся, що всі інтерактивні елементи (наприклад, посилання, кнопки, поля форм) доступні з клавіатури. Використовуйте атрибут
tabindex
для керування порядком фокусування та надавайте візуальні підказки для позначення елемента, що має фокус. - Атрибути ARIA: Використовуйте атрибути ARIA (Accessible Rich Internet Applications) для надання додаткової інформації про структуру та функціональність вашого вебзастосунку допоміжним технологіям. Наприклад, використовуйте
aria-label
для надання описової мітки для елемента абоaria-hidden
для приховування елемента від скрінрідерів. - Тестування з допоміжними технологіями: Тестуйте ваш сайт за допомогою скрінрідерів та інших допоміжних технологій для виявлення потенційних проблем з доступністю. Використовуйте інструменти, такі як NVDA (NonVisual Desktop Access) або VoiceOver, щоб відчути ваш сайт так, як його сприймає користувач з вадами зору.
- Надавайте альтернативний текст для зображень: Використовуйте атрибут
alt
для надання описового альтернативного тексту для всіх зображень. Цей текст буде відображатися, якщо зображення не може завантажитися, а також буде прочитаний скрінрідерами.
Приклади для різних регіонів
Розгляньте ці приклади того, як світлі та темні теми можна адаптувати для різноманітних глобальних аудиторій:
- Східна Азія: У багатьох східноазійських культурах білий колір асоціюється з трауром. При розробці темної теми для цих регіонів уникайте надмірного використання білого тексту на чорному фоні. Замість цього обирайте текст кольору слонової кістки або світло-сірий.
- Близький Схід: У деяких близькосхідних культурах часто надають перевагу яскравим кольорам. При розробці світлої теми розгляньте можливість використання яскравих акцентних кольорів для додавання візуального інтересу. Однак переконайтеся, що вибір кольорів не суперечить культурним особливостям.
- Європа: В Європі часто віддають перевагу мінімалістичному дизайну. При розробці як світлих, так і темних тем обирайте чисті макети, просту типографіку та стримані палітри кольорів.
- Латинська Америка: У Латинській Америці часто цінують сміливий та виразний дизайн. При розробці як світлих, так і темних тем розгляньте можливість використання грайливої типографіки, яскравих кольорів та динамічних анімацій.
- Африка: Через різну швидкість інтернету та можливості пристроїв, пріоритетом є продуктивність та доступність. Використовуйте простіші елементи дизайну та тестуйте на повільних з'єднаннях.
Висновок
Впровадження автоматичних світлих і темних тем є вирішальним кроком до створення більш доступного та зручного вебдосвіду для глобальної аудиторії. Використовуючи CSS-медіазапити та кастомні властивості, ви можете легко адаптувати зовнішній вигляд вашого сайту до вподобань користувачів, зменшити навантаження на очі та покращити доступність для користувачів з вадами зору. Пам'ятайте про культурні асоціації, рекомендації з доступності та міркування щодо продуктивності, щоб забезпечити безшовний та інклюзивний досвід перегляду для всіх.
Застосовуючи ці техніки, ви демонструєте прихильність до сучасних принципів вебдизайну та задовольняєте різноманітні потреби вашої міжнародної аудиторії, роблячи ваш сайт привітним та комфортним простором для всіх.