Статьи

Знакомство со стилусом

Если вы являетесь частью передовой сцены, вы, возможно, слышали о Стилусе , дальнем родственнике из Sass, которого никто не знает очень хорошо. Как и Sass, Stylus — это CSS-препроцессор, написанный на Node.js. Согласно хранилищу GitHub , он описывает себя как:

[…] Революционно новый язык, обеспечивающий эффективный, динамичный и выразительный способ создания CSS.

Ладно, революционер может быть немного преувеличен. Но все остальное правда.

Что, еще один !?

Вид. Но Стилус не новенький. Он существует примерно с начала 2011 года, но я вижу в нем довольно дискретное сообщество. Кстати, вы знали, что последняя модернизация Mozilla Developer Network была сделана с помощью Stylus? Дэвид Уолш , который участвовал в проекте, также написал о том, как начать работу со Stylus .

Так в чем же преимущества стилуса перед Sass? Ну, он встроен в Node.js, что звучит для меня как плюс. И хотя совершенно нормально использовать Sass в рабочем процессе Node благодаря оболочке Node-Sass для LibSass , он не делает LibSass написанным на Node для всего этого.

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

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

Так что ты думаешь? Хотите попробовать?

Начиная

Как указывалось ранее, Stylus написан на Node.js, поэтому мы можем установить его как любой другой пакет npm:

$ npm install stylus -g

Теперь вы можете подключить его к рабочему процессу Node с помощью JavaScript API или использовать исполняемый файл командной строки для компиляции таблиц стилей. Для простоты мы будем использовать инструмент командной строки stylusGulp или Grunt .

 stylus ./stylesheets/ --out ./public/css

Предыдущая команда говорит stylus.stylstylesheetspublic/css Конечно, вы также можете посмотреть каталог на предмет изменений:

 stylus --watch ./stylesheets/ --out ./public/css

Написание стилуса стилей

Если вы только начинаете и не хотите чувствовать себя перегруженным новым синтаксисом, знайте, что вы можете написать простой CSS в файле .styl Так как Stylus поддерживает стандартный синтаксис CSS, совершенно нормально начинать с кода CSS только для его медленного улучшения.

Основной синтаксис

Что касается самого синтаксиса, почти все необязательно. Брекеты: зачем? Точка с запятой: давай! Колоны: угробите их тоже. Скобки: пожалуйста. Ниже приведен абсолютно корректный код стилуса:

 .foo
.bar
  color tomato
  background deepskyblue

Поначалу это немного мешало, но мы могли бы к этому привыкнуть, особенно когда есть подсветка синтаксиса. Как вы можете догадаться, предыдущий код компилируется в:

 .foo, .bar {
  color: tomato;
  background: deepskyblue;
}

переменные

Наиболее используемой особенностью CSS препроцессоров должна быть способность определять переменные. Не удивительно, что Стилус также предлагает это. Хотя в отличие от Sass, они объявляются знаком равенства ( = Кроме того, ведущий знак доллара ( :

 $

Теперь есть что-то, что делает Stylus, что не делает Sass или любой другой препроцессор: поиск значения свойства. Допустим, вы хотите применить отрицательное левое поле на половину ширины; в Sass вам придется хранить ширину в переменной, но не в стилусе:

 // Defining a `text-font-stack` variable
text-font-stack = 'Helvetica', 'Arial', sans-serif;

// Using it as part of the `font` property
body
  font 125% / 1.5 text-font-stack

Используя .foo
width 400px
position absolute
left 50%
margin-left (@width / 2)
@width
Довольно аккуратно! Еще один интересный вариант использования для этого — условно вывести свойство в зависимости от того, было ли оно уже определено:

 width

В этом случае для .foo
// ... other styles
z-index: 1 unless @z-index
z-index.foo
Соедините это с миксинами, и вы действительно что-то получите.

Примеси

Говоря об этом, давайте определим миксин, поскольку это, вероятно, одна из самых популярных функций Sass! Миксин в стилусе не нуждается в конкретном ключевом слове; это миксин, если в конце его имени есть круглые скобки (пустые или нет).

 z-index

В том же size(width, height = width)
width width
height height
@include+

 .foo
  size(100px)

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

 .foo
  size 100px

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

 overflow(value)
  if value == ellipsis
    white-space nowrap
    overflow hidden
    text-overflow ellipsis
  else
    overflow: value

Если заданное значение является ellipsis Иначе, это печатает данное значение. Вот как вы бы это использовали:

 .foo
  overflow ellipsis

И это даст:

 .foo {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

Ты должен признать, это довольно крутой трюк. Хотя это может сбивать с толку (и, возможно, опасно), возможность расширить стандартные свойства CSS дополнительными значениями на самом деле является интересной концепцией.

Если вы хотите передать некоторый контент в @content{block}+ Во время включения вам нужно только поставить префикс имени миксина на has-js()
html.js &
{block}

.foo
+has-js()
color red

 html.js .foo {
  color: #f00;
}

Этот код будет скомпилирован в:

 arguments

Последняя очень интересная особенность миксинов Stylus: у них всегда есть локальная переменная arguments, содержащая все аргументы (если таковые имеются), переданные в mixin при включении. Эта переменная может быть обработана и обработана как массив, например, для получения значений по определенным индексам, используя [..]

Последние мысли

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

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

Обратите внимание, что у Stylus также есть свой собственный фреймворк, как у Sass Compass , и он называется Nib . Nib — это набор инструментов, предоставляющий дополнительные помощники и кросс-браузерные миксины для стилуса.

Некоторым это может понравиться, другим — нет. Мой совет должен быть очень строг с синтаксисом, хотя. Работа с таким толерантным синтаксисом не всегда может быть таким блаженством. В любом случае, приятно видеть приличное совпадение с Sass.