Операторы в SASS
В этой статье объясняются операторы в SASS.
Мы объясним операторы в SASS на практических примерах.
YouTube Video
Операторы в SASS
Операторы SASS включают числовые операции, операции сравнения, логические операции и манипуляции со строками.
Арифметические операции (сложение, вычитание, умножение, деление, остаток от деления)
SASS поддерживает стандартные арифметические операции, но деление через / может путаться с CSS-выражением /, поэтому рекомендуется использовать функцию math.div(). Числа могут иметь единицы измерения, и операции возможны только между совместимыми единицами.
Ниже приведены примеры простых арифметических операций и использования модуля math.
1@use "sass:math";
2
3$base: 16px;
4$gutter: 8px;
5
6/* Addition and multiplication (allowed since both units are px) */
7.container {
8 width: $base + $gutter * 3; // -> 40px
9}
10
11/* Use math.div() for division (/ is deprecated and triggers a warning) */
12.half {
13 padding: math.div($base, 2); // -> 8px
14}- Этот код является примером сложения и умножения с единицей измерения
px, а также деления с использованиемmath.div(). - Несовместимые единицы, например
10px + 2em, приведут к ошибке или неожиданным результатам. Унифицируйте единицы измерения или используйте функцииunit()иunitless().
Обработка и автоматическое преобразование единиц измерения
SASS обрабатывает числа с единицами измерения, а правила получения единиц результата соответствуют общим физическим законам. Например, px/px становится без единицы измерения. Будьте внимательны при работе с единицами, используя функцию unit() или после применения math.div().
Ниже приведены примеры того, как обрабатывать смешивание значений с единицами измерения и без них.
1$width: 100px;
2$ratio: 0.5;
3
4.box {
5 /* Multiply width by a ratio (multiplying by a unitless value is fine) */
6 width: $width * $ratio; // -> 50px
7}
8
9/* If you want to remove the unit, combine it with math.div() for the operation */- Умножение значений с единицами и без них работает как ожидается, однако при делении стоит обратить внимание на итоговую единицу измерения (или её отсутствие).
Операторы сравнения (==, !=, <, >, <=, >=)
В SASS есть операторы сравнения, которые можно использовать для ветвления в условных выражениях (@if) и миксинах. Сравнение сложных типов, таких как цвета и списки, происходит по собственным правилам. Обратите внимание, что сравнение цветов зависит от цветового пространства.
Ниже приведён пример сравнения двух чисел и условного оформления стилей.
1$breakpoint: 768px;
2
3.container {
4 @if $breakpoint >= 768px {
5 max-width: 1200px;
6 } @else {
7 max-width: 100%;
8 }
9}- Операторы сравнения могут сочетаться с
@ifдля создания адаптивных и условных правил стилей.
Логические операции (and, or, not)
В SASS поддерживаются and, or и not. Используйте and/or для объединения нескольких условий. Приоритет и порядок вычисления можно явно задать с помощью скобок.
Ниже приведён пример обработки сложных условий с использованием логических операторов.
1$mobile: false;
2$logged-in: true;
3
4.notice {
5 @if $logged-in and not $mobile {
6 display: block;
7 } @else {
8 display: none;
9 }
10}- Приоритет
andиorможно явно обозначить с помощью скобок. Для сложных условий использование скобок помогает сохранить читаемость и надёжность.
Операции со строками — конкатенация и интерполяция
В SASS строки можно объединять с помощью оператора + или интерполяции #{}. Результат работы оператора + зависит от того, стоит ли кавычка у левой строки, поэтому надёжнее использовать предсказуемую интерполяцию #{}.
Ниже приведены примеры конкатенации и интерполяции.
1@use "sass:string";
2
3$base: "icon-";
4$variant: string.unquote("arrow");
5
6.icon {
7 /* Concatenation using + (old style) */
8 &--old { content: $base + $variant; } // -> icon-arrow
9
10 /* Interpolation is more reliable */
11 &--new { content: "#{$base}#{$variant}"; } // -> icon-arrow
12}
13
14/* Interpolation is useful for generating selector names, URLs, or animation names */
15@keyframes slide-#{$variant} {
16 from { transform: translateX(0); }
17 to { transform: translateX(100%); }
18}- Использование интерполяции
#{}позволяет избежать проблем с кавычками и нежелательными пробелами.
Арифметика над цветами (устарела)
Ранее SASS поддерживал «цветовую арифметику», которая позволяла прибавлять или вычитать числа из цветов. Однако цветовая арифметика устарела, и для работы с цветами теперь следует использовать функции из модуля sass:color.
Ниже приведены примеры, показывающие, что прямая арифметика над цветами устарела, и предлагаются альтернативные методы.
1/* Deprecated (old code example – no longer works or recommended) */
2/* background: $base-color + 10; */
3
4@use "sass:color";
5
6$base: #336699;
7
8.bg {
9 /* For example, to increase lightness, use color.scale() or color.adjust() */
10 /* Safe manipulation based on color space */
11 background: color.scale($base, $lightness: 20%);
12 /* Or make it lighter by mixing white */
13 background: color.mix(white, $base, 20%);
14}- Если вы хотите работать с цветами, используйте функции из модуля
sass:color.
Скобки и приоритет операторов
Используйте скобки для контроля порядка вычисления в операциях. Скобки всегда вычисляются раньше операций вне них. Используйте скобки в сложных выражениях для повышения читаемости.
Ниже приведены примеры уточнения порядка вычисления с помощью скобок.
1@debug (1 + 2) * 3; // 9
2@debug 1 + 2 * 3; // 7 (multiplication first)- Как и в математике, действуют правила приоритета, поэтому используйте скобки, чтобы вычисления происходили в нужном порядке.
Резюме
При использовании операторов в SASS важно писать код с учётом совместимости в будущем и читаемости. В сложных выражениях уточняйте порядок вычислений с помощью скобок и уделяйте внимание читаемости кода.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.