Мы уже упоминали PostCSS много раз на SitePoint, но многие продолжают сбивать с толку. Подводя итог этому в одном предложении:
PostCSS выполняет утомительные задания, поэтому вам не нужно это делать.
Он несколько отличается от препроцессора, такого как Sass, Less и Stylus, который предоставляет альтернативный, более лаконичный язык программирования, который компилируется в CSS. Часть путаницы вызвана:
- 
Его имя. PostCSS может выполнять действия с файлами до и / или после того, как препроцессор скомпилировал свой исходный код в настоящий CSS.
 - 
PostCSS может заменить ваш препроцессор. Есть плагины, которые реализуют такие конструкции, как переменные , вложения , миксины и расширения .
 
Однако, несмотря на то, что вы можете создать свой собственный препроцессор , нет особых причин делать это, если вы не хотите ограничивать функциональность и увеличивать скорость компиляции. Лично я использую Sass с последующим добавлением приправ PostCSS для улучшения моего CSS.
Как вы используете PostCSS?
PostCSS можно использовать в автономных файлах JavaScript, Gulp, Grunt, Broccoli, Brunch и в широком спектре задач, о которых я никогда не слышал!
Сам по себе PostCSS делает только синтаксический анализ файла CSS на объекты JavaScript и токены. Настоящее волшебство происходит с плагинами, которые проверяют, манипулируют, добавляют или изменяют свойства и значения до того, как будет написан окончательный файл CSS.
Чтобы использовать PostCSS в Gulp, вам нужно настроить проект и установить оба модуля:
npm init npm install --save-dev gulp gulp-postcss 
Затем вы можете добавить необходимые плагины, например, autoprefixer и cssnano :
 npm install --save-dev autoprefixer cssnano 
  gulpfile.js может быть создан.  Он определяет задачу, которая загружает исходный код CSS и передает его через PostCSS.  Плагины и все необходимые параметры передаются в PostCSS в виде массива.  Наконец, CSS выводится в файл назначения: 
 // Gulp.js configuration var gulp = require('gulp'), postcss = require('gulp-postcss'); // apply PostCSS plugins gulp.task('css', function() { return gulp.src('src/main.css') .pipe(postcss([ require('autoprefixer')({}), require('cssnano') ])) .pipe(gulp.dest('dest/main.css')); }); 
Задача может быть запущена из консоли с помощью:
 gulp css 
Все, что нам сейчас нужно, это удобный список плагинов PostCSS…
1. Автопрефиксер
Если вы больше ничего не используете, установите Autoprefixer :
 npm install --save-dev autoprefixer 
  Префиксы, специфичные для браузера, такие как -webkit- , -moz- и -ms- , постепенно -ms- , так как стандарты становятся лучше поддерживаемыми, и поставщики выбирают альтернативы, такие как -moz- -ms- основе флагов.  К сожалению, вы не можете избежать префиксов поставщиков, но трудно понять, когда они всегда требуются (например, для выбора пользователя ), иногда требуются (например, для трехмерных преобразований ) или никогда не требуются (например, border-radius ). 
Вам больше не нужно беспокоиться о префиксе снова с Autoprefixer. Вам просто нужно определить CSS без префикса, а затем указать, какие браузеры вы хотите поддерживать. Autoprefixer проверит caniuse.com перед добавлением необходимых префиксов — следующий код указывает две последние версии любого основного браузера или любую долю рынка, превышающую 2%:
 .pipe(postcss([ require('autoprefixer')({ browsers: ['last 2 versions', '> 2%'] }) ])) 
Это превосходный вариант для библиотечных функций препроцессора, которые обычно требуют специального кодирования и применяют префиксы вендоров вне зависимости от этого. Ваш префиксный код будет удален в будущем. PostCSS будет работать по мере развития стандартов браузера.
Autoprefixer настолько полезен и широко распространен, что, возможно, вы уже используете его, даже не подозревая, что это плагин PostCSS.
2. Активы PostCSS
PostCSS Assets предоставляет ряд полезных функций обработки изображений:
 npm install --save-dev postcss-assets 
Варианты включают в себя:
-   Разрешение URL: учитывая имя файла, PostCSS Assets заменяет 
resolve(image)корневым путем или полностью определенным URL. -   Обработка измерений: PostCSS Assets заменяет ссылки на 
width(image),height(image)илиsize(image)эквивалентом в пикселях. -   Встроенное изображение: PostCSS Assets заменяет 
inline(image)строкой в кодировке Base64. - Очистка кеша: PostCSS Assets может добавить произвольную строку запроса к ссылке на изображение, чтобы убедиться, что загружен самый последний файл.
 
3. cssnext
cssnext позволяет вам использовать новейший синтаксис CSS сегодня.
 npm install --save-dev postcss-cssnext 
Плагин имеет длинный список функций, включая поддержку:
-   переменные 
var -   
#rrggbbaacolors - Цветовые функции
 - фильтры
 - откаты
 
Когда он выполняется, cssnext переводит код в синтаксис, обычно поддерживаемый в современных браузерах.
4. Рюкзак
Rucksack предлагает целый ряд функций, которые, как утверждает разработчик, делают разработку CSS еще более увлекательной!
 npm install --save-dev rucksack-css 
Варианты включают в себя:
-   Адаптивная типография, которая регулирует размеры шрифта и высоту строк с помощью одного 
font-size: responsiveобъявление. -   Количество псевдоселекторов, таких как 
li:at-least(4)которое предназначается для любого списка с четырьмя или более элементами. -   Псевдонимы свойств, такие как определение 
bgкачествеbackgroundкоторый может использоваться в вашем CSS. - Набор предопределенных функций замедления .
 
5. Stylelint
Stylelint сообщает об ошибках CSS на основе 140 правил, разработанных для выявления распространенных ошибок, реализации соглашений о стилях и применения передовых методов. Существует множество вариантов настройки Stylelint по вашему вкусу — статья Павла Елисеева « Улучшение качества вашего CSS с помощью PostCSS» проведет вас через процесс настройки.
6. CSS MQPacker
MQPacker оптимизирует ваши медиа-запросы в единые правила, когда это возможно:
 npm install --save-dev css-mqpacker 
Препроцессоры, такие как Sass, позволяют легко использовать медиа-запросы в декларации, например
 .widget1 { width: 100%; @media (min-width: 30em) { width: 50%; } @media (min-width: 60em) { width: 25%; } } .widget2 { width: 100px; @media (min-width: 30em) { width: 200px; } } 
Это компилируется в:
 .widget1 { width: 100%; } @media (min-width: 30em) { .widget1 { width: 50%; } } @media (min-width: 60em) { .widget1 { width: 25%; } } .widget2 { width: 100px; } @media (min-width: 30em) { .widget2 { width: 200px; } } 
  Чтобы уменьшить размеры файлов и (возможно) улучшить время анализа, MQPacker упаковывает несколько объявлений в одно правило @media , т.е. 
 .widget1 { width: 100%; } .widget2 { width: 100px; } @media (min-width: 30em) { .widget1 { width: 50%; } .widget2 { width: 200px; } } @media (min-width: 60em) { .widget1 { width: 25%; } } 
Подсказка : убедитесь, что первое объявление медиа-запроса в вашем коде определяет все возможные параметры в том порядке, в котором вы их хотите, даже если нет реальной разницы. Это гарантирует, что MQPacker определит правила в правильном порядке.
MQPacker также предоставляет опции для сортировки медиазапросов и вывода исходных карт.
7. cssnano
cssnano сжимает ваш CSS-файл, чтобы обеспечить минимальную загрузку в вашей производственной среде. Установите его через:
 npm install --save-dev cssnano 
Плагин работает, удаляя комментарии, пробелы, дублирующие правила, устаревшие префиксы поставщиков и делая другие оптимизации, чтобы сэкономить как минимум 50%. Есть альтернативные варианты, но cssnano — один из лучших. Используй это!
Хочу больше?
Доступный для поиска индекс плагинов PostCSS доступен по адресу postcss.parts, а документация по использованию PostCSS содержит список рекомендуемых параметров. Вы найдете плагины практически для любой задачи CSS, которую только можете себе представить, хотя имейте в виду, что есть некоторые перекрестные переходы и дублирование — например, cssnext также включает в себя Autoprefixer.
Если этого недостаточно, вы можете разработать свои собственные плагины PostCSS на JavaScript. Документация PostCSS объясняет, как написать плагин, и предоставляет ссылку на API .
PostCSS облегчает разработку CSS независимо от того, используете ли вы препроцессор. Время разработки CSS экономит больше, чем перевешивает первоначальные усилия по установке и настройке.