Препроцессоры: Sass, Less, Stylus

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


Sass

Sass (Syntactically Awesome Stylesheets) является одним из самых мощных и широко используемых CSS-препроцессоров. Он предлагает два синтаксиса:

  • SCSS — синтаксис, максимально близкий к стандартному CSS, использующий фигурные скобки и точки с запятой.
  • Sass — более компактный синтаксис с отступами, без фигурных скобок и точек с запятой.

Ключевые возможности Sass

  1. Переменные Позволяют хранить значения цветов, шрифтов, размеров и переиспользовать их по всему проекту:

    $primary-color: #3498db;
    $font-size: 16px;
    
    body {
      color: $primary-color;
      font-size: $font-size;
    }
  2. Вложенные правила Облегчают структуру стилей и делают их более читаемыми:

    nav {
      ul {
        margin: 0;
        padding: 0;
        li {
          display: inline-block;
          a {
            text-decoration: none;
            color: $primary-color;
          }
        }
      }
    }
  3. Миксины Позволяют создавать повторно используемые блоки стилей с параметрами:

    @mixin border-radius($radius) {
      -webkit-border-radius: $radius;
      -moz-border-radius: $radius;
      border-radius: $radius;
    }
    
    .button {
      @include border-radius(5px);
    }
  4. Функции и операции Sass поддерживает арифметику и встроенные функции для работы с цветами, списками и строками:

    $base-padding: 10px;
    $double-padding: $base-padding * 2;
    
    .container {
      padding: $double-padding;
    }
    
    .highlight {
      background-color: lighten($primary-color, 20%);
    }
  5. Импорт файлов Позволяет структурировать проект на модули:

    @import 'variables';
    @import 'mixins';
    @import 'components/button';

Less

Less — препроцессор, синтаксис которого ближе к стандартному CSS и отличается простотой интеграции с веб-проектами. Основные возможности:

  1. Переменные Объявляются через @:

    @primary-color: #e74c3c;
    @font-size: 14px;
    
    body {
      color: @primary-color;
      font-size: @font-size;
    }
  2. Вложенность Поддерживает вложенные селекторы, аналогично Sass:

    .menu {
      ul {
        li {
          a {
            color: @primary-color;
          }
        }
      }
    }
  3. Миксины Less позволяет определять функции-стили, которые можно использовать с параметрами:

    .border-radius(@radius) {
      -webkit-border-radius: @radius;
      -moz-border-radius: @radius;
      border-radius: @radius;
    }
    
    .box {
      .border-radius(10px);
    }
  4. Операции и функции Less поддерживает арифметические операции и встроенные функции для работы с цветами и размерами:

    @base: 16px;
    @double: @base * 2;
    
    .container {
      width: @double;
    }
    
    .highlight {
      color: lighten(@primary-color, 10%);
    }
  5. Импорт файлов Позволяет подключать внешние файлы и создавать модульную структуру:

    @import "variables.less";
    @import "mixins.less";

Stylus

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

Основные особенности Stylus

  1. Переменные Объявление переменных не требует специального символа:

    primaryColor = #2ecc71
    fontSize = 16px
    
    body
      color primaryColor
      font-size fontSize
  2. Вложенные правила В Stylus вложенность реализуется через отступы:

    nav
      ul
        margin 0
        padding 0
        li
          display inline-block
          a
            text-decoration none
            color primaryColor
  3. Миксины и функции Stylus позволяет создавать функции и миксины с гибкой передачей параметров:

    border-radius(radius)
      -webkit-border-radius radius
      -moz-border-radius radius
      border-radius radius
    
    .button
      border-radius(5px)
  4. Операции и логика Поддержка арифметики, условий, циклов и функций делает Stylus мощным инструментом для динамических стилей:

    basePadding = 10px
    doublePadding = basePadding * 2
    
    .container
      padding doublePadding
    
    lightenColor(color, amount)
      return color + amount
    
    .highlight
      background-color lightenColor(primaryColor, 20%)
  5. Импорт и модульность Stylus позволяет импортировать файлы и объединять стили в логические модули:

    @import 'variables'
    @import 'mixins'

Сравнение Sass, Less и Stylus

Особенность Sass Less Stylus
Синтаксис SCSS / Sass CSS-подобный Минималистичный
Переменные $var @var var = value
Вложенность Да Да Да
Миксины Да, @mixin Да Да, функции
Поддержка логики Ограничена Ограничена Полная (условия, циклы)
Импорт файлов @import @import @import
Интеграция с сборщиками Webpack, Gulp, Parcel Webpack, Gulp, Parcel Webpack, Gulp, Parcel

Практические рекомендации

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

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