Препроцессоры в CSS: что это и для чего нужны
Препроцессором называют инструмент преобразования одного синтаксиса в другой в рамках какого-либо языка программирования или разметки. Их использование позволяет сократить время на написание кода, а сам код автоматически привести к определенному виду. Также препроцессоры способны заменить или даже расширить функционал некоторых конструкций языка. Очень часто к их использованию приходится прибегать верстальщикам, так как классический CSS в разработке используется все реже.
Применение препроцессоров в CSS
CSS сам по себе не имеет каких-то сложных синтаксических конструкций, так как он просто описывает тот или иной объект на странице. Максимум он способен еще указывать его реакцию на определенное действие пользователя, например, наведение курсора мыши. С одной стороны отсутствие сложных конструкций в языке делает его простым в изучении и применении, но с другой требует дублирование одинаковых участков кода, постоянного повторения ключевых слов и так далее.
Применение препроцессоров позволяет расширить функционал CSS, что упрощает написание кода, если разобраться в работе нужного препроцессора. В первую очередь исчезает необходимость повторять одни и те же участки, ключевые слова можно заменить отступами или только одним знаком, проще работать с наследованием свойств. Также во многих препроцессорах нет необходимости постоянно ставить символ точки с запятой и скобок, что уменьшает вероятность ошибки по невнимательности.
Препроцессор занимается преобразованием кода, то есть у него должен быть выходной файл. В случае с CSS это будет выходной файл, написанный на более низком уровне языка, то есть чистом CSS. При этом компиляция происходит корректно — соблюдаются все необходимые правила, разметка, расстановка специальных знаков и ключевых слов. На выходе получается CSS-код полностью понятный программе-обработчику, например, браузеру. Однако не преобразованная разметка не будет распознана корректно.
Применять препроцессоры в CSS целесообразно в более-менее крупных проектах, где присутствует много стилей. Это позволит сократить время на их написание, а при дополнительных настройках позволит оптимизировать CSS-файлы, чтобы они занимали меньше места. Однако писать через препроцессоры стили для какого-то очень небольшого проекта, например, одностраничника на пару экранов, нецелесообразно — скорее всего разработчик потратит больше времени на правильную настройку.
Основные задачи CSS-препроцессоров
CSS-препроцессор является надстройкой над стандартным CSS, добавляющим ранее недоступные возможности, позволяющие ускорить написание кода, сделать его более понятным для разработчиков. Ускорение разработки и улучшение понимания, за счет использования более продвинутых синтаксических конструкций, являются приоритетной задачей всех CSS-препроцессоров.
В среде разработчиков CSS-препроцессоры могут еще называться “синтаксическим сахаром”. Это не совсем одно и то же, так как определение syntactic sugar включает вообще любое дополнение для любого языка, которое не привносит существенных функциональных изменений, но делает его запись проще и повышают удобство чтения кода. В язык вводятся альтернативные варианты написания уже встроенных конструкций — более короткие или длинные для избежания частых повторений одинаковых или почти одинаковых кусков кода.
Препроцессор “переработает” этот “синтаксический сахар”, с которым удобнее работать человеку, в классический CSS, с которым работают программы. В зависимости от используемого препроцессора правила написания “синтаксического сахара” могут отличаться.
Разновидности CSS-препроцессоров
В разработке используется три популярных препроцессора:
Более подробно каждый из них рассмотрим дальше в статье.
Дополнительно можно выделить еще препроцессоры, используемые в узких кругах: Closure Stylesheets и CSS Crush. Разработчику есть смысл знакомиться с ними только для решения определенных задач, которые встречаются очень редко, поэтому тратить время на их изучение начинающему верстальщику бессмысленно.
Почему стоит использовать препроцессоры
В веб-разработке, даже в самом небольшом проекте, уже взято за стандарт использование препроцессоров. Уметь с ними работать нужно даже начинающему верстальщику, так как на чистом CSS уже почти не делается новых проектов. Помимо требований потенциальных работодателей существуют и более рациональные причины использования CSS-препроцессоров.
Возможность записать код короче
В стандартном CSS нет возможности делать вложенности, создавать переменные. Это сильно усложняет написание большого объема стилей, создает необходимость дублировать одинаковые участки кода, а также помнить название всех ID и классов. Благодаря препроцессорам разработчик:
- не должен запоминать множество классов, следовательно, вероятность допустить ошибку в названии, из-за которой слетит половина стилей, ниже;
- получает возможность структурировать код по вложениям, что делает удобным его зрительное восприятие и ускоряет процесс разработки;
- имеет возможность задавать переменные и функции, сокращает время на написании повторяющихся стилей и уменьшает вероятность ошибок;
- тратит меньше времени на процесс прописывания стилей.
Легкость изучения
Благодаря тому, что синтаксис препроцессоров слабо отличается от синтаксиса CSS, разработчик, освоивший стандартный CSS может почти сразу же начать делать проекты, например, на SASS или LESS. Также не составит труда найти понятную документацию на русском языке, бесплатные уроки и мастер-классы, попросить помощи в профессиональном сообществе.
Простота применения
С каждыми новыми версиями CSS-препроцессоры становится все проще встроить в проект. Если раньше требовалось скачать несколько программ, плагинов, выполнить их настройку через терминал, то сейчас разработчик может воспользоваться лишь одной программой-компилятором. Сейчас такие программы предоставляют почти все необходимое, что избавляет от практической необходимости долго “возиться” с настройкой проекта — все можно сделать нажатием буквально пары кнопок.
Логичная и понятная структура
Возможность создавать вложения является главным преимуществом любого CSS-препроцессора. Такой код выглядит логичным, его удобно читать и редактировать, плюс, гораздо меньше риск допустить ошибку. Вот так выглядит вложенность:
Родительский селектор 1
Вложенный селектор 1.1
Вложенный селектор 1.2
Вложенный селектор 1.2.1
Вложенный селектор 1.2.2

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

Пример использования миксинов
Модули
Еще одним важным преимуществом препроцессоров является возможность скомпоновать в модули важные элементы, которые часто используются в работе. Например, можно создать файл с переменными и подключать его к нужным проектам, не тратя время на их повторное написание или копирование. Также вы можете делиться своими модулями с другими разработчиками, что очень удобно при работе в команде.
Популярные CSS-препроцессоры
Всего выделяется 3 популярных CSS-препроцессоров: LESS, SASS и Stalus. Их функционал и синтаксис, в целом, похож друг на друга, хотя различия и имеются. Вокруг этих 3 препроцессоров сформировались большие сообщества разработчиков. Начинающему лучше всего начать изучение CSS-препроцессоров именно с LESS и SASS.
Примечательно, что у всех трех препроцессоров есть возможность математической обработки стилей, то есть вы их можете складывать, вычитать, умножать, делить. Данные операции можно делать не только с какими-то определенными величинами, например, размерами отступов, но и цветами.
Препроцессор LESS
Самый популярный CSS-препроцессор, берущий свое начало в 2009 году. Изначально был написан на Ruby, но сейчас работает полностью на JavaScript, что упрощает его дальнейшую поддержку. Прост в освоении, так как имеет только самые базовые компоненты, с которыми очень просто разобраться. Если вам будет не хватать функционала препроцессора, то его можно расширить за счет использования сторонних плагинов.

Пример синтаксиса LESS
Препроцессор LESS можно подключить через JavaScript-файл, который расположен на официальном сайте решения. С его помощью будет проводиться конвертация в стандартный CSS. Пример подключения скрипта для преобразования:
Также нужно будет создать файл с расширением .less и привязать его к index.html через тег :
Еще как вариант подключения можно использовать специальные программы-компиляторы. В этом случае нужно будет просто создать файлы стилей с расширением .less, а в самих программах настроить их преобразование в нужную директорию проекта.
Препроцессор SASS
Самый многофункциональный и старый из популярных CSS-препроцессоров. Первая версия вышла в 2007 году. Написан на Ruby, плюс, есть применение C++. Это пускай и делает язык более функциональным, но добавляет некоторые сложности для новичка, например, при подключении к проекту и его отладки. По сравнению с LESS имеет куда больше возможностей, часть которых выходит за рамки классического CSS, среди которых можно выделить автоматизацию некоторых моментов. Если представленного функционала будет не хватать, то его можно расширить за счет библиотеки Compass.

Пример синтаксиса SASS
Еще примечательно, что сам SASS имеет два принятых синтаксиса:
- Классический SASS, который уже считается устаревшим, но тем не менее активно используется большинством разработчиков. За основу взята система отступов.
- SCSS. Имеет более привычный для CSS синтаксис. Основной особенностью является необходимость использования фигурных скобок.
Выполнить подключение SASS к проекту сложнее, чем LESS, так как это требует манипуляций с терминалом, хотя сейчас для этого нужна всего одна команда: sass –watch style.scss:style.css. Она отвечает за запуск отслеживания изменений в файлах с расширением .sass и их автоматическое преобразование в css. Некоторые редакторы кода, например, Visual Studio Code, позволяют включить автоматическое отслеживание SASS в проекте с помощью специального плагина.
Препроцессор Stylus
Самый свежий среди популярных препроцессоров — первая версия появилась в конце 2010 года. Он написан на JavaScript, что делает его более гибким, чем SASS. При этом по наличию базового функционалу ему не уступает. Поддерживается несколько вариантов синтаксиса — от наиболее похожего на стандартный CSS до упрощенных вариантов без вспомогательных элементов типа скобок, двоеточий, точек с запятой и так далее.

Пример вложения классов в Stylus
Пока гораздо менее распространен в среде разработчиков, чем два предыдущих. Вероятно, позиции препроцессора Stylus будут становится все крепче, так как он активно совершенствуется — появляются новые версии, варианты синтаксиса, интересные возможности. Новичку стоит обратить внимание на этот препроцессор, но только после ознакомления с LESS или SASS.
Для подключения потребуется предварительно установить библиотеку Node.js и Gulp. В дальнейшем нужно выполнить инициализацию Stylus для проекта с помощью терминала. В некоторых редакторах кода, например, том же VS Code, можно автоматизировать подключение с помощью специальных плагинов.
Преимущества и недостатки препроцессоров
У всех трех распространенных CSS-препроцессоров есть общие преимущества и недостатки, так как их возможности, синтаксис и функционал в целом похожи между собой.
Преимущества:
- незаменим в больших проектах;
- возможности стандартного CSS сильно расширяются;
- можно сократить количество дублированных кусков кода;
- код становится более структурированным и читаемым;
- проще поддерживать проект, написанный на препроцессорах, чем на чистом CSS;
- есть возможность оптимизировать скорость загрузки стилей.
Недостатки:
- нецелесообразно использовать в маленьких одностраничных проектах;
- на выходе все равно получается CSS-код, который может потребоваться редактировать;
- требуется предварительное подключение к проекту и настройка;
- предварительно требуется изучить синтаксис нужного препроцессора и привыкнуть к нему.
Заключение
Освоение CSS-препроцессоров — это обязательная задача любого веб-разработчика или верстальщика. Сейчас они применяются почти во всех проектах, даже самых небольших. Также прописывать стили зачастую проще именно через препроцессоры, чем через классический CSS. Для начала, конечно, потребуется освоить стандартный CSS, но зато с изучением препроцессоров не будет никаких проблем, так как все большинство вещей станет понятно на интуитивном уровне.
Препроцессор Sass
Без собственного сайта, в современном мире, не может обойтись ни один серьёзный бизнес, что делает профессию web-разработчика одной из самых востребованный на текущий момент. Для полноценного создания интернет приложения или веб-страницы необходимо использовать: Css, HTML и JS. Ещё один полезным составным элементом, на базе CSS, является язык, применяемый для упрощения размещения файлов и для улучшения структурирования кода, под названием “Sass”.
Что такое Sass?
Sass – это препроцессорный язык, базирующийся на скриптах языка CSS. Используется данный язык для того, чтобы взаимодействовать со стилями. Цель применения: упростить и структурировать код, а также сделать программирования более удобным.
Перечень главных преимуществ
Вышеописанный препроцессор обладает рядом преимуществ, например:
- возможность работать с любыми параметрами;
- построение таблиц и сетей;
- создание и взаимодействие с вложенными селекторами;
- верстка сайтов осуществляется с применением дополнительных констант и примесей СSS;
- возможность использования различных заготовок для упрощения кода;
- отличное сочетание с различными системами автоматизации;
- большое количество дополнительных библиотек;
- комфортное взаимодействие с вложенными спектрами.
Незначительные недостатки:
- увеличение объёма кода;
- низкий спектр задач для ускорения;
- вероятные проблемы с цикличностью.
Отличие Sass от SCSS
Отличие вышеуказанных препроцессоров заключается в наличии фигурных скобках, а именно: препроцессор Sass использует такой синтаксис, где фигурные скобки были заменены простыми пробелами для реализации вложения составляющих элементов. SCSS – напротив, использует синтаксис языка CSS. Стоит отметить, что пробелы в Sass основываются на логических значениях и обозначаются “вложенный сектор”.
Ещё одним отличием является замена таких знаков как: “!” и “=” на “$” и ”:”.В целом, SCSS является обновленной версией Sass с максимальным приближением синтаксиса препроцессора к языку CSS.
Простой CSS
CSS-препроцессоры — это замечательные инструменты, которые позволяют писать код проще и быстрее. Но следует понимать, что само по себе использование препроцессоров не сделает ваш код лучше, и даже более того, если до препроцессоров код был так себе, их применение может сделать его ещё хуже. Несмотря на все прекрасные возможности, которые дают препроцессоры, вам всё ещё придется самостоятельно поддерживать ваш код аккуратным и продумывать его структуру.
Главное правило при работе с препроцессорами — ваши переменные и миксины не должны превращаться в черный ящик. Вы всегда должны понимать что хранится в переменной и что возвращает миксин.
Почему это важно? Потому что проект должно быть удобно не столько писать, сколько читать. Если вы передадите проект другому разработчику, сколько ему потребуется времени, чтобы разобраться в нём? Разберётесь ли вы сами в своём проекте через полгода? Чем меньше в коде чёрных ящиков и неочевидных мест, тем меньше времени вы потратите на въезжание в проект и тем быстрее вы сможете начать решать свои задачи. Поэтому как бы ни было весело придумывать хитрые ходы и навороченные функции и миксины, помните о том, что в какой-то момент вам, возможно, придется разбираться в этом коде заново.
Если очень хочется заняться программированием на препроцессорах, заведите себе аккаунт на Codepen и играйтесь там безо всяких ограничений. Экспериментировать с кодом не только интересно, но и полезно, и вы легко сможете поделиться своими экспериментами с миром публикуя ссылки на онлайн-демки, но в коде сайтов, которые вам предстоит поддерживать, делать навороченные конструкции лучше не стоит.
И переменные и миксины должны создаваться для значений и кодов, которые планируется потом многократно использовать. Если переменная или миксин используются в коде ровно один раз, они, скорее всего, не нужны.
Миксины #
Переменные #
Медиавыражения #
$bp-tablet: 660px; $bp-desktop: 960px; .header padding: 20px; font-size: 20px; > .header A text-transform: uppercase; color: crimson; > @media (min-width: $bp-tablet) .header padding: 30px; > .header A color: orange; > > @media (min-width: $bp-desktop) .header padding: 40px; > .header A color: gold; > >
$bp-tablet: 660px; $bp-desktop: 960px; .header padding: 20px; font-size: 20px; @media (min-width: $bp-tablet) padding: 30px; > @media (min-width: $bp-desktop) padding: 40px; > > .header A text-transform: uppercase; color: crimson; @media (min-width: $bp-tablet) color: orange; > @media (min-width: $bp-desktop) color: gold; > >
По примеру слева может быть не очень понятно в чём, собственно, проблема, потому что код короткий, но реальных проектах между элементом и медиавыражениями могут оказаться десятки строчек кода, и в этих условиях работать с кодом становится ощутимо неудобно.
Если внутри медиавыражения окажется много кода, и оно перестанет помещаться в экран, придется всё время держать в голове с каким медиавыражением вы работаете в данный момент.
Если же организовать код как в примере справа, все изменения стилей элемента будут лежать внутри самого элемента, и все точки изменений будут видны как на ладони. Это очень удобно.
Правда, при таком подходе в скомпилированном слое получится много разрозненных медиавыражений для одних и тех же брикпойнтов, но эта проблема решается с помощью css-mqpacker — плагина для PostCSS.
Препроцессор Sass. Полное руководство и зачем он нужен
Sass это расширение CSS, которое придаёт мощи и элегантности этому простому языку. Sass даст вам возможность использовать переменные, вложенные правила, миксины, инлайновые импорты и многое другое, всё с полностью совместимым с CSS синтаксисом. Sass помогает сохранять огромные таблицы стилей хорошо организованными, а небольшим стилям работать быстро, особенно с помощью библиотеки стилей Compass.
Суть этой статьи в том, чтобы дать понять как работает Sass в разных кейсах и именно самому решить для себя нужен ли он вам.
Сразу обратите внимание, что если вам нужен простой функционал, такой как перменные, то в простом CSS они уже появились и не нужно загружать себя таким инструментом как Sass. Вот статья — Руководство по работе с переменными в CSS
Мой Твиттер — там много из мира фронтенда, да и вообще поговорим. Подписывайтесь, будет интересно: ) ✈️
Синтаксис
Для Sass доступно два синтаксиса. Первый, известный как SCSS (Sassy CSS) и используемый повсюду в этой статье — это расширенный синтаксис CSS. Это означает, что каждая валидная таблица стилей CSS это валидный SCSS файл, несущий в себе туже самую логику. Более того, SCSS понимает большинство хаков в CSS и вендорные синтаксисы, например такой как синтаксис фильтра в старом IE. Этот синтаксис улучшен Sass функционалом описанным ниже. Файлы использующие этот синтаксис имеют .scss расширение.
Второй и более старый синтаксис, также известный как краёный синтаксис или иногда просто Sass, даёт более сжатую возможность работы с CSS. Он использует отступы вместо скобок, что отделить вложения селекторов и новые строки вместо точек с запятой для разделения свойств. Иногда люди находят такой способ проще для понимания и быстрее для написания, чем SCSS. По факту, такой синтаксис имеет тот же функционал, хотя некоторые из них имеют слегка другой подход. Файлы используемые этот синтаксис имеют расширение .sass .
Любой синтаксис может импортировать файлы, написанные в другом. Файлы могут быть автоматически сконвертированы из одного в другой, используя sass-convert команду:
# Convert Sass to SCSS$ sass-convert style.sass style.scss# Convert SCSS to Sass$ sass-convert style.scss style.sass
Использование Sass
Sass может быть использован тремя способами: как командной строкой, как отдельный модуль Ruby и как плагин для rack-фреймворка, включая Ruby on Rails и Merb. Первым делом для всего этого надо установить Sass гем:
Если вы на Windows, то возможно вам надо установить сначала Ruby.
Для запуска Sass из командной строки просто используйте:
sass input.scss output.css
Вы также можете указать Sass следить за файлом и обновлять CSS каждый раз, когда Sass файл меняется:
sass —watch input.scss:output.css
Если у вас есть директория с множеством Sass файлов, то вы также можете указать Sass следить за всей директорией:
sass —watch app/sass:public/stylesheets
Используйте sass —help для полной документации.
Селекторы
CSS vs. SCSS селекторы.
#main color: #999;>#main .content color: #bfbfbf;>
CSS отрывок выше, может быть написан в SCSS таким образом:
#maincolor: #999;.content< color: #bfbfbf;>>
Как мы можем видеть, SCSS структура более схожа с DOM структурой. Это позволяет нам организовать наш CSS более эффективно. Вот примеры:
#main h1 color: #00ff00;width: 97%;.title background-color: #ff0000;color: #000000;>>
Будет скомпилировано в:
#main h1 color: #00ff00;width: 97%;>#main h1 .titlebackground-color: #ff0000;color: #000000;>
Ссылаясь на родительский селектор:
#wrapper h1width:20px;&:hoverwidth:25px;>>
& будет заменен родительским селектором. То есть код выше, будет эквиалентен:
#wrapper h1width:20px;>#wrapper h1:hoverwidth:25px;>
Импорты
Нормальный импорт.
@import “foo.css”; //импортирует foo.css@import “foo” screen; //импортирует foo.scss@import “foo.scss” screen; //импортирует foo.scss@import “foo1”,”foo2" screen; //импортирует foo1.scss и foo2 scss
Частичный
Если вы не хотите компилировать SCSS файл как CSS, вы можете использовать “ _ ” перед названием файла.
@import “colors”; //_colors.scss будет импортирован@import “utils/foo.scss”; // Это импортирует fo.scss в папку utils.
Вложенные импорты:
Если demo.scss включает в себя:
.example color: red;>
#main @import “demo”;>
Будет скомпилировано в
#main .example color: red;>
Переменные
SCSS переменные начинаются с символа $.
$width: 10px;$headercolor:red;#main h1width: $width;color:$headercolor;>
Будет скомпилировано в:
#main h1width: 10px;color:red;>
Переменные доступны только внутри уровня вложенного селектора где они объявляются. Если вы хотите хотите, чтобы переменная была доступна за пределами скоупа, то вам нужно добавить к ней !global
#main $width: 5em !global;width: $width;>#sidebar width: $width;>
Вы можете указывать переменные в отдельном файле и вы можете импортировать этот scss файл, чтобы использовать эти переменные. Это как конфиг файл для вашего проекта. Если вы меняете значение переменных, то оно будет изменено везде, где вы его используете. Это очень эффективно для больших проектов. Мы увидим это чуть позже.
Вы также можете производить разные операции в SCSS. Для примера:
p font: 10px/8px; // Чистый CSS без деления$width: 1000px;width: $width/2; // Использование переменных в деленииwidth: round(1.5)/2; // Использование функции и деленияheight: (500px/2); // Использование скобок и деленияmargin-left: 5px + 8px/2px; // Использование сложения и деленияfont: (italic bold 10px/8px); // В списке, скобке на учитываются>
p font: 10px/8px;width: 500px;height: 250px;margin-left: 9px;>
Вставка: #<>
Вы можете использовать переменные в свойствах имен и значения, используя #<> . Для примера:
$name: foo;$attr: border;p.# #-color: blue;>
p.foo border-color: blue;>
Управляющие директивы
@if
p @if 1 + 1 == 2 @if 5 @if null >
p border: 1px solid;>
@for
@for $i from 1 through 3 .item-# >
.item-1 .item-2 .item-3
@each
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) # < font-size: $size;>>
h1 h2 h3
@while
$i: 6;@while $i > 0 .item-# $i: $i — 2;>
.item-6 .item-4 .item-2
Миксины
Миксины позволяют вам определять стили, которые могут быть переиспользованы на протяжении всей таблицы стилей. Вы можете думать о миксинах, как о функциях в каком-либо другом языке програмирования. Вы можете передавать переменные, также как в функциях любого другого языка програмирования. В SCSS миксины возврашают набор CSS правил. Вы можете использовать миксины так @include имя-миксина, определенное директивной @mixin .
Рассмотрите следующий пример:
@mixin large-text font: family: Arial;size: 20px;weight: bold;>color: #ff0000;>.page-title @include large-text;padding: 4px;margin-top: 10px;>
.page-title font-family: Arial;font-size: 20px;font-weight: bold;color: #ff0000;padding: 4px;margin-top: 10px;>
Вы также можете использовать составные миксины, например как:
@mixin mixin-onecolor: red;>@mixin mixin-twowidth:20px;>.page-title @include mixin-one;@include mixin-two;>
Вы также можете передавать переменные в миксинах:
$globel-prefixes:webkit moz ms o;@mixin prefixer ($property,$value,$prefixes:null)@if $prefixes==null@each $prefix in $globel-prefixes -#-#: $value; >> @else @each $prefix in $prefixes -#-#: $value;>>#: $value;>*@include prefixer(box-sizing,border-box);>
Будет скомпилено в:
*-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;>
Функции
Вы также можете определять функции, возвращающие значение. Для примера.
$no-of-columns:12;$gutter-width:2%;@function get-column-width($i)@return (100% — ($no-of-columns/$i — 1) * $gutter-width) / $no-of-columns * $i;>.col-6 width:get-column-width(6);>
Будет скомпилировано в:
.col-6 width: 49%;>
Расширения
Вы столкнетесь с ситуацией, когда вам нужно будет переиспользовать стили. Рассмотрите следующий пример:
Оба будут иметь одинаковые стили, кроме цвета.
.btnmargin:10px;color:black;width:200px;height:100px;>.btn-blue@extend .btn;background:blue;>
Это будет скомпилировано в:
.btn,.btn-bluemargin:10px;color:black;width:200px;height:100px;>.btn-blue
Вы также можете связывать расширения и использовать несколько расширений в одном CSS селекторе.
Если вы не хотите, чтобы директива расширения была скомпилена в CSS, вы можете использовать % перед селектором.
%btnmargin:10px;color:black;width:200px;height:100px;>.btn-blue@extend %btn;background:blue;>.btn-red Будет скомпилировано в:.btn-bluemargin:10px;color:black;width:200px;height:100px;background:blue;>.btn-redmargin:10px;color:black;width:200px;height:100px;background:red;>
