CSS – препроцессоры все популярнее среди веб – разработчиков. Почему?
Потому что они позволяют:
На данный момент наиболее популярными препроцессорами являются SASS и LESS.
О том, почему SASS лучше LESS, можно почитать в этой статье. Лучше ли — вопрос спорный, однако, я перешел с LESS на SCSS хотя бы потому, что тут есть:
О сравнении синтаксиса SCSS и SASS, можно почитать в этой статье. Лично я выбрал SCSS по причине обратной совместимости с CSS и, как следствие, возможности быстро включать старые CSS файлы в проект посредством директивы import. Для этого им надо изменить расширение на .scss.
Об основах SCSS уже писали faiwer1 и AbleBoy2, здесь же я хочу описать пару техник, которые мне действительно помогли.
В SCSS есть циклы, и это замечательно!
Предположим, у нас есть цветовая палитра сайта, и мы хотим раскрасить меню во все ее цвета.
index.html:
style.scss:
Инкремента в SCSS нет (кроме того, что в for, а нам надо аналог foreach), так что требуется вот такой трюк. Но при этом мы получаем полноценный итератор для прохода по списку $colors!
Такой компактный код трансформируется в такой CSS - код:
style.css
С помощью этой техники можно компактно и удобно писать media-запросы для «адаптивной» верстки (responsive layout).
style.scss
В CSS это будет выглядеть не столь компактно, особенно с учетом повторных применений этого mixin'a:
style.css
Подробнее о mixin'ах в SCSS и SASS пишет Крис Эпштайн (Chris Eppstein) 3
А как вы делаете жизнь удобнее посредством SCSS?
1 — «SCSS — немного практики, часть I»
2 — «Заметка ленивого верстальщика о SCSS и Compass Framework»
3 — Крис Эпштайн, Github:gist, 1215856
UPD: Проблему с большим количеством медиа-запросов можно решить вот этим джемом.
Потому что они позволяют:
- Сэкономить время
- Применять принцип DRY в CSS
- Сделать код более читаемым
На данный момент наиболее популярными препроцессорами являются SASS и LESS.
О том, почему SASS лучше LESS, можно почитать в этой статье. Лучше ли — вопрос спорный, однако, я перешел с LESS на SCSS хотя бы потому, что тут есть:
- Циклы
- Условные операторы
- Списки
О сравнении синтаксиса SCSS и SASS, можно почитать в этой статье. Лично я выбрал SCSS по причине обратной совместимости с CSS и, как следствие, возможности быстро включать старые CSS файлы в проект посредством директивы import. Для этого им надо изменить расширение на .scss.
Об основах SCSS уже писали faiwer1 и AbleBoy2, здесь же я хочу описать пару техник, которые мне действительно помогли.
Итераторы
В SCSS есть циклы, и это замечательно!
Предположим, у нас есть цветовая палитра сайта, и мы хотим раскрасить меню во все ее цвета.
index.html:
<!DOCTYPE html> <html> <head> <title>Наша техника</title> <link rel="stylesheet" href="css/style.css" /> </head> <body> <nav class="menu-main"> <ul> <li class="red"><a href="#">Автомобили</a></li> <li class="orange"><a href="#">Тракторы</a></li> <li class="green"><a href="#">Грузовики</a></li> <li class="blue"><a href="#">Паровозы</a></li> <li class="purple"><a href="#">Теплоходы</a></li> </ul> </nav> </body> </html>
style.scss:
$colors: #f74a3a #fcbe26 #8cc687 #4da5f2 #b01395; $i:0; .menu-main ul li { @each $col in red, orange, green, blue, purple { $i: $i + 1; &.#{$col} { background: nth($colors, $i); } } }
Инкремента в SCSS нет (кроме того, что в for, а нам надо аналог foreach), так что требуется вот такой трюк. Но при этом мы получаем полноценный итератор для прохода по списку $colors!
Такой компактный код трансформируется в такой CSS - код:
style.css
.menu-main ul li.red { background: #f74a3a; } .menu-main ul li.orange { background: #fcbe26; } .menu-main ul li.green { background: #8cc687; } .menu-main ul li.blue { background: #4da5f2; } .menu-main ul li.purple { background: #b01395; }
Respond-to
С помощью этой техники можно компактно и удобно писать media-запросы для «адаптивной» верстки (responsive layout).
style.scss
// Создаем mixin @mixin respond-to($media) { @if $media == handhelds { @media only screen and (max-width: 479px) { @content; } } @else if $media == wide-handhelds { @media only screen and (min-width: 480px) and (max-width: 767px) { @content; } } @else if $media == tablets { @media only screen and (min-width: 768px) and (max-width: 959px) { @content; } } } .menu-main { float: left; width: 300px; // Для телефонов @include respond-to(handhelds) { float: none; }; // Для телефонов с широким экраном @include respond-to(wide-handhelds) { float: none; }; // Для планшетов @include respond-to(tablets) { width: 240px; }; }
В CSS это будет выглядеть не столь компактно, особенно с учетом повторных применений этого mixin'a:
style.css
.menu-main { float: left; width: 300px; } @media only screen and (max-width: 479px) { .menu-main { float: none; } } @media only screen and (min-width: 480px) and (max-width: 767px) { .menu-main { float: none; } } @media only screen and (min-width: 768px) and (max-width: 959px) { .menu-main { width: 240px; } }
Подробнее о mixin'ах в SCSS и SASS пишет Крис Эпштайн (Chris Eppstein) 3
А как вы делаете жизнь удобнее посредством SCSS?
1 — «SCSS — немного практики, часть I»
2 — «Заметка ленивого верстальщика о SCSS и Compass Framework»
3 — Крис Эпштайн, Github:gist, 1215856
UPD: Проблему с большим количеством медиа-запросов можно решить вот этим джемом.
