Полный гайд по scss/sass
Содержание:
- Что такое Sass
- Configuration permalinkConfiguration
- CSS vs. SCSS селекторы.
- Limitations permalinkLimitations
- SASS Наследование — CSS правила от одного селектора к другому
- Спросите врача!
- Область видимости permalinkОбласть видимости
- Scope permalinkScope
- Так для чего же нужен Sass?
- Импорт
- Как готовиться к анализу крови на свертываемость
- Компиляция SCSS
- SassScript
- Расшифровка коагулограммы
- Binary configuration parameters
- A Basic Mixin Approach
- Extension Scope permalinkExtension Scope
- Умные breakpoints
- Приступим!
Что такое Sass
Sass (Syntactically Awesome Stylesheets) — это один из самых развитых, стабильных и многофункциональных препроцессоров. Пользуется большой популярностью у разработчиков. Sass — это более продвинутая версия CSS, которая имеет гораздо бо́льший набор возможностей, а также Sass предназначен для упрощения каскадных таблиц стилей.
Синтаксис Sass имеет 2 вида: SASS и SCSS. SCSS — более похож на CSS, а SASS — отличается отсутствием фигурных скобок. Вложенные элементы реализованы за счёт отступов. Именно такой синтаксис мы будем здесь использовать.
Зачем нужен Sass
Чтобы понять, зачем нужен Sass, перечислим его некоторые возможности:
- Sass позволяет вкладывать правила CSS друг в друга.
- Вложенность свойств.
- Использование переменных.
- Поддержка арифметических операций.
- Операции с цветами.
- Возможность импортировать в sass файл sass, scss и css файлы.
- Использование миксинов.
- И многое другое.
Если коротко зачем нужен Sass: он ускоряет и упрощает процесс разработки.
Как использовать Sass
Существуют разные способы начать использовать Sass:
- C помощью приложений (Koala, CodeKit, Compass и другие).
- C помощью командной строки.
- Используя таск-менеджеры.
- Простым конвертированием Sass в CSS с помощью онлайн-сервисов.
Рассмотрим использование Sass для таск-менеджера Gulp. Перед тем как начать установку, желательно ознакомиться с основами Gulp.
Configuration permalinkConfiguration
A stylesheet can define variables with the to make them configurable. To load a module with configuration, write . The configured values will override the variables’ default values.
With Mixins
Configuring modules with can be very handy, especially when using libraries that were originally written to work with the rule. But it’s not particularly flexible, and we don’t recommend it for more advanced use-cases. If you find yourself wanting to configure many variables at once, pass maps as configuration, or update the configuration after the module is loaded, consider writing a mixin to set your variables instead and another mixin to inject your styles.
CSS vs. SCSS селекторы.
#main {color: #999;}#main .content {color: #bfbfbf;}
CSS отрывок выше, может быть написан в SCSS таким образом:
#main{color: #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 .title{background-color: #ff0000;color: #000000;}
Ссылаясь на родительский селектор:
#wrapper h1{width:20px;&:hover{width:25px;}}
& будет заменен родительским селектором. То есть код выше, будет эквиалентен:
#wrapper h1{width:20px;}#wrapper h1:hover{width:25px;}
Limitations permalinkLimitations
Disallowed Selectors
- Dart Sass
- ✓
- LibSass
- ✗
- Ruby Sass
- ✗
LibSass and Ruby Sass currently allow compound selectors like to be extended. However, this behavior doesn’t match the definition of : instead of styling elements that match the extending selector as though it had , which would be affected by style rules that included either or , it only styled them with rules that included both and .
In order to keep the definition of straightforward and understandable, and to keep the implementation clean and efficient, that behavior is now deprecated and will be removed from future versions.
See the breaking change page for more details.
Only simple selectors—individual selectors like or —can be extended. If could be extended, the definition of says that elements matching the extender would be styled as though they matched . That’s just the same as matching both and , so there wouldn’t be any benefit in writing that instead of .
Similarly, if could be extended, it would do (almost) the same thing as extending on its own. The subtle differences aren’t worth the confusion of looking like it’s doing something substantially different, so this isn’t allowed either.
HTML Heuristics
When , it doesn’t generate all possible combinations of ancestor selectors. Many of the selectors it could generate are unlikely to actually match real HTML, and generating them all would make stylesheets way too big for very little real value. Instead, it uses a heuristic: it assumes that each selector’s ancestors will be self-contained, without being interleaved with any other selector’s ancestors.
Extend in
While is allowed within and other CSS at-rules, it’s not allowed to extend selectors that appear outside its at-rule. This is because the extending selector only applies within the given media context, and there’s no way to make sure that restriction is preserved in the generated selector without duplicating the entire style rule.
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; }
ВАЖНО: В принципе, использовать наследование не самая лучшая идея, так как для этих же целей отлично служат миксины. Если вы считаете, что использование наследования необходимо, то не забывайте про заполняющие селекторы, с помощью которых можно значительно сократить код
Спросите врача!
Получите бесплатный ответ от самых лучших врачей сайта.
- Это БЕСПЛАТНО
- Это очень просто
- Это анонимно
28,265 ответов за неделю
2,744 консультирующих врачей
Информация на Сайте не считается достаточной консультацией, диагностикой или назначенным врачом методом лечения. Контент Сайта не заменяет профессиональную очную медицинскую консультацию, осмотр врача, диагностику или лечение. Информация на Сайте не предназначена для самостоятельной постановки диагноза, назначения медикаментозного или иного лечения. При любых обстоятельствах Администрация или авторы указанных материалов не несут ответственности за любые убытки, возникшие у Пользователей в результате использования таких материалов. Никакая информация на сайте не является публичной офертой. Google+
О найденных недочетах пишите support@03.ru.
Статистика За сутки добавлено 6 вопросов, написано 9 ответов, из них 1 ответ от 3 специалистов в 1 конференции.
С 4 марта 2000-го 375 специалистов написали 511 756 ответов на 2 329 486 вопросов
Рейтинг жалоб
- Анализ крови1455
- Беременность1368
- Рак786
- Анализ мочи644
- Диабет590
- Печень533
- Железо529
- Гастрит481
- Кортизол474
- Диабет сахарный446
- Психиатр445
- Опухоль432
- Ферритин418
- Аллергия403
- Сахар крови395
- Беспокойство388
- Сыпь387
- Онкология379
- Гепатит364
- Слизь350
Рейтинг лекарств
- Парацетамол382
- Эутирокс202
- L-Тироксин186
- Дюфастон176
- Прогестерон168
- Мотилиум162
- Глюкоза-Э160
- Глюкоза160
- Л-Вен155
- Глицин150
- Кофеин150
- Адреналин148
- Пантогам147
- Церукал143
- Цефтриаксон142
- Мезатон139
- Дофамин137
- Мексидол136
- Кофеин-бензоат натрия135
- Натрия бензоат135
Здравствуйте! Сдавала кровь на коагуляцию — САСС. Прошу, скажите, что означает повышение норм? 36 лет, не беременна (просто прочитала здесь с такими вопросами в основном беременные обращаются). Кровь сдавалась сразу после ОРЗ. Результаты: Фибриноген — 4, . открыть (еще 2 сообщения)
Спасибо за ответ! А вот думаю, может стоит пересдать САСС чуть позже, или вообще не стоит больше этого делать, т.к. не даст он информации о возможных сосудистых проблемах (например имеются или нет отложения на стенках сосудов)? Ну вот насмотришься по . смотреть
. (повышение лимфоцитов,моноцитов,понижение нейтрофилов), может правда пневмония? Еще в день сдачи было расстройство желудка. Вообще пошла САСС сдавать, т.к. маме 62 г недавно поставили атеросклероз и сказали у нее густая кровь. Ну и решала проверить свою . смотреть
Здравствуйте! Моей 8 летней дочери в апреле 2010г. в городе Владивостоке был поставлен диагноз: дизагрегационная тромбоцитопатия.Рецидивирующие носовые кровотечения.Тромбоцитограмма:… открыть (еще 2 сообщения)
5 февраля 2011 г. / Нат. Карнаухова…
. не почти не вставала с кровати.Носовые кровотечения по 4 раза на день,синяки на ногах.Еще был анализ крови на САСС +АЧТВ: ПТИ 98%,время рекальцификации 110 сек.,гепарин.время-49сек.,ТПТ-15 мин.,фибриноген-2,22 г/л.,Тромботест- 4 ст., (АЧТВ . смотреть
. упаковки тромбоцитов и 1 пачку крови. вечером еще кровь перельют. сегодня консультировала гинеколог, из за продолжающегося маточного кровотечения назначила капельницы с окситоцином. САСС:ПТИ 89, птв 20, АЧТВ 65,1, фибриноген 1,3, ТВ 15, тромботест 2 ст. открыть
. не знаю, завтра скажут. правда началось маточное кровотечение. по словам врачей, оно началось на фоне острой почечной недостаточности. не знала что от почек бывают маточные кровотечения. это бывает? завтра вышлю анализ крови клинический, биохимию и САСС открыть (еще 1 сообщение)
. упаковки тромбоцитов и 1 пачку крови. вечером еще кровь перельют. сегодня консультировала гинеколог, из за продолжающегося маточного кровотечения назначила капельницы с окситоцином. САСС:ПТИ 89, птв 20, АЧТВ 65,1, фибриноген 1,3, ТВ 15, тромботест 2 ст. смотреть
. : клинический анализ крови, общий анализ мочи, биохимические пробы, рентген пазух черепа, флюорография органов грудной клетки, ЭДС, САСС — без патологии. Лечение с нестойким эффектом. Получал лечение: цефтриоксон 1г в/ м 5 дней с нестойкими улучшениями, . открыть
. прописала мне отвар из листа брусники и ограничила в воде, также назначила биохимический анализ крови и исследование крови на САСС, назначила повторный прием через неделю. Также назначила принимать Курантил и аскоррубин, но я почитала аннотации, там очень . открыть
Здравствуйте! Беременность 25- 26 нед. , сдавала анализ крови на САСС, результаты: Ht — 38 % , АПТВ ПО- 0, 9, эталоновые тест — положит. , фибриноген — 3, 0. В консультации сказали, что анализ плохой, на вопрос, что именно не так, ответили, что что- то с . открыть
Область видимости permalinkОбласть видимости
Переменные, объявленные на верхнем уровне таблицы стилей, являются глобальными. Это означает, что к ним можно получить доступ в любом месте их модуля после того, как они были объявлены. Но это верно не для всех переменных. Те, которые объявлены в блоках (фигурные скобки в SCSS или код с отступом в Sass), обычно являются локальными, и к ним можно получить доступ только внутри блока, в котором они были объявлены.
Затенение
Локальные переменные можно даже объявлять с тем же именем, что и глобальная переменная. Если это произойдет, на самом деле есть две разные переменные с одним и тем же именем: одна локальная и одна глобальная. Это помогает гарантировать, что автор, пишущий локальную переменную, случайно не изменит значение глобальной переменной, о которой он даже не подозревает.
Если вам нужно установить значение глобальной переменной из локальной области видимости (например, в миксине), вы можете использовать флаг . Объявление переменной, помеченное как , всегда будет присвоено глобальной области видимости.
️ Внимание!
- Dart Sass
- since 2.0.0
- LibSass
- ✗
- Ruby Sass
- ✗
Старые версии Sass позволяли использовать для переменной, которая еще не существует. Это поведение устарело, чтобы гарантировать, что каждая таблица стилей объявляет одни и те же переменные независимо от того, как она выполняется.
Флаг может использоваться только для установки переменной, которая уже была объявлена на верхнем уровне файла. Его нельзя использовать для объявления новой переменной.
Область управления потоком
Переменные, объявленные в правилах управления потоком, имеют особые правила области видимости: они не затеняют переменные на том же уровне, что и правило управления потоком. Вместо этого они просто присваивают эти переменные. Это значительно упрощает условное присвоение значения переменной или создание значения как части цикла.
️ Внимание!
Переменные в области управления потоком могут назначаться существующим переменным во внешней области, но они не могут объявлять там новые переменные. Убедитесь, что переменная уже объявлена, прежде чем присваивать ей значение, даже если вам нужно объявить ее как .
Scope permalinkScope
Variables declared at the top level of a stylesheet are global. This means that they can be accessed anywhere in their module after they’ve been declared. But that’s not true for all variables. Those declared in blocks (curly braces in SCSS or indented code in Sass) are usually local, and can only be accessed within the block they were declared.
Shadowing
Local variables can even be declared with the same name as a global variable. If this happens, there are actually two different variables with the same name: one local and one global. This helps ensure that an author writing a local variable doesn’t accidentally change the value of a global variable they aren’t even aware of.
If you need to set a global variable’s value from within a local scope (such as in a mixin), you can use the flag. A variable declaration flagged as will always assign to the global scope.
️ Heads up!
- Dart Sass
- since 2.0.0
- LibSass
- ✗
- Ruby Sass
- ✗
Older Sass versions allowed to be used for a variable that doesn’t exist yet. This behavior was deprecated to make sure each stylesheet declares the same variables no matter how it’s executed.
The flag may only be used to set a variable that has already been declared at the top level of a file. It may not be used to declare a new variable.
Flow Control Scope
Variables declared in flow control rules have special scoping rules: they don’t shadow variables at the same level as the flow control rule. Instead, they just assign to those variables. This makes it much easier to conditionally assign a value to a variable, or build up a value as part of a loop.
️ Heads up!
Variables in flow control scope can assign to existing variables in the outer scope, but they can’t declare new variables there. Make sure the variable is already declared before you assign to it, even if you need to declare it as .
Так для чего же нужен Sass?
Sass (или Syntactically Awesome Stylesheets) – это скриптовый метаязык (т.е. язык, описывающий другой язык), разработанный для упрощения файлов CSS. Этот модуль входит в Haml (HTML abstraction markup language), который используется для упрощения HTML.
Как Haml компилируется в HTML, так и Sass компилируется в обычные CSS-стили.
Выпуск Sass состоялся в ноябре 2006 года, актуальная стабильная на момент написания статьи версия – 3.5.6 от 23 марта 2018 года.
В зависимости от выбранного синтаксиса Sass-файлы могут иметь расширения:
- .sass — известный как синтаксис с отступами, через которые реализованы вложенные элементы; фигурных скобок нет;
- .scss — Sassy CSS, где используются фигурные скобки.
Так как Haml был написан Ruby-разработчиками, то и Sass унаследовал Ruby-подобный синтаксис, который значительно отличается от CSS. Поэтому в 2010 году был презентован синтаксис SCSS, который приблизил синтаксис Sass к CSS и сделал его более совместимым.
Каждый из этих синтаксисов имеет свои особенности и преимущества.
Синтаксис Sass
Этот синтаксис короче, в нем отсутствуют скобки и точки с запятой, поэтому набирать его проще.
Отступы имеют логическое значение, поэтому крайне важно следить за ними – неправильный отступ может сломать таблицу стилей. Отступ у блока селектора определяет вложенный селектор. Если случайно сместить элемент вправо, он внезапно может оказаться дочерним элементом другого элемента, что сильно изменит результат
Такой синтаксис определенно понравится тем, кто в разработке использует Ruby или Python.
Синтаксис SCSS
Синтаксис полностью совместим с CSS, поэтому нет необходимости изучать его отдельно, ведь это просто CSS с дополнениями.
Синтаксис SCSS – это более читаемый код, в котором проще разобраться. Поэтому все больше разработчиков выбирают именно его. На нем разрабатываются инструменты и плагины для Sass.
В целом, использовать синтаксис SCSS более удобно, чем Sass, поэтому тем, кто не может сделать выбор, следует присмотреться именно к SCSS.
Импорт
CSS имеет возможность импорта, которая позволяет разделить ваш CSS-файл на более мелкие и облегчить, то в CSS создается еще один HTTP-запрос. Sass берет идею импорта файлов через директиву , но вместо создания отдельного HTTP-запроса Sass импортирует указанный в директиве файл в тот, где он вызывается, т.е. на выходе получается один CSS-файл, скомпилированный из нескольких фрагментов.
Например, у вас есть несколько фрагментов Sass-файлов — и . И мы хотим импортировать в .
CSS Output
Обратите внимание на то, что мы используем в файле. Когда вы импортируете файл, то не нужно указывать расширение
Sass — умный язык и он сам догадается.
Как готовиться к анализу крови на свертываемость
Данное исследование проводится строго натощак, с перерывом после последнего приема пищи не менее 12 часов. При последнем приеме пищи рекомендуется исключить из рациона острые, жирные, консервированные блюда с обилием специй. Из напитков допустима только чистая, не минеральная вода, соки, компоты, напитки и алкоголь исключаются.
Непосредственно перед анализом в течение 30 минут рекомендуется избегать физических, эмоционально-психических нагрузок (быстрой ходьбы, волнения), а также курения. При текущем или недавно завершенном курсе лечения препаратами-антикоагулянтами необходимо сообщить название, дозировку и длительность приема специалисту. Если в процессе забора крови возникает ощущение тошноты, головокружения, ухудшение самочувствия, необходимо немедленно сообщить медицинскому персоналу.
Компиляция SCSS
Чтобы скомпилировать SCSS воспользуемся программой Koala. Скачать ее можно здесь. Она доступна для всех платформ, и умеет компилировать не только SASS/SCSS, но и Less c CofeeScript.
Сайт программы Koala
После создаем проект в котором создаем SCSS файл и пишем в нем SCSS код. Например вот такой:
Проект:
Файловая структура проекта
Заметьте, я создал именно папку , чтобы Koala для готового файла создала отдельную папку в корне проекта. Она умеет такое делать автоматически, но только когда исходная папка имеет имя , даже если внутри файлы.
Содержимое файла main.scss
$mainColor: red; body { font-size: 18px; color: $mainColor; }
Определена переменная с именем со значением . В эта переменная использована, чтобы определить цвет текста.
Далее закидываем проект в Koala, видим что она нашла нужный файл и нотификацию о успехе компиляции.
Посмотрим на содержимое проекта, еще раз. Теперь в нем появилась папка CSS c скомпилированным main.css файлом.
Код main.css файла:
body { font-size: 18px; color: red; } /*# sourceMappingURL=main.css.map */
Поздравляю! Мы только что скомпилировали SCSS!)
SassScript
SassScript позволяет значително расширить возможности Sass за счет использования пользовательских переменых, арифметических и прочих функций. SassScript может быть использован для автоматической генерации новых селекторов и свойств.
2.1 Переменные в Sass
Это действительно замечательная возможность — определять переменные, которые можно использовать в любом месте вашего Sass файла. Цвета, дефолтные значения, единицы, все это можно взять в переменную и использовать в дальнейшем. Переменная определяется так: $название: значение.
Sass | CSS — готовый результат |
$accent: #FF9910 .button background-color: $accent color: #fff |
.button { background-color: #FF9910; color: #fff; } |
2.2 Операции с числами и строками + интерполяция
Sass дает возможность использовать стандартные арифметические операции над числами, такие как сложение (+), вычитание (-), деление (/) и остаток от деления по модулю (%). Операторы сравнения (<, >, <=, >=, ==, !=) также поддерживаются для чисел.
Кроме того, в Sass есть возможность конкатенировать (соединять) строки.
Sass | CSS — готовый результат |
$summ: 10 + math.div(20, 2) $cn: content .selector margin: top: $summ + px bottom: 12px + 8px background-color: trans + parent #{$cn}: "con" + "tent" |
.selector { margin-top: 20px; margin-bottom: 20px; background-color: transparent; content: "content"; } |
Как видим из примера $summ: 10 + math.div(20, 2), соблюдается приоритет в выполнении арифметических операций — сначала деление, потом сложение. Для определения порядка действий, можно использовать круглые скобки, как в математике
Обратите внимание, что при сложении 12px + 8px, мы получим 20px
Обратите также внимание на строки 2 и 9, здесь мы используем интерполяцию для размещения динамических значений в любом месте Sass файла, в том числе и в месте, где у нас идет название свойства, название селектора или в любой строке. Чаще всего интерполяция в Sass используется для получения нового значения переменной, благодаря «интегрированию» в значение другой переменной, посредством конструкции #{}, например:
Чаще всего интерполяция в Sass используется для получения нового значения переменной, благодаря «интегрированию» в значение другой переменной, посредством конструкции #{}, например:
Sass | CSS — готовый результат |
$in: интер .interpol content: "#{$in}поляция" |
.interpol { content: "интерполяция"; } |
2.3 Операции с цветами
Цвета в Sass можно складывать, вычетать, делить и умножать. Все арифметические операции выполняются для каждого цвета отдельно: красного, зеленого и синего.
Sass | CSS — готовый результат |
$color1: color.mix(#440203, #550506) $color2: color.mix(rgba(180, 0, 0, .75), rgba(20, 255, 0, .75)) body background-color: $color1 color: $color2 |
body { background-color: #990709; color: #020406; border-color: rgba(200, 255, 0, 0.75); } |
Sass | CSS — готовый результат |
$translucent-red: rgba(255, 0, 0, 0.5); p color: opacify($translucent-red, 0.3) background-color: transparentize($translucent-red, 0.25) .selector background-color: rgba(#333, 0.75) |
p { color: rgba(255, 0, 0, 0.8); background-color: rgba(255, 0, 0, 0.25); } .selector { background-color: rgba(51, 51, 51, 0.75); } |
Расшифровка коагулограммы
Протромбиновое время (ПВ)
ПВ – это время формирования тромбинового сгустка, если добавить в плазму кальций и тромбопластин. Показатель отражает 1 и 2 фазу плазменного свертывания и активность работы 2,5,7 и 10 факторов. Нормы протромбинового времени (ПВ) в разном возрасте:
- Новорожденные недоношенные дети – 14-19 сек;
- Новорожденные доношенные дети – 13-17 сек;
- Дети младшего возраста – 13-16 сек;
- Дети старшего возраста – 12-16 сек;
- Взрослые – 11-15 сек.
Терапия антикоагулянтами считается действенной, если ПВ увеличивается хотя бы в 1.5-2 раза.
МНО или протромбиновый коэффициент – это отношение ПВ больного в ПВ контрольной пробирки. Данный показатель ввела Всемирная организация здоровья в 1983 году для упорядочения работы лабораторий, так как каждая лаборатория использует различные реагенты-тромбопластины. Главная цель определения МНО – контроль приема больными непрямых антикоагулянтов.
Причины изменения показателей ПВ и МНО:
Binary configuration parameters
node-sass supports different configuration parameters to change settings related to the sass binary such as binary name, binary path or alternative download path. Following parameters are supported by node-sass:
Variable name | .npmrc parameter | Process argument | Value |
---|---|---|---|
SASS_BINARY_NAME | sass_binary_name | —sass-binary-name | path |
SASS_BINARY_SITE | sass_binary_site | —sass-binary-site | URL |
SASS_BINARY_PATH | sass_binary_path | —sass-binary-path | path |
SASS_BINARY_DIR | sass_binary_dir | —sass-binary-dir | path |
These parameters can be used as environment variable:
E.g. export SASS_BINARY_SITE=http://example.com/
E.g. sass_binary_site=http://example.com/
As a process argument:
E.g. npm install node-sass —sass-binary-site=http://example.com/
A Basic Mixin Approach
Let’s say we have the following layout:
We’ve been asked to create multiple themes for it. The theme has to change colors for all containers (including the main container) and the button, and the theme will be determined by a class in the body, or it could be an “outer” container as well:
Let’s build a mixin named “themable” which will contain our color scheme as parameters.
Then use it to generate our themes:
At this point, we’ve already saved a lot of time, but there are some problems with this approach:
Themes normally have lots of different properties beside colors. For example, if we wanted to modify the Bootstrap theme, writing a mixin following the previous “recipe” would be hard to maintain and the code hard to read. Plus, we’re not really following Sass best practices—for example, entering hex color codes directly into the mixin.
Extension Scope permalinkExtension Scope
When one stylesheet extends a selector, that extension will only affect style rules written in upstream modules—that is, modules that are loaded by that stylesheet using the rule or the rule, modules loaded by those modules, and so on. This helps make your rules more predictable, ensuring that they affect only the styles you were aware of when you wrote them.
️ Heads up!
Extensions aren’t scoped at all if you’re using the rule. Not only will they affect every stylesheet you import, they’ll affect every stylesheet that imports your stylesheet, everything else those stylesheets import, and so on. Without , extensions are global.
Умные breakpoints
Предположим, вы храните layout значения в картах. Вы должны изменить layout на определенной breakpoint, таким образом вы определяете два layout карт: $small-layout и $big-layout. Но как вы получаете нужные значения, если у вас только одна функция (описанная в параграфе ‘Используйте карты или списки’), которая возвращает вложенные значения из дефолтной карты (скорее всего из $big-layout)? Создать отдельную функцию для получения $small-layout? Добавить layout карту, как дополнительный параметр для существующей функции?
Есть идея получше: создать breakpoint mixin. Этот шаблон взят из Susy, фреймворка для layout и grids. С тех пор как Susy использует карты для layout, на “susy-breakpoint” mixin вы можете задать layout карту как необязательный параметр. Ничего сверхъестественного не произойдет, но когда вы будет использовать другие функции (например gutter()) внутри breakpoint mixin, она автоматически возвратит значения в нужной layout карте. “Умный” breakpoint работает таким же образом, но использует специальную функцию для получения карты. Это даже может быть обертка для susy-breakpoint если вы используете Susy (для использования такого же Layout для обоих).
$small-layout: ( header: ( height: 30px ) ); $big-layout: ( header: ( height: 60px ) ); $default-layout: $big-layout; $current-layout: $default-layout !default; @mixin smart-breakpoint($breakpoint, $layout) { $_temp: $current-layout; $current-layout: $layout !global; @media screen and ($breakpoint) { @content; } $current-layout: $_temp !global; } .header { height: layout-value(header, height); // the value will be 60px @include smart-breakpoint('max-width: 768px', $small-layout) { height: layout-value(header, height); // the value will be 30px } }
Работающий код можно найти здесь.
Можете поиграть с кодом и посмотреть, как он работает, но в принципе mixin получает layout как параметр и переопределяет глобальное значения, добавляя !global флаг вначале. Когда вы используете функцию карты внутри breakpoint mixin, новое значение становится значением по умолчанию и вы получаете желаемый результат. До того, как закончить работу, mixin изменяет значение по умолчанию.
Приступим!
Пока вы хотя бы раз не попробуете сгенерировать значения для свойств с помощью цикла, вы не познаете настоящую мощь Sassy CSS. Но мы начнём с основ SCSS и постепенно доберёмся до самого интересного.
Что такого есть в Sass/SCSS, чего нет в стандартном CSS?
- Вложенные правила: вы можете вкладывать CSS свойства, в несколько наборов скобок {}. Это сделает ваш CSS чище и понятней.
- Переменные: в стандартном CSS тоже есть переменные, но переменные Sass куда более мощный инструмент. Например, вы можете использовать переменные в циклах и генерировать значения свойств динамически. Также можно внедрять переменные в имена свойств, например так: property-name-N { … }.
- Лучшая реализация операторов: вы можете суммировать, вычитать, делить и умножать CSS значения. Sass реализация более интуитивна, чем стандартный функционал CSS calc().
- Функции: Sass позволяет многократно использовать CSS стили, как функции.
- Тригонометрия: помимо базовых операций (+, -, *, /), SCSS позволяет писать собственные функции. Например, функции sin и cos можно написать, используя только синтаксис Sass/SCSS. Конечно, вам понадобятся знания тригонометрии. Такие функция могут понадобится для создания анимации.
- Удобный рабочий процесс: вы можете писать CSS, используя конструкции, знакомые по другим языкам: for-циклы, while-циклы, if-else. Но имейте в виду, это только препроцессор, а не полноценный язык, Sass контролирует генерацию свойств и значений, а на выходе вы получаете стандартный CSS.
- Миксины: позволяют один раз создать набор правил, чтобы потом использовать их многократно или смешивать с другими правилами. Например, миксины используют для создания отдельных тем макета.
Препроцессор Sass
Sass не динамичный язык. Он не позволяет генерировать или изменять CSS свойства и значения в реальном времени. Но вы можете генерировать их более эффективным способом и внедрять в стандартные свойства (например, для CSS анимации).
Новый синтаксис
SCSS на самом деле не добавляет ничего нового в сам язык CSS. Это просто новый синтаксис, который в большинстве случаев сокращает время написания стилей.
Несколько фактов для начала
CSS препроцессоры добавляют новый синтаксис в CSS.
Существует 5 CSS препроцессоров: Sass, SCSS, Less, Stylus и PostCSS.
Здесь я буду говорить в основном о SCSS, который схож с Sass. О Sass можно почитать здесь: .
- SASS (.sass) Syntactically Awesome Style Sheets.
- SCSS (.scss) Sassy Cascading Style Sheets.
Обратите внимание на расширения, они схожи, но отличаются. Для любителей командной строки, есть возможность конвертировать .sass в .scss и наоборот:. Конвертация форматов .scss и .sass
Используем команду sass-convert
Конвертация форматов .scss и .sass. Используем команду sass-convert.
Sass — это первая спецификация Sassy CSS, её разработка началась в 2006 году. Позже разработали альтернативный синтаксис, который некоторые считают лучшей версией языка, а также изменилось первоначальное расширение .sass на новое .scss.
На данный момент ни один браузер не поддерживает CSS препроцессоры напрямую. Вы можете свободно экспериментировать с любым из 5 препроцессоров на сервисе codepen.io. Кроме того, используя препроцессор, вы должны будете установить его к себе на веб-сервер.
Эта статья о SCSS, но другие препроцессоры имеют схожие функции, хотя синтаксис может отличаться.
Superset
Sassy CSS в любом своём проявлении является «расширением» языка CSS, а значит, всё что работает в CSS, работает и в Sass/SCSS.
Переменные
В Sass/SCSS есть переменные, и они отличаются от тех, которые вы вероятно видели в CSS — они начинаются с двух тире (). В SCSS переменная обозначается знаком доллара ().
Определение переменных
Вы можете перезаписать имя переменной или задать для неё значение по умолчанию. Для этого добавьте метку !default к переменной, и если её значение не изменится в дальнейшем и не будет пустым, то будет использоваться заданное значение по умолчанию.
В примере выше окончательным значением переменной $text будет “Piece of string.”, а не “Another string.”, потому что переменная не пуста.
Sass переменные можно назначить любому свойству CSS