Статьи

Основы Sass: Операторы

Sass довольно популярен и, как правило, является важным инструментом для каждого фронт-энда разработчика. Sitepoint уже опубликовал несколько вводных статей об этом языке препроцессора CSS.

В этой статье мы продолжим изучение Sass, углубившись в его работу.

Примечание: примеры будут основаны на Ruby Sass. Я также предлагаю вам взглянуть на статью Хьюго , в которой обсуждается Sass-совместимость.

Оператор присваивания

Sass использует оператор двоеточия (:) для определения переменной. Например:

$main-color: lightgray;

Арифметические Операторы

Арифметические операторы используются для выполнения стандартных арифметических операций.

Вот арифметические операторы, которые поддерживает Sass:

оператор Описание
+ прибавление
Вычитание
* умножение
/ разделение
% остаток

Как мы увидим в следующем разделе, оператор сложения (+) также может быть использован для объединения строк.

Обратите внимание, что операторы выше работают только для номеров с совместимыми единицами:

 h2 { font-size: 5px + 2em; // error incompatible units font-size: 5px + 2; // 7px } 

Более того, умножение двух чисел одного и того же блока вместе приведет к неправильному CSS:

 h2 { font-size: 5px * 2px; // invalid CSS } 

Как вы, возможно, знаете, символ / является частью сокращенных свойств CSS. Например:

 font: 16px / 24px Arial sans-serif; background: url("http://example.com") no-repeat fixed center / cover; 

Но, как уже упоминалось, Sass может использовать косую черту ( / ) для выполнения операции деления.

Итак, давайте посмотрим, как Sass понимает этот символ:

 h2 { font-size: 16px / 24px // Outputs as CSS font-size: (16px / 24px) // Uses parentheses, does division font-size: #{$base-size} / #{$line-height}; // Uses interpolation, outputs as CSS font-size: $base-size / $line-height // Uses variables, does division opacity: random(4) / 5; // Uses a function, does division padding-right: 2px / 4px + 3px // Uses an arithmetic expression, does division } 

Sass заботится о порядке операций (приоритет оператора). Например, вот некоторые общие правила:

  • Выражения в скобках оцениваются в первую очередь.
  • Операторы умножения ( * ) и деления ( / ) имеют более высокий приоритет по сравнению с операторами сложения ( + ) и вычитания ( - ).

Пример их показан ниже:

 h2 { width: 3px * 5 + 5px; // 20px width: 3 * (5px + 5px); // 30px width: 3px + (6px / 2) * 3; // 12px } 

Операторы равенства

Операторы равенства используются в условных выражениях, чтобы проверить, являются ли два значения одинаковыми или нет. На основании их оценки они возвращают Boolean значение.

Sass поддерживает следующие операторы равенства:

оператор Описание
== Равно
знак равно Не равно

Они поддерживаются для всех типов.

Давайте посмотрим на два примера.

В нашем первом примере мы используем оператор равенства ( == ), чтобы проверить тип аргумента $font и вывести соответствующее сообщение. Вот код:

 @mixin font-fl($font){ &:after { @if(type-of($font) == string) { content: 'My font is: #{$font}.'; } @else { content: 'Sorry, the argument #{$font} is a #{type-of($font)}.'; } } } h2{ @include font-fl(sans-serif); } 

Это компилируется в:

 h2:after { content: 'My font is: sans-serif.'; } 

Во втором примере мы определяем список и проверяем длину его элементов. Используя оператор модуля (остаток) ( % ), мы оцениваем их длину и, наконец, устанавливаем свойство color элемента h2 . Ниже приведен соответствующий код:

 $list: "tomato", "lime", "lightblue"; @mixin fg-color($property) { @each $item in $list { $color-length: str-length($item); @if( $color-length % 2 != 0 ) { #{$property}: unquote($item); } } } h2 { @include fg-color(color); } 

И сгенерированный CSS:

 h2 { color: lightblue; } 

Стоит отметить, что Sass не поддерживает оператор строгого равенства ( === ), который вы найдете на других языках программирования. Однако, как вы заметите в следующем примере, Sass обрабатывает оператор равенства так же, как другие языки обрабатывают оператор строгого равенства.

 // comparison in Javascript ("5" == 5) // returns true ("5" === 5) // returns false // comparison in Sass ("5" == 5) // returns false (20px == 20) // returns true (this does not work in LibSass) 

Операторы сравнения

Подобно операторам равенства, операторы сравнения используются для сравнения чисел.

Sass поддерживает следующие операторы сравнения:

оператор Описание
> Больше чем
> = Больше или равно
Меньше, чем
Меньше или равно

Вот простой пример:

 $padding: 50px; h2 { @if($padding <= 20px) { padding: $padding; } @else { padding: $padding / 2; } } 

И скомпилированный CSS:

 h2 { padding: 25px; } 

Логические Операторы

Логические операторы позволяют нам тестировать несколько условий в условном выражении.

Sass поддерживает следующие логические операторы:

оператор условия Описание
и х и у true если x и y true
или х или у true если x или y true
не Икс true если х не true

Давайте объясним их на примере.

Мы определяем карту списка, которая содержит состояния кнопок в качестве ключей и соответствующие цвета в качестве значений. Затем мы создаем условие для оценки его длины. Если все условие имеет значение true , мы применяем background-color к элементу h2 . Ниже приведен наш исходный код Sass:

 $list-map: (success: lightgreen, alert: tomato, info: lightblue); @mixin button-state($btn-state) { @if (length($list-map) > 2 or length($list-map) < 5) { background-color: map-get($list-map, $btn-state); } } .btn { @include button-state(success); } 

И сгенерированный CSS:

 .btn { background-color: lightgreen; } 

Как мы видим, наше условие возвращает true . Это происходит потому, что длина карты равна 3 и, следовательно, вложенные условия ( length($list-map) > 2length($list-map) ) return true .

Обратите внимание на различия, если мы изменим выражение:

 @if (length($list-map) > 2 or not (length($list-map) == 3)) {...} // returns true, applies background-color @if (length($list-map) > 2 and not (length($list-map) == 3)) {...} // returns false, doesn't apply background-color 

Строковые операции

Как мы уже обсуждали, оператор сложения ( + ) предоставляет нам способ объединения строк.

Вот основные правила:

  • Если мы добавим строку в кавычках (это сказано перед оператором + ) в строку без кавычек, результатом будет строка в кавычках.
  • Если мы добавим строку без кавычек (это сказано перед оператором + ) в строку в кавычках, результатом будет строка без кавычек.

Чтобы продемонстрировать это, мы рассмотрим следующий пример. Наш код Sass показан ниже:

 @mixin string-concat { &:after { content: "My favorite language is " + Sass; font: Arial + " sans-serif"; } } h2 { @include string-concat; } 

Соответствующий CSS:

 h2:after { content: "My favorite language is Sass"; font: Arial sans-serif; } 

Более того, мы можем помещать динамические значения в наши строки, используя преимущества интерполяции (мы уже использовали это!). Обратите внимание, что null значения не печатаются. Вот пример, похожий на последний:

 @mixin string-concat ($language) { &:after { content: "My favorite language is #{$language}"; // second way without using interpolation //content: "My favorite language is " + $language; } } h2 { @include string-concat(Sass); } 

Полученный CSS:

 h2:after { content: "My favorite language is Sass"; } 

Операции с цветом

Во втором разделе мы проанализировали арифметические операторы. Одна интересная вещь заключается в том, что мы также можем использовать их для получения значений цвета.

Давайте посмотрим.

Вот наш код Sass:

 h2 { color: #468499 + #204479; } 

И сгенерированный CSS:

 h2 { color: #66c8ff; } 

Итак, как работают эти цветовые операции? Sass выполняет соответствующий расчет по парам. Это значит:

46+20=66 (red color) , 84+44=c8 (green color) и 99+79=ff (blue color) .

Помните, что шестнадцатеричные значения представляют собой комбинацию красного, зеленого и синего цветов. Кроме того, для их представления используются цифры 0-9 и буквы AF.

Ниже приведен наш последний пример. Единственное отличие от предыдущего состоит в том, что теперь мы используем функцию rgba для представления цветов.

Наш Sass:

 h2 { color: rgba(70, 132, 153, 1) + rgba(32, 68, 121, 1); // error alpha channels must be equal color: rgba(70, 132, 153, .9) + rgba(32, 68, 121, .7); } 

Обратите внимание, что при использовании цветовых функций rgba или hsla цвета должны иметь одинаковое альфа-значение. В противном случае Sass выдаст ошибку.

Вывод

В этой статье я объяснил операторы Sass. Как вы видели, некоторые из них похожи на операторы, поддерживаемые другими языками программирования. Надеюсь, эта статья помогла вам улучшить свои навыки в этом удивительном языке. И последнее, но не менее важное: на этой странице Sassmeister вы найдете все примеры статей .