Code Style
Основы
Вайтспейсы
Во-первых, мы используем минималистичный стиль написания Стайлуса, из излишеств используем двоеточие между свойством и значением (с последующим пробелом):
.foo
width: 10px
Отступы — два пробела, никаких табов (четыре пробела — уже слишком много, в языках, основанных на индентах, два — самое то).
Селекторы
Множественные селекторы нужно писать каждый на новой строке, через запятую (хотя Стайлус разрешает писать их без запятой, это может выстрелить в ногу в самый неожиданный момент):
.foo,
.bar
width: 10px
Комбинаторы пишутся с пробелом вокруг, на одной строке:
.foo + .bar
width: 10px
Если указывается имя элемента, то оно пишется в верхнем регистре:
TEXTAREA.foo
width: 10px
Порядок свойств
Порядок свойств используем примерно такой, главное — группируем однотипные свойства.
URL
Внутри url()
используем двойные кавычки:
.foo
background: url("some-path-to-pic.png")
Это нужно для того, чтобы не пасть жертвой гибкого синтаксиса Стайлуса, который, если вы создадите переменную png = "lol"
, подставит её значение в подобном случае (т.е. Стайлус содержимое урла без кавычек будет воспринимать как обычный аргумент, в котором могут использоваться переменные).
Значения
-
Десятичные значения записываются с нулём в начале, например,
0.5em
-
Цвета записываются как можно короче, апперкейсом:
#FAFAFA
, а не#fafafa
.#FFF
, а не#FFFFFF
.
-
Везде, где можно, после запятой ставится пробел. Исключение: набор компонент цвета в
rgba
—rgba(210,0,3, 0.4)
. -
rgba
желательно записывать в понимаемой Стайлусом нотацииrgba(#FFF, 0.5)
— это гораздо лучше читается и если используется сложный цвет, его будет проще «воссоздать» в графическом редакторе, скопировав hex-значение. -
Если в значениях используются и вычисления, и множественные значения, для лучшей читаемости нужно оборачивать вычисления в скобки:
padding: ($xs - 0.1*rem) ($m - 0.2*rem) ($xs - 0.1*rem) ($xs - 0.1*rem)
Переменные
Все переменные стайлуса нужно именовать используя символ бакса — $foo
, это и читабельнее и позволит избежать конфликтов с различными другими сущностями.
Вложенность
Вложенность через амперсанд используем с опаской, только если это действительно нужно. Это обусловлено плохой читаемостью и поиском каскадных конструкций.
Пишем так:
.foo
width: 10px
.foo:hover
background: red
.foo-bar
height: 10px
Исключения два:
-
Если вы делаете какой-то глобальный модификатор вроде
.page_minified
, то такой каскад нужно использовать чтобы случайно не применить свойства в общем скоупе, без модификатора. -
Если вы планируете расширять (
@extends .foo
) соответствующую группу свойств, в этом случае из-за особенностей работы экстендов в Стайлусе придётся использовать вложенность.
При использовании вложенности амперсанд надо указывать всегда, примерно так:
.foo
color: blue
&:hover
color: red
& .bar
background: lime
Структурирование
Если в файле находится много всяких смысловых блоков, необходимо их группировать и снабжать описательными комментариями. При этом, друг от друга блоки отделяются двумя переносами строки для большей читаемости:
// Some block doing cool stuff
.foo
width: 10px
.foo__element
height: 10px
// Another strange block
.strange-foo
position: sticky
right: 100px
.strange-foo_dope
left: 10px
Во вложенных конструкциях (будь то условия Стайлуса, или вложенные блоки правил) необходимо по возможности класть их в конец блока правил, после стилей применяемых к исходному селектору, при этом их нужно отбивать пустой строкой:
.foo
color: red
background: lime
if $whatever == true
display: none
else
display: block
&:before
content: ''
nib
Для разворачивания префсов используем nib, поэтому пишем CSS3-свойства без префиксов:
.fpp
border-radius: 10px
transition: transform 1s, width .4s linear
а Ниб уже сам развернёт всё, что нужно:
.foo { -webkit-border-radius: 10px; border-radius: 10px; -webkit-transition: -webkit-transform 1s, width 0.4s linear; -moz-transition: -moz-transform 1s, width 0.4s linear; -o-transition: -o-transform 1s, width 0.4s linear; -ms-transition: -ms-transform 1s, width 0.4s linear; transition: transform 1s, width 0.4s linear; }
if ie
Мы используем отдельную таблицу стилей для ie, которую собираем, используя оригинальную таблицу стилей, пропущенную с установленной переменной Стайлуса ie = true
. С помощью этого можно и нужно писать условия для ie прямо в основных таблицах стилей.
.foo
width: 10px
width: 12px if ie
if ie
.foo-ololo
height: 12px
Таким образом можно как переопределять те или иные свойства (можно заметить, что при использовании в одном блоке правил достаточно использовать условие только во второй раз — для большинства свойств CSSO уберёт лишние стили сам), так и доопределять целые селекторы, используя условие блочно.
Кроме того, можно использовать отрицание if !ie
— в таком случае можно будет задавать стили, которые не попадут в конечную таблицу стилей для ie. Это может быть полезно или для того, чтобы гарантированно не включать где-то неотключаемый hasLayout, или же просто для оптимизации: раз ie не поддерживает псевдоэлементы, то можно их обрамлять в условия так, что в таблице стилей для ie не будет этих, лишних для него, стилей:
.foo
width: 10px
if !ie
.foo:before
content: 'ololo'
if-ie.styl
В if-ie.styl есть гораздо больше всяких полезных вещей, рекомендуется изучить его ридми.
Скажем, свойство zoom
можно не обрамлять в if ie
— это делается автоматически, аналогично большинство CSS3-свойств в таблице стилей для IE не попадут.