SASS для начинающих: миксины, наследование, операторы
В этом уроке мы рассмотрим миксины, наследование и математические операторы в SASS.
Предыдущий урок: Вложенные стили, фрагменты и импорт в SASS
01. SASS Миксины — Создание многоразовых CSS правил
SASS миксины позволяют создавать многоразовые CSS правила, чтобы избежать повторений в коде. Это одна из самых мощных функций SASS. В CSS3 нам приходится писать слишком много префиксов, чтобы проект выглядел отлично во всех браузерах. SASS миксины позволяют создавать группы CSS деклараций, которые можно использовать многократно по всему сайту.
SASS Миксины — пример
Давайте создадим обычную миксину для border-radius. Чтобы ее создать нам нужно сперва определить, что она является миксиной с помощью @mixin. Название, начинающееся со сзначка $ — это переменная, которая может быть чем угодно. В нашем случае $radius — это переменная. Если вы напишете $rdus вместо $radius это тоже сработает.
@mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius: $radius; border-radius: $radius; }
Только что мы создали простую миксину, но пока еще ее не использовали. Для этого нужно написать @include, а затем имя самой миксины. Давайте используем нашу border-radius миксину к классу .card.
.card { min-height: 200px; @include border-radius(4px); }
SASS компилирует этот код в нативный CSS.
Вот как он будет выглядеть:
.card { min-height: 200px; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; border-radius: 4px; }
Мы можем создать множество различных миксин как в примере выше и использовать их по необходимости.
Давайте создадим еще одну миксину для ссылки (анкора), в которой будут заданы стили для различных состояний: hover, link, visited и active.
@mixin link ($link, $visit, $hover, $active) { a { color: $link; &:visited { color: $visit; } &:hover { color: $hover; } &:active { color: $active; } } }
Если вы еще не поняли, как использовать эти миксины, то все очень просто. Измените переменную color в миксине ссылки на цвет, который вам нравится. Предположим, у нас есть ссылка внутри класса .card:
.card { @include link(red, green, yellow, pink); }
SASS компилирует это в:
.card a { color: red; } .card a:visited { color: green; } .card a:hover { color: yellow; } .card a:active { color: pink; }
02. SASS Наследование — CSS правила от одного селектора к другому
SASS Наследование позволяет переносить CSS правила одного селектора к другому. Затем к новому селектору можно добавить дополнительные правила.
.selector-2 { @extend .selector-1; background:#fff000; }
SASS Наследование — Пример
В этом примере я покажу, как использовать SASS наследование на реальном приложении. Наиболее стандартный пример — это кнопка. Предположим, что у вас есть .btn класс для кнопки и еще множество других кнопок по всему сайту. Давайте сперва зададим стандартное правило для кнопки с классом .btn:
.btn { text-decoration: none; color: #666; border: 1px solid #f0f0f0; height: 40px; line-height: 40px; padding: 0 20px; }
Если нам нужна другая кнопка с зеленым фоном и белым текстом, то мы просто возьмем стили стандартной кнопки с помощью @extend и добавим необходимые правила:
.green-btn { @extend .btn; background: green; color: #FFF; border-color: green; }
Так будет выглядеть CSS для SASS кода выше:
.btn, .green-btn { text-decoration: none; color: #666; border: 1px solid #f0f0f0; height: 40px; line-height: 40px; padding: 0 20px; } .green-btn { background: green; color: #FFF; border-color: green; }
Заполняющие селекторы (placeholder selectors): %example
В SASS есть уникальный селектор, которого не существует в обычном CSS, который называют “заполняющим селектором”. Этот селектор создан для того, чтобы использовать его с @extend. С его помощью мы можем писать стили, которые не хотим использовать в HTML. Предположим, что класс .btn не используется в HTML и у нас есть только .btn-green, .btn-red и так далее. Мы можем добиться такого же результата с помощью следующего кода:
%btn { text-decoration: none; color: #666; border: 1px solid #f0f0f0; height: 40px; line-height: 40px; padding: 0 20px; }
И использовать:
.green-btn{ @extend %btn; background: green; color: #FFF; border-color: green; }
Так выглядит CSS вывод:
.green-btn { text-decoration: none; color: #666; border: 1px solid #f0f0f0; height: 40px; line-height: 40px; padding: 0 20px; } .green-btn { background: green; color: #FFF; border-color: green; }
ВАЖНО: В принципе, использовать наследование не самая лучшая идея, так как для этих же целей отлично служат миксины. Если вы считаете, что использование наследования необходимо, то не забывайте про заполняющие селекторы, с помощью которых можно значительно сократить код.
03. SASS Операторы: математические вычисления с помощью SASS
SASS операторы позволяют производить базовые математические операции в CSS: сложение, вычитание, умножение и деление. В этом уроке мы произведем некоторые простые рассчеты в таблице стилей. Прежде всего, давайте рассмотрим поддерживаемые операторы и их значение:
SASS Оператор | Описание |
---|---|
+ | Сложение |
– | Вычитание |
* | Умножение |
/ | Деление |
% | Проценты |
Примечание: существует еще один оператор, которые мы уже используем для определения переменных в SASS.
SASS Операторы — Пример
Использование базовых операторов:
h3 { font-size: 5px + 5; // Правильный оператор line-height: 1rem + 0.5rem; // Еще один правильный оператор min-width: 50% + 5px; // Неправильный оператор, так как используются разные единицы измерения }
Никогда не совмещайте разные единицы измерения в операторах!
Умножение:
.box { width: 20% * 2; // Правильно height: 60px * 2px; // Неправильно min-width: 20% * 10px; // Неправильно }
Обратите внимание, что нельзя умножить 60px на 2px, потому что получится 120pxpx. Как и в примере со сложением мы не можем умножать проценты на пиксели.
.box { width: 100px/2; }
При делении 100px/2 и 100px/2px вы получите разные результаты:
.box { width: 100px/2; // = 50px height:100px/2px // = 50 min-width: 100%/10px // Неправильно - 10%px }
Предыдущий урок: Вложенные стили, фрагменты и импорт в SASS