/
Блог Хекслета
/
Код
/

SASS и SCSS: в чём разница и какой синтаксис выбрать в 2026

SASS и SCSS: в чём разница и какой синтаксис выбрать в 2026

19 марта 2026 г.

8 минут
SASS и SCSS: в чём разница и какой синтаксис выбрать в 2026

SASS и SCSS: в чём разница и какой синтаксис выбрать в 2026

Знакомая ситуация. Вы пишете CSS для кнопки — задаёте цвет, padding, скругление углов. Потом нужна вторая кнопка, похожая, но с другим цветом. Копируете блок, меняете один параметр. Потом третья. Через две недели в проекте 18 разных кнопок, и когда дизайнер просит «поменять оттенок синего во всём интерфейсе» — вы понимаете, что нужно искать этот цвет в 47 местах.

Это классический момент, когда люди впервые задумываются про препроцессоры CSS. Главный среди них — SASS. Только тут возникает вторая путаница: куда ни глянь, везде пишут «SASS/SCSS», как будто это одно и то же. И тут же — отдельно про SASS, отдельно про SCSS, с разными примерами кода. Что выбирать новичку — непонятно.

Короткий ответ: это один препроцессор с двумя вариантами оформления кода. SCSS — со скобками и точками с запятой, как обычный CSS. SASS — без них, со структурой через отступы, как в Python. Оба компилируются одним движком в один и тот же CSS. В 2026 году в 95% проектов используют SCSS.

Дальше — подробно: чем отличаются синтаксисы, когда какой брать, как поставить и написать первый файл, и где SASS вообще стоит в современном стеке фронтенда рядом с Tailwind, CSS Modules и нативными CSS-переменными.

Один препроцессор — два синтаксиса

SASS расшифровывается как Syntactically Awesome Style Sheets. Это название препроцессора в целом и одновременно — название одного из двух его синтаксисов. SCSS (Sassy CSS) — второй синтаксис.

Главное, что нужно понять с самого начала: оба синтаксиса обрабатываются одним и тем же движком (Dart Sass на 2026 год), и оба компилируются в один и тот же CSS. Возможности у них одинаковые — переменные, миксины, вложенность, импорты, функции. Разница только в том, как вы пишете код.

Параметр

SCSS

SASS

Расширение файла

.scss

.sass

Фигурные скобки

Есть, как в CSS

Нет

Точки с запятой

Обязательны

Не используются

Структура задаётся через

Скобки

Отступы, как в Python

Совместимость с обычным CSS

Полная — любой CSS работает как SCSS

Нет — нужен другой синтаксис

Когда появился

2010

2006

Доля в проектах 2026

~95%

~5%

Один и тот же фрагмент стилей в двух вариантах. SCSS:

$primary-color: #2563eb;

.card {
  padding: 1rem;
  border-radius: 8px;
  background: $primary-color;

  &__title {
    font-size: 1.25rem;
  }
}

То же самое в SASS:

$primary-color: #2563eb

.card
  padding: 1rem
  border-radius: 8px
  background: $primary-color

  &__title
    font-size: 1.25rem

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

На выходе после компиляции оба варианта дадут идентичный CSS — браузер не знает и не должен знать, что вы использовали препроцессор.

sass_02_comparison.png

Зачем вообще препроцессор в 2026 году

Раз уж нативный CSS за последние пять лет сильно подтянулся — есть кастомные свойства (CSS-переменные), есть nesting (вложенность), есть calc() и логические свойства — вопрос правомерный. Зачем тащить в проект ещё один инструмент?

Несколько причин, по которым SCSS всё ещё актуален:

Возможность SCSS

Что даёт

Есть ли в нативном CSS

Переменные времени компиляции

Работают везде, в том числе в селекторах и медиа-запросах

CSS-переменные работают только для значений, не в селекторах

Миксины

Переиспользуемые блоки стилей с параметрами

Нет аналога

Функции

Например, darken($color, 10%) для оттенков

Нет — есть только color-mix() с ограничениями

Вложенность с &

Удобный синтаксис для БЭМ и компонентов

Появилась в 2023, но без &-выражений в полном объёме

Партиалы и модули

Разбиение стилей на файлы с областями видимости

@import есть, но с другими правилами

Циклы и условия

@for, @each, @if — генерация CSS из данных

Нет

Где SCSS реально окупается:

  • Большие проекты с дизайн-системой — десятки компонентов с общими токенами цветов, отступов, типографики

  • Проекты с поддержкой нескольких тем (светлая/тёмная, разные брендинги для разных клиентов)

  • Когда команда привыкла к SCSS и переучиваться дороже, чем сохранить

Где SCSS уже не нужен:

  • Проекты на Tailwind CSS — там утилитарный подход вместо ручных стилей

  • Маленькие сайты на 5–10 страниц — оверкилл

  • Команды, которые перешли на CSS Modules или CSS-in-JS — там своя организация

В чём практическая разница: пример на кнопке

Чтобы стало понятно, насколько разные обе записи в реальной жизни — вот один компонент кнопки с тремя вариантами (primary, secondary, danger) в обоих синтаксисах.

SCSS:

$primary: #2563eb;
$secondary: #64748b;
$danger: #dc2626;

@mixin button-base {
  display: inline-flex;
  padding: 0.5rem 1rem;
  border-radius: 6px;
  cursor: pointer;
  transition: opacity 0.2s;

  &:hover {
    opacity: 0.9;
  }
}

.btn {
  @include button-base;

  &--primary {
    background: $primary;
    color: white;
  }

  &--secondary {
    background: $secondary;
    color: white;
  }

  &--danger {
    background: $danger;
    color: white;
  }
}

SASS:

$primary: #2563eb
$secondary: #64748b
$danger: #dc2626

@mixin button-base
  display: inline-flex
  padding: 0.5rem 1rem
  border-radius: 6px
  cursor: pointer
  transition: opacity 0.2s

  &:hover
    opacity: 0.9

.btn
  @include button-base

  &--primary
    background: $primary
    color: white

  &--secondary
    background: $secondary
    color: white

  &--danger
    background: $danger
    color: white

Если посчитать символы: SCSS-версия — 488 символов, SASS-версия — 437. Разница примерно 10%, и в основном за счёт {} и ;. Не такая большая, как могло показаться по обещаниям «более лаконичного синтаксиса».

В реальной работе разница чувствуется иначе. В SCSS быстрее копировать и переставлять блоки кода — не надо думать про отступы, всё держится скобками. В SASS меньше визуального шума, но любой случайный пробел ломает вложенность, и проблему бывает сложно найти.

Когда какой синтаксис выбирать

Простая логика выбора:

sass_03_decision.png

Ситуация

Что брать

Новый проект, нет жёстких предпочтений

SCSS — он стандарт индустрии

Переходите с обычного CSS

SCSS — можно просто переименовать .css в .scss и постепенно добавлять фишки

В команде уже пишут на SCSS

SCSS — не плодите разнобой

В существующем проекте все стили на .sass

SASS — поддерживайте стиль проекта

Вам нравится Python-подобный стиль с отступами

SASS — это вопрос личного вкуса

Учите фронтенд по туториалам и курсам

SCSS — большинство материалов на нём

Реальный расклад на рынке: вакансии и проекты на 2026 год почти полностью на SCSS. SASS-синтаксис встречается в основном в legacy-проектах или у команд, которые исторически его выбрали и не видят смысла переходить. Если учите с нуля — учите SCSS.

Установка и первый файл

Чтобы работать со SCSS, нужен компилятор. Браузер CSS-препроцессоры не понимает — он получает уже готовый CSS, а препроцессор работает на этапе сборки на вашем компьютере или CI-сервере.

Через npm (рекомендуется)

# Установка в проект как dev-зависимость
npm install -D sass

# Проверка
npx sass --version

В package.json добавьте скрипты для сборки:

{
  "scripts": {
    "build:css": "sass src/styles/main.scss dist/main.css",
    "watch:css": "sass --watch src/styles/main.scss dist/main.css"
  }
}

Дальше: npm run watch:css запустит компилятор в режиме слежения за изменениями. Меняете .scss — автоматически пересобирается .css.

Полезные флаги CLI

Флаг

Что делает

--watch

Следить за изменениями и пересобирать автоматически

--style=compressed

Минифицировать CSS для продакшена

--source-map

Генерировать source map, чтобы в DevTools видеть исходные .scss

--no-source-map

Отключить source map (для прода)

--load-path

Добавить путь для поиска импортов

Типичная команда для production-сборки:

sass src/styles/main.scss dist/main.css --style=compressed --no-source-map

Первый файл

Создайте src/styles/main.scss:

$primary-color: #2563eb;
$spacing-base: 1rem;

body {
  font-family: system-ui, sans-serif;
  color: #1e293b;
  margin: 0;
}

.button {
  background: $primary-color;
  color: white;
  padding: $spacing-base * 0.5 $spacing-base;
  border-radius: 6px;
  border: none;
  cursor: pointer;

  &:hover {
    opacity: 0.9;
  }

  &:disabled {
    opacity: 0.5;
    cursor: not-allowed;
  }
}

Запустите компиляцию — получите готовый CSS, который и подключайте в HTML через <link rel="stylesheet" href="dist/main.css">.

Интеграция с современными сборщиками

В большинстве реальных проектов 2026 года SASS не вызывают через CLI напрямую — он встроен в сборщик. Что нужно сделать в трёх популярных средах:

Среда

Что настроить

Vite

Поставить sass как dev-зависимость. Дальше импорты .scss в JS/TS работают автоматически, никаких настроек не надо

Webpack

Поставить sass, sass-loader, css-loader, style-loader. В конфиг добавить правило для .scss-файлов

Next.js

Поставить sass — встроенная поддержка. CSS Modules с .scss работают из коробки

Astro

Поставить sass — встроенная поддержка

Parcel

Полная поддержка из коробки, ставить sass отдельно не нужно

Тенденция последних лет — упрощение интеграции. В Vite, Next.js и других современных инструментах достаточно одной команды npm i -D sass, и всё начинает работать. Эпоха ручной настройки webpack-конфигов с десятком loaders постепенно уходит.

Структура проекта: партиалы и модули

Когда стилей становится много, их разбивают на файлы. Файлы, которые не должны компилироваться сами по себе (а только подключаться в главный файл), называют партиалами. Имя партиала начинается с подчёркивания: _variables.scss, _mixins.scss.

Типичная структура:

sass_04_structure.png
src/styles/
  main.scss              # точка входа, компилируется в CSS
  _variables.scss        # цвета, отступы, шрифты — токены
  _mixins.scss           # переиспользуемые миксины
  _functions.scss        # SCSS-функции для расчётов
  base/
    _reset.scss          # сброс браузерных стилей
    _typography.scss     # базовая типографика
  components/
    _button.scss
    _card.scss
    _modal.scss
  layouts/
    _header.scss
    _footer.scss

Содержимое main.scss:

// Сначала переменные и миксины — их используют остальные модули
@use 'variables' as *;
@use 'mixins' as *;

// Базовые стили
@use 'base/reset';
@use 'base/typography';

// Компоненты
@use 'components/button';
@use 'components/card';
@use 'components/modal';

// Раскладка
@use 'layouts/header';
@use 'layouts/footer';

Важная деталь про @use vs @import. В старых туториалах часто видите @import — это устаревшая директива. В новых проектах рекомендуется @use: у неё предсказуемая область видимости и не происходит «загрязнения» глобальными переменными. Если хотите, чтобы переменные из файла были доступны без префикса — пишите @use 'variables' as *.

Конвертация: между форматами

Из чего

Во что

Как

CSS

SCSS

Переименовать .css в .scss — больше ничего не нужно. Любой валидный CSS = валидный SCSS

CSS

SASS

Нужно переписать: убрать скобки и точки с запятой, организовать отступы. Или использовать sass-convert

SCSS

SASS

sass-convert input.scss output.sass

SASS

SCSS

sass-convert input.sass output.scss

Утилита sass-convert поставляется отдельно — она входит в Ruby-версию SASS, не в Dart Sass. Если её нет под рукой, можно использовать онлайн-конвертеры. Для разовой задачи их хватает; для регулярной работы лучше выбрать один синтаксис и придерживаться его.

Антипаттерны новичков

Глубокая вложенность ради самой вложенности. Когда видишь, что SCSS даёт вложенность через &, возникает соблазн вкладывать всё. В результате получаются селекторы вроде .page .section .article .header .title — длинные, медленные и неудобные. Правило: не больше трёх уровней вложенности. После этого выносите в отдельный селектор.

Миксины для одного использования. Миксин нужен, когда блок стилей используется в нескольких местах. Если он используется один раз — это просто лишний уровень абстракции, который усложняет чтение кода.

Использование @import вместо @use. @import устарел, ведёт к коллизиям имён и глобальному скоупу. @use с явными импортами — современный подход.

Магические числа вместо переменных. Если padding: 12px встречается у вас в пяти местах — это не padding, это design token. Вынесите в переменную и используйте её. Через полгода, когда дизайнер скажет «давайте сделаем чуть просторнее», вы скажете спасибо.

В SASS-синтаксисе — смешивание табов и пробелов. SASS критически зависит от отступов. Смешивание табов и пробелов ведёт к ошибкам компиляции, которые сложно найти глазами. Настройте редактор на единый стиль отступов в проекте.

Слепое доверие к ИИ-генерации SCSS. Cursor и ChatGPT уверенно пишут SCSS, но иногда используют устаревшие конструкции (@import вместо @use, divide() через слеш и так далее). После генерации читайте, что вам сгенерировали.

SASS в современном фронтенде: где он остался

С 2020 по 2026 год экосистема фронтенда сильно поменялась. Появились утилитарные CSS-фреймворки, CSS Modules, CSS-in-JS. Куда SCSS встаёт сейчас:

Подход

Где использовать

SCSS нужен?

SCSS + БЭМ

Классический подход. Большие проекты с дизайн-системой

Да — основной инструмент

SCSS + CSS Modules

React, Next.js, Vue — стили локальны компоненту

Да — как препроцессор поверх модулей

Tailwind CSS

Утилитарные классы, минимум кастомного CSS

Обычно нет — Tailwind закрывает большую часть задач

CSS-in-JS (styled-components, emotion)

Стили внутри JS-кода компонентов

Нет — у них своя система

Чистый CSS с переменными и nesting

Простые сайты, прототипы, маленькие проекты

Можно обойтись

Что важно для разработчика 2026 года: SCSS — это не «единственный способ писать стили». Это один из инструментов, и его доля постепенно уменьшается в пользу Tailwind и нативного CSS. Но в большинстве легаси-проектов и многих новых командных продуктах SCSS живёт и хорошо себя чувствует. Учить его всё ещё имеет смысл.

Если же планируете большой путь во фронтенд — кроме SCSS пригодятся и другие инструменты. Подробнее о выборе стека и развитии в профессии — в обзоре про фронтенд-разработчика в 2026.


FAQ

Можно ли смешивать .sass и .scss в одном проекте?

Технически да — Dart Sass компилирует оба формата. Но это плохая практика: добавляет путаницы при чтении кода и при настройке инструментов. Выберите один синтаксис и придерживайтесь его во всём проекте.

SASS устарел в 2026 году?

Нет. Старая реализация на Ruby устарела ещё в 2019 году. LibSass (C) тоже устарела. Актуальная версия — Dart Sass — активно развивается, поддерживает оба синтаксиса (SASS и SCSS) и используется в продакшене миллионов проектов. Сам препроцессор не устарел, просто конкурирует с новыми подходами.

Что лучше для карьеры — SASS или SCSS?

SCSS. В вакансиях, в туториалах, в открытых проектах — почти везде SCSS. SASS-синтаксис встречается редко и его легко прочитать за пять минут, если знаешь SCSS. Не тратьте время на оба — учите SCSS.

Чем SCSS отличается от CSS-переменных?

SCSS-переменные обрабатываются на этапе компиляции — в итоговом CSS их уже нет, есть подставленные значения. CSS-переменные (var(--color-primary)) работают в браузере в рантайме — их можно менять JavaScript-кодом, они каскадируются. Это разные инструменты для разных задач. Часто их комбинируют: SCSS-переменные для статических дизайн-токенов, CSS-переменные для динамических тем (светлая/тёмная).

Нужен ли SCSS, если есть Tailwind CSS?

В большинстве случаев нет. Tailwind закрывает основные задачи через утилитарные классы, и SCSS становится избыточным. Иногда комбинируют: Tailwind для большинства стилей плюс немного SCSS для сложных кастомных компонентов. Но это не основной use-case Tailwind.

Чем SCSS отличается от Less и Stylus?

Less и Stylus — это другие CSS-препроцессоры с похожими идеями (переменные, миксины, вложенность). Less был популярен в начале 2010-х, особенно в проектах на Bootstrap 3. Stylus всегда был нишевым. К 2026 году SCSS почти полностью вытеснил оба — в новых проектах их встретить сложно. Если попали в проект на Less, переучиваться особо не надо: концепции те же, синтаксис чуть отличается.

А что насчёт PostCSS?

PostCSS — это не препроцессор, а постпроцессор: он берёт уже написанный CSS (или SCSS-вывод) и трансформирует через плагины. Самый известный плагин — Autoprefixer (добавляет вендорные префиксы). PostCSS и SCSS не конкурируют — они часто работают вместе: сначала SCSS компилирует исходники в CSS, потом PostCSS обрабатывает результат.

Стоит ли начинать новый проект на SCSS в 2026 году?

Зависит от проекта. Большой продукт с дизайн-системой, командой и долгим жизненным циклом — да, SCSS отличный выбор. Лендинг или MVP — лучше Tailwind или нативный CSS, меньше настройки. React-приложение с компонентным подходом — посмотрите на CSS Modules или CSS-in-JS вместо чистого SCSS. Универсального ответа нет.

Никита Вихров

3 месяца назад

0

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845