CSS функция if()
calc(), псевдоклассы :has() и :is(), а также универсальные @media запросы, CSS упрощает создание сложных стилей и макетов.В CSS появилась новая функция if(), пока доступная только в Chrome 137 и выше. Это первый шаг к условной логике прямо в стилях.
CSS функция if()
Функция if() позволяет применять стили на основе заданного условия, что упрощает написание отзывчивых и адаптивных дизайнов.
Синтаксис выглядит так:
div {
color: if(
style(<условие>): <значение>;
style(<другое-условие>): <другое-значение>;
else: <значение-по-умолчанию>;
);
}Как видите, в функции if() можно указать несколько условий и соответствующих им стилей. Если ни одно из условий не соответствует, применяется значение else.
Функция style() определяет условие и значение, применяемое, если условие истинно.
Пример использования
Ниже — базовый пример использования конструкции if() в CSS.
<div class="dark">dark</div>
<div class="light">light</div>С помощью условной логики можно применить цвет фона в зависимости от цвета элемента.
div {
color: var(--color);
background-color: if(
style(--color: white): black;
else: pink
);
}
.dark {
--color: black;
}
.light {
--color: white;
}Новая функция условного применения стилей проверяет, установлена ли переменная --color в значение white. Если да, то цветом фона устанавливается black, в противном случае по умолчанию устанавливается pink.
Пример на CodePen:
Более продвинутый пример
Помимо базовых условий, if() отлично подходит для более сложных сценариев — например, при динамической стилизации карточек в зависимости от их статуса.
Полезность if() особенно заметна в ситуациях, когда стили зависят от значений HTML-атрибутов или переменных.
Una Kravets с помощью атрибута data-status динамически изменяет border-color, background-color и grid-column элемента.
<div class="container">
<div class="card" data-status="pending">
</div>
<div class="card" data-status="complete">
</div>
<div class="card" data-status="pending">
</div>
<div class="card" data-status="inactive">
</div>
</div>.card {
--status: attr(data-status type(<custom-ident>));
border: 1px solid;
border-color: if(
style(--status: pending): royalblue;
style(--status: complete): seagreen;
else: gray
);
background-color: if(
style(--status: pending): #eff7fa;
style(--status: complete): #f6fff6;
else: #f7f7f7
);
grid-column: if(
style(--status: pending): 1;
style(--status: complete): 2;
else: 3
);
}CodePen демонстрирующий этот пример.
Поддержка браузерами
На данный момент функция if() поддерживается Chrome (версия 137 и выше). В ближайшее время поддержку могут внедрить и другие браузеры, однако пока следует использовать if() с осторожностью — особенно в продакшене.
Частые вопросы
Что такое функция if() в CSS?
Это новая функция в CSS, позволяющая применять стили в зависимости от заданных условий. Она работает по принципу: если условие выполнено — применить стиль, иначе использовать значение по умолчанию.
Какие браузеры поддерживают CSS-функцию if()?
На момент публикации поддержка есть только в Chrome 137 и браузерах на его основе. Остальные браузеры пока не поддерживают.
Чем функция if() отличается от @media?
@media ориентируется на внешние параметры (ширина экрана и т.п.), а функция if() — на значения CSS-переменных или других условий внутри самого стиля.