Функция `if` в SASS
В этой статье объясняется функция if в SASS.
Мы шаг за шагом разберём всё: от основ функции if до продвинутых приёмов.
YouTube Video
Функция if в SASS
Функция if() — это простая условная функция в SASS, которая возвращает одно из двух значений в зависимости от булевого условия. Она похожа на тернарный оператор JavaScript.
Синтаксис
Синтаксис следующий:.
1// if(condition, trueValue, falseValue)- Если
conditionистинно, возвращаетсяtrueValue; если ложно —falseValue.
Основное использование
Например, можно использовать if() для изменения фона и цвета текста в зависимости от того, тёмная тема или светлая.
Пример кода
1$theme: "dark";
2
3$background-color: if($theme == "dark", black, white);
4$text-color: if($theme == "dark", white, black);
5
6body {
7 background-color: $background-color;
8 color: $text-color;
9}- Если переменная
$themeравна"dark", фон будет чёрным с белым текстом; если"light"— фон будет белым с чёрным текстом.
Сгенерированный CSS
1body {
2 background-color: black;
3 color: white;
4}- Поскольку переменная
$theme—"dark", фон чёрный с белым текстом.
Различия между оператором @if и функцией if()
В Sass есть оператор @if и функция if() для условного ветвления, но они используются для разных целей.
Пример кода
1$theme: "dark";
2
3// `@if` statement: Compile-time branching (syntax level)
4$background-color: null;
5@if $theme == "dark" {
6 $background-color: black;
7} @else if $theme == "light" {
8 $background-color: white;
9} @else {
10 $background-color: gray;
11}
12
13// `if()` function: Returns a value (expression level)
14$text-color: if($theme == "dark", white, black);
15
16body {
17 background-color: $background-color;
18 color: $text-color;
19}- Оператор
@ifуправляет тем, какой код будет сгенерирован при компиляции Sass. - Напротив, функция
if()возвращает значение и используется для динамического выбора значений внутри выражений.
Сгенерированный CSS
1body {
2 background-color: black;
3 color: white;
4}- В этом примере, поскольку значение
$theme—"dark", применяется черный фон и белый цвет текста. - Два основных различия: оператор
@ifуправляет структурой, а функцияif()возвращает значение.
Использование вложенных функций if
Когда требуется сложное ветвление, можно вкладывать функции if.
Пример кода
1$theme: "custom";
2$custom-color: blue;
3
4$background-color: if(
5 $theme == "dark",
6 black,
7 if(
8 $theme == "light",
9 white,
10 $custom-color
11 )
12);
13
14body {
15 background-color: $background-color;
16}- Если
$theme—"dark", возвращается чёрный; если"light"— белый; иначе возвращается значение по умолчанию ($custom-color).
Сгенерированный CSS
1body {
2 background-color: blue;
3}- Так как переменная
$theme—custom, цвет фона — синий.
Практические случаи использования
Переключение темы
Ниже приведён пример, который изменяет стили кнопки в зависимости от темы.
1$theme: "dark";
2
3.button {
4 background-color: if($theme == "dark", #333, #fff);
5 color: if($theme == "dark", #fff, #333);
6 border: 1px solid if($theme == "dark", #444, #ccc);
7}- Этот код — пример условий в SASS, который переключает цвета фона, текста и границы кнопки в зависимости от значения переменной
$theme. Функцияif()используется для динамической установки стилей для тёмной и светлой темы.
Сгенерированный CSS
1.button {
2 background-color: #333;
3 color: #fff;
4 border: 1px solid #444;
5}- Переключая тему, можно единообразно менять общий дизайн.
Продвинутый пример: динамическая настройка контрастности цветов
Рассмотрим пример, который автоматически выбирает цвет текста в зависимости от цвета фона.
Пример кода
1@use "sass:color";
2
3$background-color: #000;
4
5$text-color: if(
6 color.channel($background-color, "lightness", $space: hsl) > 50%,
7 black,
8 white
9);
10
11body {
12 background-color: $background-color;
13 color: $text-color;
14}- Функция
color.channel()используется для получения светлоты фона (lightness). Если это значение больше50%, выбирается черный; если меньше — белый как цвет текста, автоматически оптимизируя контраст с фоном.
Сгенерированный CSS
1body {
2 background-color: #000;
3 color: white;
4}- Используя функцию
if(), можно реализовать гибкие стили с учетом доступности дизайна, например регулировку контраста.
Совместное использование с @function
Использование функции if внутри @function обеспечивает ещё более гибкое проектирование стилей.
Пример кода
1@function theme-color($theme, $type) {
2 @return if(
3 $theme == "dark",
4 if(
5 $type == "background",
6 black,
7 white
8 ),
9 if(
10 $type == "background",
11 white,
12 black
13 )
14 );
15}
16
17body {
18 background-color: theme-color("dark", "background");
19 color: theme-color("dark", "text");
20}- Этот код демонстрирует использование
if()внутри@functionдля возврата подходящих цветов в зависимости от темы и типа цвета. Это позволяет создавать согласованный и многократно используемый дизайн стилей для каждой темы.
Сгенерированный CSS
1body {
2 background-color: black;
3 color: white;
4}- Создавая и используя вспомогательные функции, которые используют
if(), можно повысить поддерживаемость всего проекта.
Примечания
-
Функцию
ifнельзя использовать с динамическими значениями Поскольку сам CSS — статический язык, функцияifопределяет значения на этапе компиляции SASS. Для условной логики во время выполнения необходимо использовать JavaScript. -
Отдавайте приоритет читаемости Поскольку вложенные функции
ifмогут становиться сложными и ухудшать читаемость, вы можете при необходимости использовать SASS@mixinи@functionдля организации кода.
Заключение
Функция if в SASS — мощный инструмент, возвращающий разные значения в зависимости от условий. Она полезна не только для простых условий, но и во многих сценариях, например при переключении тем и динамической настройке стилей. Однако при работе со сложными условиями следите за читаемостью и используйте @mixin и @function для повышения сопровождаемости.
Освоив функцию if, вы сможете проектировать стили более эффективно и гибко.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.