Основы Sass

Прежде чем вы сможете использовать Sass, вам необходимо настроить его в своем проекте. Если вы хотите просто просмотреть здесь, продолжайте, но мы рекомендуем сначала установить Sass. [Перейти сюда]Go here, если вы хотите узнать, как все настроить.

Препроцессинг

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

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

Самый простой способ сделать это - в вашем терминале. После установки Sass вы можете скомпилировать свой Sass в CSS с помощью команды sass. Вам нужно будет указать Sass, из какого файла строить и куда выводить CSS. Например, запуск sass input.scss output.css из вашего терминала потребует одного файла Sass, input.scss, и скомпилирует этот файл в output.css.

Вы также можете просматривать отдельные файлы или каталоги с флагом --watch. Флаг просмотра указывает Sass следить за вашими исходными файлами на предмет изменений и повторно компилировать CSS каждый раз, когда вы сохраняете свой Sass. Если вы хотите просмотреть (а не вручную создавать) файл input.scss, вы просто добавите флаг просмотра в свою команду, например:

sass --watch input.scss output.css

Вы можете просматривать и выводить в каталоги, используя пути к папкам в качестве ввода и вывода и разделяя их двоеточием. В этом примере:

sass --watch app/sass:public/stylesheets

Sass будет отслеживать все файлы в папке app/sass на предмет изменений и компилировать CSS в папку public/stylesheets.


Переменные

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

SCSS Syntax

$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}

Sass Syntax

$font-stack: Helvetica, sans-serif
$primary-color: #333

body
  font: 100% $font-stack
  color: $primary-color

CSS Output

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



Когда Sass обрабатывается, он принимает переменные, которые мы определяем для $font-stack и $primary-color, и выводит обычный CSS с нашими значениями переменных, помещенными в CSS. Это может быть чрезвычайно эффективным при работе с фирменными цветами и поддержании их единообразия на всем сайте.


Вложенность

При написании HTML вы, вероятно, заметили, что он имеет четкую вложенную и визуальную иерархию. CSS, с другой стороны, этого не делает.

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

Имея это в виду, вот пример некоторых типичных стилей для навигации по сайту:

SCSS Syntax

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li { display: inline-block; }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

Sass Syntax

nav
  ul
    margin: 0
    padding: 0
    list-style: none

  li
    display: inline-block

  a
    display: block
    padding: 6px 12px
    text-decoration: none


CSS Output

nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}
nav li {
  display: inline-block;
}
nav a {
  display: block;
  padding: 6px 12px;
  text-decoration: none;
}


Вы заметите, что селекторы ul, li и a вложены в селектор nav. Это отличный способ организовать ваш CSS и сделать его более читабельным.


Составляющие

Вы можете создавать частичные файлы Sass, содержащие небольшие фрагменты CSS, которые можно включать в другие файлы Sass. Это отличный способ модулировать ваш CSS и облегчить его поддержку. Частичный файл - это Sass-файл, названный с подчеркиванием. Вы можете назвать его, например, _partial.scss. Подчеркивание дает Sass знать, что файл является только частичным и что его не следует генерировать в файл CSS. Частичные файлы Sass используются с помощью правила @use.


Модули

Совместимость:
Dart Sass
since 1.23.0
LibSass
Ruby Sass

В настоящее время только Dart Sass поддерживает @use. Пользователи других реализаций должны использовать правило @import rule вместо этого.

Вам не нужно записывать весь свой Sass в один файл. Вы можете разделить его, как хотите, с помощью правила @use. Это правило загружает другой файл Sass как модуль, что означает, что вы можете ссылаться на его переменные, миксины и функции в вашем файле Sass с пространством имен на основе имени файла. Использование файла также будет включать созданный им CSS в ваш скомпилированный вывод!

SCSS Syntax

// _base.scss
$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}
// styles.scss
@use 'base';

.inverse {
  background-color: base.$primary-color;
  color: white;
}

Sass Syntax

// _base.sass
$font-stack: Helvetica, sans-serif
$primary-color: #333

body
  font: 100% $font-stack
  color: $primary-color

// styles.sass
@use 'base'

.inverse
  background-color: base.$primary-color
  color: white

CSS Output

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

.inverse {
  background-color: #333;
  color: white;
}








Обратите внимание, что мы используем @use 'base'; в файле styles.scss. Когда вы используете файл, вам не нужно указывать расширение файла. Sass умен и разберется за вас.


Примеси (Миксины)

Некоторые вещи в CSS писать немного утомительно, особенно с CSS3 и множеством существующих префиксов поставщиков. Миксин позволяет вам создавать группы объявлений CSS, которые вы хотите повторно использовать на своем сайте. Это помогает сохранить ваш Sass очень СУХИМ. Вы даже можете передавать значения, чтобы сделать ваш миксин более гибким. Вот пример для theme.

SCSS Syntax

@mixin theme($theme: DarkGray) {
  background: $theme;
  box-shadow: 0 0 1px rgba($theme, .25);
  color: #fff;
}

.info {
  @include theme;
}
.alert {
  @include theme($theme: DarkRed);
}
.success {
  @include theme($theme: DarkGreen);
}


Sass Syntax

@mixin theme($theme: DarkGray)
  background: $theme
  box-shadow: 0 0 1px rgba($theme, .25)
  color: #fff


.info
  @include theme

.alert
  @include theme($theme: DarkRed)

.success
  @include theme($theme: DarkGreen)



CSS Output

.info {
  background: DarkGray;
  box-shadow: 0 0 1px rgba(169, 169, 169, 0.25);
  color: #fff;
}

.alert {
  background: DarkRed;
  box-shadow: 0 0 1px rgba(139, 0, 0, 0.25);
  color: #fff;
}

.success {
  background: DarkGreen;
  box-shadow: 0 0 1px rgba(0, 100, 0, 0.25);
  color: #fff;
}

Чтобы создать миксин, вы используете директиву @mixin и даете ему имя. Мы назвали наш миксин theme. Мы также используем переменную $theme внутри круглых скобок, так что мы можем передать theme, какую захотим. После того, как вы создадите свой миксин, вы можете использовать его как объявление CSS, начиная с @include, за которым следует имя миксина.


Расширение/Наследование

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

SCSS Syntax

/* Этот CSS будет выведен, потому что %message-shared расширен. */
%message-shared {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

// Этот CSS не будет выводиться, потому что %equal-heights никогда не расширяется.
%equal-heights {
  display: flex;
  flex-wrap: wrap;
}

.message {
  @extend %message-shared;
}

.success {
  @extend %message-shared;
  border-color: green;
}

.error {
  @extend %message-shared;
  border-color: red;
}

.warning {
  @extend %message-shared;
  border-color: yellow;
}

Sass Syntax

/* Этот CSS будет выведен, потому что %message-shared расширен. */
%message-shared
  border: 1px solid #ccc
  padding: 10px
  color: #333


// Этот CSS не будет выводиться, потому что %equal-heights никогда не расширяется.
%equal-heights
  display: flex
  flex-wrap: wrap


.message
  @extend %message-shared


.success
  @extend %message-shared
  border-color: green


.error
  @extend %message-shared
  border-color: red


.warning
  @extend %message-shared
  border-color: yellow

CSS Output

@charset "UTF-8";
/* Этот CSS будет выведен, потому что %message-shared расширен. */
.message, .success, .error, .warning {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

.success {
  border-color: green;
}

.error {
  border-color: red;
}

.warning {
  border-color: yellow;
}












Приведенный выше код сообщает .message, .success, .error и .warning вести себя так же, как %message-shared. Это означает, что везде, где появляется %message-shared shows up, .message, .success, .error и .warning тоже будут. Магия происходит в сгенерированном CSS, где каждый из этих классов получит те же свойства CSS, что и %message-shared. Это поможет вам избежать написания нескольких имен классов в элементах HTML.

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

Обратите внимание, что %equal-heights не создается, потому что %equal-heights никогда не расширяется.


Операторы

Выполнение математических расчетов в вашем CSS очень полезно. В Sass есть несколько стандартных математических операторов, таких как +, -, *, math.div() и %. В нашем примере мы собираемся выполнить простую математику, чтобы вычислить ширину article и aside.

SCSS Syntax

@use "sass:math";

.container {
  display: flex;
}

article[role="main"] {
  width: math.div(600px, 960px) * 100%;
}

aside[role="complementary"] {
  width: math.div(300px, 960px) * 100%;
  margin-left: auto;
}

Sass Syntax

@use "sass:math"

.container
  display: flex

article[role="main"]
  width: math.div(600px, 960px) * 100%

aside[role="complementary"]
  width: math.div(300px, 960px) * 100%
  margin-left: auto



CSS Output

.container {
  display: flex;
}

article[role="main"] {
  width: 62.5%;
}

aside[role="complementary"] {
  width: 31.25%;
  margin-left: auto;
}


Мы создали очень простую плавную сетку на основе 960 пикселей. Операции в Sass позволяют нам делать что-то вроде того, чтобы брать значения пикселей и без особых проблем преобразовывать их в проценты.