Препроцессоры CSS позволяют расширять возможности стандартного CSS, добавляя переменные, вложенные правила, миксины и функции, что облегчает поддержку и масштабирование стилей в крупных проектах. Среди наиболее популярных инструментов выделяются Sass, Less и Stylus. Каждый из них имеет свои особенности, синтаксис и возможности интеграции с современными сборщиками.
Sass (Syntactically Awesome Stylesheets) является одним из самых мощных и широко используемых CSS-препроцессоров. Он предлагает два синтаксиса:
Переменные Позволяют хранить значения цветов, шрифтов, размеров и переиспользовать их по всему проекту:
$primary-color: #3498db;
$font-size: 16px;
body {
color: $primary-color;
font-size: $font-size;
}Вложенные правила Облегчают структуру стилей и делают их более читаемыми:
nav {
ul {
margin: 0;
padding: 0;
li {
display: inline-block;
a {
text-decoration: none;
color: $primary-color;
}
}
}
}Миксины Позволяют создавать повторно используемые блоки стилей с параметрами:
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
}
.button {
@include border-radius(5px);
}Функции и операции Sass поддерживает арифметику и встроенные функции для работы с цветами, списками и строками:
$base-padding: 10px;
$double-padding: $base-padding * 2;
.container {
padding: $double-padding;
}
.highlight {
background-color: lighten($primary-color, 20%);
}Импорт файлов Позволяет структурировать проект на модули:
@import 'variables';
@import 'mixins';
@import 'components/button';Less — препроцессор, синтаксис которого ближе к стандартному CSS и отличается простотой интеграции с веб-проектами. Основные возможности:
Переменные Объявляются через @:
@primary-color: #e74c3c;
@font-size: 14px;
body {
color: @primary-color;
font-size: @font-size;
}Вложенность Поддерживает вложенные селекторы, аналогично Sass:
.menu {
ul {
li {
a {
color: @primary-color;
}
}
}
}Миксины Less позволяет определять функции-стили, которые можно использовать с параметрами:
.border-radius(@radius) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
.box {
.border-radius(10px);
}Операции и функции Less поддерживает арифметические операции и встроенные функции для работы с цветами и размерами:
@base: 16px;
@double: @base * 2;
.container {
width: @double;
}
.highlight {
color: lighten(@primary-color, 10%);
}Импорт файлов Позволяет подключать внешние файлы и создавать модульную структуру:
@import "variables.less";
@import "mixins.less";Stylus отличается высокой гибкостью и минималистичным синтаксисом, позволяя писать стили без фигурных скобок, точек с запятой и даже без двоеточий.
Переменные Объявление переменных не требует специального символа:
primaryColor = #2ecc71
fontSize = 16px
body
color primaryColor
font-size fontSizeВложенные правила В Stylus вложенность реализуется через отступы:
nav
ul
margin 0
padding 0
li
display inline-block
a
text-decoration none
color primaryColorМиксины и функции Stylus позволяет создавать функции и миксины с гибкой передачей параметров:
border-radius(radius)
-webkit-border-radius radius
-moz-border-radius radius
border-radius radius
.button
border-radius(5px)Операции и логика Поддержка арифметики, условий, циклов и функций делает Stylus мощным инструментом для динамических стилей:
basePadding = 10px
doublePadding = basePadding * 2
.container
padding doublePadding
lightenColor(color, amount)
return color + amount
.highlight
background-color lightenColor(primaryColor, 20%)Импорт и модульность Stylus позволяет импортировать файлы и объединять стили в логические модули:
@import 'variables'
@import 'mixins'| Особенность | Sass | Less | Stylus |
|---|---|---|---|
| Синтаксис | SCSS / Sass | CSS-подобный | Минималистичный |
| Переменные | $var | @var | var = value |
| Вложенность | Да | Да | Да |
| Миксины | Да, @mixin | Да | Да, функции |
| Поддержка логики | Ограничена | Ограничена | Полная (условия, циклы) |
| Импорт файлов | @import | @import | @import |
| Интеграция с сборщиками | Webpack, Gulp, Parcel | Webpack, Gulp, Parcel | Webpack, Gulp, Parcel |
Препроцессоры существенно упрощают создание поддерживаемых и масштабируемых стилей, а правильный выбор инструмента зависит от специфики проекта и предпочтений команды разработчиков.