Препроцессор Sass

Sass — это метаязык на основе CSS, предназначенный для увеличения уровня абстракции CSS-кода и упрощения файлов каскадных таблиц стилей. Язык Sass имеет два синтаксиса:

  1. sass — отличается отсутствием фигурных скобок, в нём вложенные элементы реализованы с помощью отступов;
  2. SCSS (Sassy CSS) — использует фигурные скобки, как и сам CSS.

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

Преимущества Sass

1. Совместимость с различными версиями CSS, благодаря которой можно использовать любые CSS библиотеки в проекте;

2. Огромное количество разнообразных функций на любой случай жизни. Таким богатым функционалом могут похвастаться немногие CSS препроцессоры;

3. Sass – это один из самых старых CSS препроцессоров, вобравший большой опыт за долгие годы своего существования;

4. Замечательная возможность использовать Sass фреймворки, упрощающие жизнь разработчику. Один из таких фреймворковBourbon;

5. Синтаксис. Можно выбрать один из двух синтаксисов – упрощенный (SASS) и развернутый CSS-подобный (SCSS).

Синтаксис Sass

# SASS - синтаксис отступов

$font-stack:    Helvetica, sans-serif
$primary-color: #333
 
body
  font: 100% $font-stack
  color: $primary-color
# SCSS - синтаксис расширения

$font-stack:    Helvetica, sans-serif;
$primary-color: #333;
 
body {
  font: 100% $font-stack;
  color: $primary-color; 
}

Вложенные правила

Одна из ключевых особенностей Sass — вложенные правила, которые облегчают процесс создания и редактирования вложенных селекторов. Пример:

#header
  background: #FFFFFF

  .error
    color: #FF0000
  
  a
    text-decoration: none
    &:hover
      text-decoration: underline

Будет транслировано в:

#header {
   background: #FFFFFF; 
}
#header .error {
   color: #FF0000; 
}
#header a {
   text-decoration: none; 
}
#header a:hover {
   text-decoration: underline; 
}

Переменные

Sass позволяет работать с переменными. В CSS они обозначаются двойным тире (–), а в препроцессорах знаком доллара ($).

$number: 1;
$color: #ff0000;
$text: "tproger forever.";
$text: "IT forever." !default;
$nothing: null;

Амперсанд

В SCSS используется директива &. Пример:

#p {
  color: black;
  a {
    font-weight: bold;
    &:hover {
      color: red;
    }
  }
}

С помощью символа & можно явно указать, где должен быть вставлен родительский селектор. Результат компиляции Sass (из предыдущего примера) в CSS ниже:

#p {color: black;}
#p a {font-weight: bold;}
#p a:hover {color: red;}

Миксины

Миксины объявляются директивой @mixin. После неё должно стоять имя миксина и, опционально, его параметры, а также блок, содержащий тело миксина.

Например, можно определить миксин flexible(), который далее будет включён, например, в класс .centered-elements следующим образом:

@mixin flexible () {
    display: flex;
    justify-content: center;
    align-items: center;
  }
  
.centered-elements {
    @include flexible ();
    border: 1px solid gray;
  }

Теперь каждый раз после применения класса .centered-elements к HTML-элементу, последний будет преобразован во Flexbox.

Миксины могут также содержать селекторы, в том числе со свойствами. А селекторы могут содержать ссылки на родительский элемент через амперсанд (&).

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

Как и в стандартном CSS, доступны операции сложения, вычитания, умножения и деления, но в отличии от классического CSS синтаксиса, необязательно использовать функцию calc().

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

x==y возвращает true, если x и y равны
x!=y возвращает true, если x и y не равны
x>y возвращает true, если x больше, чем y
x=y возвращает true, если x больше или равно y
x<=y возвращает true, если x меньше или равно y

Создадим миксин, который будет применять свойство padding, если его значение больше значения margin:

@mixin spacing($padding, $margin) {
    @if ($padding > $margin) {
        padding: $padding;
    } @else {
        padding: $margin;
    }
}

.container {
    @include spacing(10px, 20px);
}

Строки

В CSS определено 2 типа строк: с кавычками и без. Sass распознаёт и то, и другое. В итоге можно получить в CSS тот тип строк, который использовали в Sass.

В некоторых случаях можно добавить строки в допустимые значения CSS без кавычек, но только если добавленная строка является завершающим элементом.

p {
    font: 50px Ari + "al"; // Компилируется в 50px Arial
}

Пример ниже демонстрирует, как делать не надо:

p {
    font: "50px" + Arial; // ОШИБКА!
}

Можете складывать строки разных типов, если в них нет пробелов. Пример ниже не будет скомпилирован. Пример:

p:after {
    content: "Верните Линуса " + Торвальдса!; // ОШИБКА!
}

Операторы управления потоками

В SCSS есть функции (fucntion()) и директивы (@directive). Функции обычно заключаются в скобки, следующие сразу за её именем. А директива начинается с символа @.

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

if()

if() — это функция (и иногда основа искусственного интеллекта). Её использование выглядит довольно примитивным: оператор вернёт одно из двух обозначенных в условии значений. Пример:

/* Использование функции if() */
if (true, 1px, 2px) => 1px;
if (false, 1px, 2px) => 2px;

@if

@if — это директива, использующаяся для разветвления на основе условия. Пример:

/* Использование директивы @if */
p {
    @if 1 + 1 == 2 { border: 1px solid;  }
    @if 7 < 5      { border: 2px dotted; }
    @if null       { border: 3px double;  }
}

Директива @for

Директива @for выводит набор стилей заданное число раз. Для каждого повторения используется переменная-счётчик для изменения вывода. Директива @for итерируется 5 раз:

@for $i from 1 through 5 {
    .definition-#{$i} { width: 10px * $i; }
}

Результат компиляции в CSS:

.definition-1 { width: 10px; }
.definition-2 { width: 20px; }
.definition-3 { width: 30px; }
.definition-4 { width: 40px; }
.definition-5 { width: 50px; }

Директива @each

Директива @each устанавливает $var в каждое из значений списка или словаря и выводит содержащиеся в ней стили, используя соответствующее значение $var. Пример:

@each $animal in img1, img2, img3, img4 {
    .#{$animal}-icon {
        background-image: url("/images/#{$animal}.png")
    }
}

Результат компиляции в CSS:

.platypus-icon { 
    background-image: url("/images/img1.png"); 
}
.lion-icon { 
    background-image: url("/images/img2.png"); 
}
.sheep-icon { 
    background-image: url("/images/img3.png"); 
}
.dove-icon { 
    background-image: url("/images/img4.png"); 
}

Директива @while

Директива @while принимает выражение SassScript и циклично выводит вложенные в неё стили, пока выражение вычисляется как true.

Она может быть использована для создания более сложных циклов, чем таких, для которых подходит @for, хотя она бывает необходима довольно редко. Например:

$index: 5;
@while $index > 0 {
    .element-#{$index} { width: 10px * $index; }
    $index: $index - 1;
}

Результат компиляции:

.element-5 { width: 50px; } 
.element-4 { width: 40px; } 
.element-3 { width: 30px; } 
.element-2 { width: 20px; } 
.element-1 { width: 10px; } 

Функции в Sass/SCSS

Используя Sass/SCSS можно использовать функции так же, как и в других языках. Создадим функцию three-hundred-px(), возвращающую 400px.

@function three-hundred-px() {
    @return 400px;
}

.name {
    width: three-hundred-px();
    border: 1px solid gray;
    display: block;
    position: absolute;
}

После применения класса .name ширина элемента будет равна 400 пикселям.

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

2 ответа к “Препроцессор Sass”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

CSS flexbox

CSS flexbox

CSS flexbox (Flexible Box Layout Module) — модуль макета гибкого контейнера — представляет собой способ компоновки элементов, в основе лежит идея оси. Flexbox состоит из

 
Программируемый язык стилей LESS

Программируемый язык стилей LESS

LESS (Leaner Style Sheets, компактная таблица стилей) — это динамический язык стилей, который разработал Alexis Sellier. Он создан под влиянием языка стилей Sass, и, в

 
CSS-фреймворки

CSS-фреймворки

CSS-фреймворки созданы для упрощения работы верстальщика, исключения ошибок при создании проекта и избавления от скучного монотонного написания одного и того же кода. Верстальщики получают продуманные

 
Фреймворк Bootstrap

Фреймворк Bootstrap

Bootstrap (также известен как Twitter Bootstrap) — свободный набор инструментов для создания сайтов и веб-приложений. Включает в себя HTML и CSS-шаблоны оформления для типографики, веб-форм,

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: