Стоит ли отказываться от CSS препроцессоров в 2025 году

Разбираем, можно ли в 2025 году отказаться от Sass и PostCSS в пользу нативного CSS, Lightning CSS и Tailwind. Плюсы и минусы современных инструментов.

Когда-то давно в нативном CSS не хватало многих важных функций, поэтому разработчики годами придумывали всевозможные способы упростить написание CSS.

Способы упрощения написания CSS можно разделить на две группы:

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

Постпроцессоры работают в обратном направлении — вы записываете в CSS-файл невалидный синтаксис CSS, а постпроцессоры изменяют эти значения в валидный CSS.

Сегодня существует два основных постпроцессора:

PostCSS — это самый большой представитель этого направления, а Lightning CSS — новый и заслуживающий внимания. Мы поговорим об обоих позже.

Постпроцессоры победили в компиляции

Постпроцессоры всегда были на грани победы, поскольку PostCSS всегда был необходимым инструментом в цепочке инструментов.

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

/* Исходный код */
.selector {
transform: /* ... */;
}

/* Результат */
.selector {
-webkit-transform: /* ... */;
transform: /* ... */;
}

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

Что действительно склонило баланс в сторону постпроцессоров, так это:

Давайте поговорим о каждом из них подробнее.

Нативный CSS получил существенные возможности

Препроцессоры CSS появились в первую очередь потому, что в CSS отсутствовали функции, критически важные для большинства разработчиков, в том числе:

За прошедшие годы нативный CSS сильно продвинулся вперёд. Он получил отличную поддержку браузеров для первых двух функций:

Я подозреваю, что с этими двумя функциями большинству пользователей CSS даже не понадобится запускать пре- или постпроцессоры. Более того, функция if() тоже появится в CSS в ближайшем будущем.

Но для остальных, кому важно, чтобы поддержка и производительность загрузки были в приоритете, нужна третья функция — возможность разбивать CSS на несколько файлов. Это можно сделать с помощью функции use в Sass или функции import в PostCSS ( предоставляется плагином postcss-import).

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

Хотя, по моему опыту, миксины лучше заменить функцией @apply из Tailwind.

Таким образом, мы переходим к Tailwind.

Почему Tailwind 4 больше не поддерживает препроцессоры

В Tailwind 4 официально удалена поддержка препроцессоров. Из документации Tailwind:

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

Если вы включили Tailwind 4 с помощью самого прямого метода установки, то не сможете использовать препроцессоры с Tailwind.

@import `tailwindcss`

Потому что один этот оператор import делает Tailwind несовместимым с Sass, Less и Stylus.

Но, к счастью, Sass позволяет импортировать CSS-файлы, если импортируемый файл содержит расширение .css. Так что, если возникнет желание использовать Tailwind с Sass, это можно сделать. Но это будет немного сложнее.

@layer theme, base, components, utilities;

@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/preflight.css" layer(base);
@import "tailwindcss/utilities.css" layer(utilities);

Мне лично не нравятся стили preflight Tailwind, поэтому я исключаю их из своих файлов.

@layer theme, base, components, utilities;
@import 'tailwindcss/theme.css' layer(theme);
@import 'tailwindcss/utilities.css' layer(utilities);

В любом случае, многие не знают, что можно продолжать использовать препроцессоры с Tailwind. Поэтому подозреваю, что препроцессоры будут становиться менее популярными по мере того, как Tailwind будет набирать обороты.

Итак, рядом с Tailwind находится постпроцессор CSS под названием Lightning CSS, поэтому поговорим о нём.

Lightning CSS

Lightning CSS — это постпроцессор, способный выполнять многие вещи, необходимые современному разработчику, поэтому он заменяет большую часть цепочки инструментов PostCSS, включая:

Помимо приличного набора встроенных функций, он выигрывает у PostCSS благодаря невероятной скорости.

Lightning CSS работает в 100 раз быстрее, аналогичных инструментов на базе JavaScript. Он может минифицировать более 2,7 миллиона строк кода в секунду в одном потоке.

Скорость помогает Lightning CSS победить, поскольку многие разработчики — фанаты скорости, и они не против сменить инструмент, чтобы добиться уменьшения времени компиляции. Но Lightning CSS выигрывает ещё и за счёт широкого распространения.

Его можно использовать напрямую как плагин Vite ( поддерживаемый многими фреймворками). Если необходима помощь, у Ryan Trimble есть пошаговая статья о настройке его в Vite.

// vite.config.mjs
export default {
css: {
transformer: 'lightningcss'
},
build: {
cssMinify: 'lightningcss'
}
};

Если вам нужны другие плагины PostCSS, их также можно включить в цепочку инструментов PostCSS.

// postcss.config.js
// Import other plugins...
import lightning from 'postcss-lightningcss'

export default {
plugins: [lightning, /* Other plugins */],
}

Многие известные разработчики перешли на Lightning CSS и не оглянулись назад. Chris Coyier говорит, что будет использовать супер базовую настройку обработки CSS, так что можете быть уверены, что не наступите ни на какие грабли, если захотите перейти на Lightning.

Если вы уже пробовали Lightning CSS и напишите в комментариях о впечатлениях!

Если хотите отказаться от препроцессоров сейчас

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

Lightning CSS будет достаточным, если вам нужны:

Tailwind (с @apply) будет достаточным, если вам потребуется:

Если вам всё ещё нужны условия, такие как if, for и другие функции, то пока лучше придерживаться Sass. (Я пробовал и столкнулся с проблемами совместимости между postcss-for и Lightning CSS, которые не буду здесь описывать).

Это всё, чем хотелось бы поделиться с вами сегодня. Надеюсь, это поможет, если вы задумывались о своём наборе инструментов CSS.

Если у вас сформировался свой набор инструментов для работы с CSS расскажите о нём в комментариях.

Комментарии


Дополнительные материалы

Предыдущая Статья

Значения по умолчанию с оператором нулевого слияния

Следующая Статья

Советы по Laravel, которые должен знать каждый разработчик