Дізнайтеся про правило CSS @when — потужну функцію, що дозволяє умовно застосовувати стилі на основі підтримки браузера, розміру екрана тощо. Навчайтеся з практичними прикладами.
Правило CSS @when: Майстерне застосування умовних стилів
Світ CSS постійно розвивається, пропонуючи розробникам потужніші та гнучкіші способи стилізації веб-сторінок. Однією з таких функцій, що набирає популярності, є правило @when
, також відоме як CSS Conditional Rules Module Level 1. Це правило дозволяє застосовувати стилі CSS умовно, залежно від виконання певних умов. Це потужний інструмент для адаптивного дизайну, визначення можливостей браузера та створення більш надійних і гнучких таблиць стилів.
Що таке правило CSS @when?
Правило @when
— це умовне at-rule у CSS, яке дозволяє визначати стилі, що застосовуються лише за умови виконання певних умов. Уявіть це як оператор if
для вашого CSS. На відміну від медіа-запитів, які в основному зосереджені на характеристиках вікна перегляду (розмір екрана, орієнтація тощо), @when
надає більш загальний та розширюваний спосіб для умовної стилізації. Воно розширює існуючі умовні at-rules, такі як @supports
та @media
.
Ключові переваги використання @when
- Покращена читабельність коду: Інкапсулюючи умовну логіку в блоки
@when
, ви робите свій CSS легшим для розуміння та підтримки. Намір, що стоїть за конкретними застосуваннями стилів, стає яснішим. - Підвищена гнучкість:
@when
може обробляти складніші умови, ніж традиційні медіа-запити, особливо в поєднанні з запитами можливостей та логікою, керованою JavaScript (з використанням кастомних властивостей CSS). - Спрощене визначення можливостей:
@when
бездоганно інтегрується з@supports
, дозволяючи застосовувати стилі лише тоді, коли доступні певні функції браузера. Це має вирішальне значення для прогресивного поліпшення. - Більш семантична стилізація:
@when
дозволяє стилізувати елементи на основі їхнього стану або контексту, що призводить до більш семантичного та підтримуваного CSS. Наприклад, стилізація елементів на основі data-атрибутів або кастомних властивостей, встановлених JavaScript.
Синтаксис правила @when
Основний синтаксис правила@when
виглядає так:
@when <condition> {
/* CSS-правила, що застосовуються, коли умова істинна */
}
<condition>
може бути будь-яким валідним логічним виразом, що обчислюється як true або false. Цей вираз часто включає:
- Медіа-запити: Умови, засновані на характеристиках вікна перегляду (наприклад, ширина екрана, орієнтація пристрою).
- Запити можливостей (@supports): Умови, засновані на підтримці браузером конкретних функцій CSS.
- Булева алгебра: Поєднання кількох умов за допомогою логічних операторів (
and
,or
,not
).
Практичні приклади використання @when
Розглянемо кілька практичних прикладів, щоб проілюструвати потужність та універсальність правила@when
.
1. Адаптивний дизайн з @when та медіа-запитами
Найпоширеніший випадок використання @when
— це адаптивний дизайн, де ви змінюєте стилі залежно від розміру екрана. Хоча медіа-запити можуть досягти цього самостійно, @when
надає більш структурований та читабельний підхід, особливо при роботі зі складними умовами.
@when (min-width: 768px) and (max-width: 1023px) {
body {
font-size: 18px;
line-height: 1.6;
}
.container {
width: 720px;
margin: 0 auto;
}
}
У цьому прикладі стилі всередині блоку @when
застосовуються лише тоді, коли ширина екрана становить від 768 до 1023 пікселів (типовий розмір планшета). Це забезпечує чіткий та лаконічний спосіб визначення стилів для конкретних діапазонів вікна перегляду.
Примітка щодо інтернаціоналізації: Адаптивний дизайн є критично важливим для глобальної аудиторії. Враховуйте різноманітність розмірів екранів у різних регіонах. Наприклад, у деяких країнах використання мобільних пристроїв вище, що робить підхід "mobile-first" ще більш важливим.
2. Визначення можливостей з @when та @supports
@when
можна поєднувати з @supports
для застосування стилів лише тоді, коли певна функція CSS підтримується браузером. Це дозволяє вам прогресивно покращувати ваш веб-сайт, забезпечуючи кращий досвід для користувачів сучасних браузерів, зберігаючи при цьому сумісність зі старими.
@when supports(display: grid) {
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
grid-gap: 20px;
}
}
@when not supports(display: grid) {
.container {
/* Резервні стилі для браузерів, що не підтримують grid */
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.item {
width: calc(50% - 10px); /* Налаштування ширини для старих браузерів */
}
}
Тут ми використовуємо @supports
для перевірки, чи підтримує браузер CSS Grid Layout. Якщо так, ми застосовуємо стилі на основі grid до .container
. Якщо ні, ми надаємо резервні стилі з використанням flexbox, щоб забезпечити схожу розмітку в старих браузерах.
Примітка щодо глобальної доступності: Визначення можливостей є важливим для доступності. Старі браузери можуть не підтримувати нові атрибути ARIA або семантичні елементи HTML5. Надавайте відповідні резервні варіанти, щоб контент залишався доступним.
3. Поєднання медіа-запитів та запитів можливостей
Справжня сила @when
полягає в його здатності поєднувати медіа-запити та запити можливостей для створення більш складних та тонких правил умовної стилізації.
@when (min-width: 768px) and supports(backdrop-filter: blur(10px)) {
.modal {
background-color: rgba(255, 255, 255, 0.8);
backdrop-filter: blur(10px);
}
}
У цьому прикладі елемент .modal
матиме розмитий фон лише тоді, коли ширина екрана становить щонайменше 768 пікселів і браузер підтримує властивість backdrop-filter
. Це дозволяє створювати візуально привабливі ефекти в сучасних браузерах, уникаючи потенційних проблем з продуктивністю або збоїв рендерингу в старих.
4. Стилізація на основі кастомних властивостей (змінних CSS)
@when
також можна використовувати в поєднанні з кастомними властивостями CSS (також відомими як змінні CSS) для створення динамічної та керованої станом стилізації. Ви можете використовувати JavaScript для оновлення значення кастомної властивості, а потім використовувати @when
для застосування різних стилів на основі цього значення.
Спочатку визначте кастомну властивість:
:root {
--theme-color: #007bff; /* Колір теми за замовчуванням */
--is-dark-mode: false;
}
Потім використовуйте @when
для застосування стилів на основі значення кастомної властивості:
@when var(--is-dark-mode) = true {
body {
background-color: #333;
color: #fff;
}
a {
color: #ccc;
}
}
Нарешті, використовуйте JavaScript для перемикання значення кастомної властивості --is-dark-mode
:
document.getElementById('darkModeToggle').addEventListener('click', function() {
document.documentElement.style.setProperty('--is-dark-mode', this.checked);
});
Це дозволяє користувачам перемикатися між світлою та темною темами, при цьому CSS динамічно оновлюється на основі значення кастомної властивості. Зауважте, що пряме порівняння змінних CSS у @when
може не підтримуватися універсально в усіх браузерах. Замість цього може знадобитися обхідний шлях із медіа-запитом, що перевіряє ненульове значення:
@when ( --is-dark-mode > 0 ) { ... }
Однак, переконайтеся, що кастомна властивість має числове значення, щоб це працювало коректно.
Примітка щодо доступності: Надання альтернативних тем (наприклад, темного режиму) є критично важливим для доступності. Користувачі з вадами зору можуть отримати користь від висококонтрастних тем. Переконайтеся, що перемикач тем доступний за допомогою клавіатури та екранних зчитувачів.
5. Стилізація на основі data-атрибутів
Ви також можете використовувати @when
з data-атрибутами для стилізації елементів на основі значень їхніх даних. Це може бути корисно для створення динамічних інтерфейсів, де елементи змінюють свій вигляд залежно від взаємодії користувача або оновлення даних.
Наприклад, припустимо, у вас є список завдань, і кожне завдання має атрибут data-status
, який вказує на його статус (наприклад, "todo", "in-progress", "completed"). Ви можете використовувати @when
, щоб стилізувати кожне завдання по-різному залежно від його статусу.
[data-status="todo"] {
/* Стилі за замовчуванням для завдань "todo" */
color: #333;
}
@when attribute(data-status string equals "in-progress") {
[data-status="in-progress"] {
color: orange;
font-style: italic;
}
}
@when attribute(data-status string equals "completed") {
[data-status="completed"] {
color: green;
text-decoration: line-through;
}
}
Примітка: підтримка умови тестування attribute() може бути обмеженою або не повністю реалізованою в усіх браузерах на даний момент. Завжди ретельно тестуйте.
Сумісність з браузерами та поліфіли
Станом на кінець 2024 року підтримка правила @when
браузерами все ще розвивається. Хоча багато сучасних браузерів підтримують основну функціональність, деякі старіші браузери можуть цього не робити. Тому вкрай важливо перевіряти таблиці сумісності та використовувати відповідні резервні варіанти або поліфіли, де це необхідно.
Завжди звертайтеся до таких ресурсів, як Can I use..., щоб перевірити поточний стан підтримки @when
та пов'язаних функцій у браузерах.
Найкращі практики використання @when
- Зберігайте умови простими: Уникайте надто складних умов у блоках
@when
. Розбивайте складну логіку на менші, більш керовані частини. - Надавайте резервні варіанти: Завжди надавайте резервні стилі для браузерів, які не підтримують функції, що ви використовуєте у своїх правилах
@when
. Це забезпечує послідовний досвід у різних браузерах. - Ретельно тестуйте: Тестуйте ваш CSS у різноманітних браузерах та на різних пристроях, щоб переконатися, що ваші правила
@when
працюють як очікувалося. - Використовуйте змістовні коментарі: Додавайте коментарі до вашого CSS, щоб пояснити призначення кожного правила
@when
та умови, на яких воно базується. Це зробить ваш код легшим для розуміння та підтримки. - Враховуйте продуктивність: Уникайте надмірного використання правил
@when
, оскільки вони потенційно можуть вплинути на продуктивність. Оптимізуйте свій CSS, щоб мінімізувати кількість правил, які потрібно оцінювати.
Висновок
Правило @when
— це потужне доповнення до інструментарію CSS, що пропонує розробникам більш гнучкий та виразний спосіб умовного застосування стилів. Поєднуючи його з медіа-запитами, запитами можливостей та кастомними властивостями CSS, ви можете створювати більш надійні, адаптивні та підтримувані таблиці стилів. Хоча підтримка браузерами все ще розвивається, @when
— це функція, яку варто вивчити та включити у свій сучасний робочий процес веб-розробки.
Оскільки веб продовжує розвиватися, оволодіння такими функціями, як @when
, буде важливим для створення захоплюючих, доступних та продуктивних вражень для користувачів у всьому світі. Використовуйте силу умовної стилізації та відкривайте нові можливості у своїй CSS-розробці.