Статьи

4 Sass функции, которые вы, возможно, не пробовали

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

1. CSS и встроенные комментарии

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

Sass позволяет добавлять обычные комментарии CSS с /* в начале и */ в конце. Подобные комментарии могут занимать несколько строк и останутся без изменений в окончательно сгенерированном CSS. Итак, для следующих комментариев Sass:

 a { color: #ccc; &.halloween { /* This is for seasonal links */ color: #ff8c00; } } 

Сгенерированный CSS будет выглядеть так:

 a { color: #ccc; } a.halloween { /* This is for seasonal links */ color: #ff8c00; } 

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

Итак, Sass-файл с комментариями выглядит так:

 a { color: #ccc; &.halloween { // Chosen colour below after trying #ff8d00, #ff8b00 & ff8a00. /* This is for seasonal links */ color: #ff8c00; } } 

Будет по-прежнему генерировать чистый CSS без комментариев к истории цветов:

 a { color: #ccc; } a.halloween { /* This is for seasonal links */ color: #ff8c00; } 

2. Локальные и глобальные переменные

Управление областью действия может быть одним из самых сложных аспектов работы на любом языке, и Sass не является исключением. Sass позволяет вам определять как глобальные, так и локальные переменные и при необходимости переопределять их.

Обычное использование глобальных переменных Sass — это создание имен цветов и семантическое использование этих цветов. Например, в верхней части основного файла Sass вы можете определить свой $color_success в качестве цвета акцента, который будет использоваться для успешных операций, поэтому он может наследоваться и изменяться любым числом селекторов, которые полагаются на него.

 //defining a global success color $color_success: #090; .state_success { color: lighten($color_success, 50%); background-color: $color_success; } 

Это сгенерирует CSS следующим образом:

 .state_success { color: #9f9; background-color: #090; } 

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

 .state_success_particular { //overriding the global success color locally $color_success: #900; color: lighten($color_success, 50%); background-color: $color_success; } 

Следующий селектор в вашем сгенерированном CSS будет отражать новое значение для $color_success :

 .state_success_particular { color: #f99; background-color: #900; } 

В этом случае вы только изменили значение вашей глобальной переменной в локальной области действия этого селектора. Любой другой селектор, который вы напишите после закрытия этой области, будет использовать исходное глобальное значение. Если вместо этого вы изменили переменную вне селектора, вот так:

 //Overriding earlier globals globally (a bad idea) $color_success: #900; .state_success_particular { color: lighten($color_success, 50%); background-color: $color_success; } 

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

3. Заполнители для расширений

Поддержание чистоты исходного кода Sass — это отличная возможность для разработки. Sass позволяет вам вкладывать селекторы, чтобы помочь устранить повторяющийся код, но цена заключается в том, что каждый уровень вложенности приводит к большему количеству селекторов в конечном CSS. Определение @mixin также отлично @include для @include -ing предопределенных подмножеств стилей в несколько селекторов, но это может привнести избыточность и вес в ваш окончательный CSS. Хотя оба эти знакомых метода полезны, с ними нужно обращаться осторожно, если вы хотите, чтобы ваши CSS-файлы были небольшими и эффективными.

К счастью, Sass также позволяет разработчикам расширять существующие селекторы, применяя все определения стилей от одного селектора к другому с помощью простой команды @extend . Например, следующий Sass позволяет нескольким селекторам использовать одни и те же стили в селекторе .prominent :

 .prominent { font-style: bold; font-size: 1.5rem; } .important { color: #900; @extend .prominent; } .notice { color: #090; @extend .prominent; } 

чтобы создать этот CSS:

 .prominent, .important, .notice { font-style: bold; font-size: 1.5rem; } .important { color: #900; } .notice { color: #090; } 

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

 %prominent { font-style: bold; font-size: 1.5rem; } %subtle { font-style: regular; font-size: 0.75rem; } .important { color: #900; @extend %prominent; } .notice { color: #090; @extend %prominent; } 

генерирует следующий CSS без видимых ссылок на %prominent или %subtle , кроме как в стилях, которые переносят:

 .important, .notice { font-style: bold; font-size: 1.5rem; } .important { color: #900; } .notice { color: #090; } 

Фактически, в этом случае мы никогда не использовали стиль %subtle placeholder, и он не влиял на размер или селекторы в нашем сгенерированном CSS.

Следует отметить одну вещь, касающуюся расширения как стилей, так и стилей заполнителей, когда они используют глобальные переменные, — они делают свое дело, добавляя селекторы в базовый стиль, а не дублируя код CSS. Это означает, что значение переменных, которые действовали, когда был определен исходный стиль источника, будет перенесено, даже если новый стиль переопределит переменную локально. Например, следующий Sass с глобальной переменной:

 $color_highlight: #090; %prominent { color: $color_highlight; font-style: bold; font-size: 1.5rem; } .important { @extend %prominent; } .notice { $color_highlight: #900; @extend %prominent; } 

игнорирует переопределение в .notice и использует только исходное глобальное значение при генерации CSS:

 .important, .notice { color: #090; font-style: bold; font-size: 1.5rem; } 

4. Амперсанды для родительского селектора

Одна из основных функций Sass, о которой узнают разработчики, — это амперсанд ( & ). Когда вы добавляете амперсанд к параметру во вложенном селекторе Sass, этот селектор присоединяется к родительскому селектору, а не вкладывается под ним. Это немедленно полезно для селекторов псевдоклассов, таких как :hover или ::after этого их необходимо связать со селектором. Например, это Sass:

 .hoverable { color: #fff; &:hover { color: #ff0; } } 

приводит к следующим CSS-селекторам:

 .hoverable { color: #fff; } .hoverable:hover { color: #ff0; } 

Крутая вещь об амперсандах состоит в том, что они не только должны быть в начале определения вложенного стиля. Где бы вы ни добавляли амперсанд в определения селектора Sass, он интерпретируется как родительская область определения текущего стиля. Иногда вам нужно определить стиль, который принимает контекст существующего стиля, но применяется только в особом случае. Например, что если нам понадобится другая обработка границ для нашего элемента .hoverable когда родительский класс — .special :

 .hoverable { color: #fff; &:hover { color: #ff0; } } .special .hoverable { border: 1px solid #f00; } 

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

Но с амперсандом Sass позволяет нам делать то же самое, не выходя за рамки селектора .hoverable :

 .hoverable { color: #fff; &:hover { color: #ff0; } .special & { border: 1px solid #f00; } } 

Оба этих фрагмента Sass приведут к следующему CSS:

 .hoverable { color: #fff; } .hoverable:hover { color: #ff0; } .special .hoverable { border: 1px solid #f00; } 

Вы видите, что сделала эта строка с амперсандом? Sass заменил амперсанд родительским селектором, определив новый селектор внутри .special селектора.

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