Если вы следили за последними крупными анонсами сообщества Sass, возможно, вы видели огромное объявление LibSass 3.0 на SassConf 2014.
В течение некоторого времени драгоценный камень Sass Ruby получает более продвинутые функции, в то время как LibSass обновлялся не так быстро. Это означает, что многие люди, использующие LibSass для компиляции своего Sass (обычно через node-sass в рабочем процессе Grunt / Gulp), не смогли использовать передовые инструменты Sass, подобные тем, о которых вы читаете здесь, в SitePoint.
Большой анонс состоит в том, что Ruby Sass теперь будет ожидать согласования функций с LibSass , а затем будет поддерживать их на той же скорости, насколько это возможно. LibSass 3.0 уже выпущен, и вы можете интегрировать его в свои бегунки задач с самой последней версией node-sass .
Однако что делает LibSass таким важным? Самое большое преимущество над Ruby Sass в том, что он быстрее — намного быстрее . Если более быстрое время компиляции звучит для вас хорошо, вот хорошее введение в установку LibSass .
В этой статье я буду очень практичен: я поделюсь всеми «хитростями», которые я обнаружил, когда пытался скомпилировать свою библиотеку миксина с LibSass. Хотя LibSass 3.0 близка к Ruby Sass 3.4.6, есть несколько вещей, которые не работают одинаково. Вы можете не сталкиваться со всем этим в своем Sass, но если вы столкнетесь с этими небольшими ошибками, я надеюсь, что этот список поможет вам устранить их.
Примечание: в этой статье «Ruby Sass» всегда относится к 3.4.6, а «LibSass» всегда относится к 3.0.1, если не указано иное.
Не проверяйте @if not ...
В Ruby Sass @if not not index($list, $value) {}
Я использовал это условие в своих проектах Ruby Sass, так как Хьюго предложил, чтобы оно заставило условие оценить истинное логическое значение.
Однако в LibSass not
В LibSass вы можете обойти эту проблему, используя одно из следующих:
@if index($list, $value) { ... }
@if index($list, $value) != null { ... }
@if index($list, $value) > 0 { ... }
Проверьте это в этой сути Засмейстера .
Следите за своим математическим синтаксисом.
Ruby Sass позволит вам получить следующее:
$map: (value: 1200px);
.container {
max-width: map-get($map,value)-1;
}
// Ruby output: 1199px
// LibSass output: 1200px -1
Однако LibSass ожидает, что вы поставите пробел до и после символа минус:
$map: (value: 1200px);
.container {
max-width: map-get($map,value) - 1;
}
//output
.container {
max-width: 1199px; }
Проверьте это в этой сути Засмейстера .
@error
В Ruby Sass @error
Это также позволяет вам интерполировать переменные в полезное сообщение об ошибке.
Однако в LibSass строка @error
Поскольку он просто печатается для вывода, он не будет интерполировать переменные, если они находятся внутри кавычек. Я полагаю, что вы все еще можете использовать директиву @error
Если это так, вы можете обойти проблему интерполяции переменных с конкатенацией строк:
$error-text: 'error text';
.at-error {
color: blue;
@error 'Error: #{$error-text}.'
@error 'Error: ' + $error-text + '.';
}
//output:
.at-error {
color: blue;
@error 'Error: #{$error-text}.';
@error 'Error: error text.'; }
Посмотрите на это в действии в этом Сассмейстере .
( @warn
Аккуратные сетки работают; Сьюзи еще не работает.
Не так давно я писал о переходе с Neat на Susy для Sass Grids . Однако, если вы используете LibSass, я призываю вас удержать этот переключатель. Сьюзи еще не работает на LibSass. Однако, несмотря на то, что Susy не работает как есть, вы можете создать свою собственную сеточную систему, используя Su .
Neat , с другой стороны, просто использует переменные для свойств конфигурации: сейчас он отлично работает на LibSass. Посмотрите, как Neat работает на LibSass в этой истории Сассмейстера .
Функции selector-*()
&
Если вы один из тех редких людей, которые нашли хороший вариант использования новых selector-
У меня нет обходного пути, чтобы предложить это, кроме как «пересмотреть свою стратегию вложения» (что, вероятно, полностью исключило бы необходимость интерполяции селектора).
Директива @at-root
Ruby Sass позволяет вам использовать @at-root
Однако LibSass обрабатывает @at-root
.at-root-test {
content: 'parent';
.nest {
content: 'child';
@at-root .selector {
content: "not nested";
}
}
}
//output
.at-root-test {
content: 'parent'; }
.at-root-test .nest {
content: 'child';
@at-root .selector {
content: "not nested"; }
}
Опять же, обходной путь для этого заключается в рефакторинге вашего вложения. Проверьте это в этой сути Засмейстера .
Карты
Поддержка карт — одна из самых больших функций, добавленных в LibSass 3. Обычные функции карт работают так, как вы ожидаете. В LibSass 3 вы можете использовать map-keys()
map-values()
map-has-keys()
map-get()
map-merge()
.
Карты, как вы уже собрали, в основном находятся на одном уровне между Libsass 3 и Ruby Sass. Наслаждайтесь их использованием!
простираться
Еще одно важное дополнение к LibSass 3 — поддержка @extend
Я не знаю каких-либо различий между Ruby Sass и LibSass по этому вопросу, но это достаточно существенное обновление, которое стоит упомянуть здесь.
Вы можете видеть, как @extend
.
Вывод
Повышение скорости, которое вы получите от перехода на LibSass, огромно. Тем не менее, есть еще несколько областей, в которых функции LibSass не соответствуют функциональности Ruby Sass 3.4+. Если ваша библиотека миксинов зависит от этих специфических функций, пока отложите обновление.
Если вы перешли на LibSass и обнаружили другие проблемы или некоторые другие синтаксические изменения или обходные пути, пожалуйста, поделитесь ими в комментариях!