Русский

Изучите правило CSS @when, мощную функцию для условного применения стилей на основе поддержки браузера, размера экрана и многого другого. Практические примеры.

CSS @when Правило: Мастерское Применение Условных Стилизаций

Мир CSS постоянно развивается, предлагая разработчикам более мощные и гибкие способы стилизации веб-страниц. Одной из таких набирающих популярность функций является правило @when, также известное как Модуль Условных Правил CSS, Уровень 1. Это правило позволяет применять CSS-стили условно, на основе выполнения определенных условий. Это мощный инструмент для адаптивного дизайна, обнаружения функций и создания более надежных и адаптируемых таблиц стилей.

Что такое Правило CSS @when?

Правило @when — это условное at-правило в CSS, которое позволяет определять стили, применяемые только при истинности определенных условий. Думайте о нем как об if-утверждении для вашего CSS. В отличие от медиа-запросов, которые в основном фокусируются на характеристиках области просмотра (размер экрана, ориентация и т. д.), @when предоставляет более общий и расширяемый способ обработки условной стилизации. Оно расширяет существующие условные at-правила, такие как @supports и @media.

Ключевые Преимущества Использования @when

Синтаксис Правила @when

Базовый синтаксис правила @when выглядит следующим образом:
@when <condition> {
  /* CSS-правила для применения, когда условие истинно */
}

<condition> может быть любым допустимым булевым выражением, которое оценивается как истинное или ложное. Это выражение часто включает:

Практические Примеры @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 применяются только тогда, когда ширина экрана находится в пределах от 768px до 1023px (типичный размер планшета). Это обеспечивает четкий и лаконичный способ определения стилей для конкретных диапазонов области просмотра.

Примечание по Интернационализации: Адаптивный дизайн критически важен для глобальной аудитории. Учитывайте различные размеры экранов в разных регионах. Например, использование мобильных устройств выше в некоторых странах, что делает мобильный дизайн еще более важным.

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. Если он поддерживается, мы применяем стили на основе сетки к .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 будет иметь размытый фон только тогда, когда ширина экрана составляет не менее 768px, и браузер поддерживает свойство backdrop-filter. Это позволяет создавать визуально привлекательные эффекты в современных браузерах, избегая при этом потенциальных проблем с производительностью или ошибок рендеринга в старых.

4. Стилизация на Основе Пользовательских Свойств (CSS Переменных)

@when также может использоваться совместно с CSS Custom Properties (также известными как 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. Стилизация на Основе Атрибутов Данных

Вы также можете использовать @when с атрибутами данных для стилизации элементов на основе их значений данных. Это может быть полезно для создания динамических интерфейсов, где элементы меняют внешний вид в зависимости от взаимодействия пользователя или обновлений данных.

Например, предположим, у вас есть список задач, и каждая задача имеет атрибут 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 — это мощное дополнение к инструментарию CSS, предлагающее разработчикам более гибкий и выразительный способ условного применения стилей. Комбинируя его с медиа-запросами, запросами функций и CSS Custom Properties, вы можете создавать более надежные, адаптируемые и поддерживаемые таблицы стилей. Хотя поддержка браузерами все еще развивается, @when — это функция, которую стоит изучить и внедрить в ваш современный рабочий процесс веб-разработки.

Поскольку веб продолжает развиваться, овладение такими функциями, как @when, будет необходимым для создания увлекательных, доступных и производительных интерфейсов для пользователей по всему миру. Примите силу условной стилизации и откройте новые возможности в вашей CSS-разработке.