PostCSS
- Andrey Sitnik
- open source
Front-End Meetup #1
Tiago Vilas Boas
(Montanha)
10 anos de experiência em TI
- Desenvolvedor Front-End na CI&T
tiago@artesites.com.br
http://www.artesites.com.br
Quem já usa PostCSS?

PostCSS
-
PostCSS é uma caixa de ferramentas extensiva por plugins JavaScript, que transforma CSS com plugins.
-
PostCSS é um parser de CSS, que cria uma estrutura de dados e depois transforma isso em CSS novamente.
-
Possui um catálogo com mais de 200 plugins.
-
Depende da plataforma Node.js (^v4.6.1) e também funciona com um task runner.
Etapas:
-
O PostCSS recebe seu código CSS e quebra em partes menores, trata-se de uma análise de entrada de linhas por caracteres ou simbolos léxicos (tokenização).
-
Faz o parser do código, um algoritimo capaz de processar o array de tokens e criar uma estrutura com significado.
-
Recebe a estrutura criada, passa a estrutura por uma lista de plugins, sofrendo alterações no caminho. Etapa mágica!
-
E no final processa o Stringifier, um algoritmo que recebe a árvore modificada e a transforma novamente em CSS.

O que não é?
-
Não é uma alternativa aos pré-processadores.
-
É definido pela comunidade como um ecossistema de plugins e ferramentas, por isso não pode ser definido como um pré/pós-processador.
-
Ele por si só não substituirá o CSS, muito menos os pré/pós-processadores como Sass, Less e Stylus.
-
Não tem nada a haver com CSS4.
O que esses plugins podem fazer?
-
Adicionar ou remover prefixos, conforme os navegadores que você precisar dar suporte. Autoprefixer
-
Adicionar suas custom fonts sem precisar criar mixins. PostCSS Font Magican
-
Otimiza e minifica seu CSS ao máximo, tornando seu CSS muito pequeno e pronto para um ambiente de produção. CSSNano
-
Possibilita que você utilize as novas sintaxes do CSS nos dias de hoje, com suporte a todos navegadores. PostCSS CSSNext
-
Fazer tudo que o Sass faz. Precss
Autoprefixer
Adiciona ou remove prefixos conforme as especificações de cada navegador que você precisar dar suporte.
a {
display: flex;
}
a {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}CSS:
Compilado:
Font Magician
Adiciona sua custom font sem precisar criar um mixin para ela.
/* before */
body {
font-family: "Alice";
}CSS:
Font Magician
/* after */
@font-face {
font-family: "Alice";
font-style: normal;
font-weight: 400;
src: local("Alice"), local("Alice-Regular"),
url("http://fonts.gstatic.com/alice.eot?#") format("eot"),
url("http://fonts.gstatic.com/alice.woff2") format("woff2"),
url("http://fonts.gstatic.com/alice.woff") format("woff"),
url("http://fonts.gstatic.com/s/alice.ttf") format("truetype")
}
body {
font-family: "Alice";
}Compilado:
CSSNano
/* normalize selectors */
h1::before, h1:before {
/* reduce shorthand even further */
margin: 10px 20px 10px 20px;
/* reduce color values */
color: #ff0000;
/* drop outdated vendor prefixes */
-webkit-border-radius: 16px;
border-radius: 16px;
/* remove duplicated properties */
font-weight: normal;
font-weight: normal;
/* reduce position values */
background-position: bottom right;
}
/* correct invalid placement */
@charset "utf-8";CSS:
CSSNano
@charset "utf-8";h1:before{margin:10px 20px;
color:red;border-radius:16px;font-weight:normal;
background-position:100% 100%}Compilado:
Otimiza e minifica seu CSS ao máximo, tornando seu CSS muito pequeno e pronto para um ambiente de produção.
Tá! E como uso o PostCSS?
Install
$ npm install gulp-postcssPré-leitura obrigatória: https://github.com/postcss/postcss#usage
A instalação de plugins PostCSS deve ser feita separadamente.
Por exemplo: Se quero utilizar o autoprefixer, tenho que instalá-lo também.
$ npm install autoprefixerE como fica no Gulp?
Gulpfile.js (PostCSS com autoprefixer e cssnano)
var postcss = require('gulp-postcss');
var gulp = require('gulp');
var autoprefixer = require('autoprefixer');
var cssnano = require('cssnano');
gulp.task('css', function () {
var processors = [
autoprefixer({browsers: ['last 1 version']}),
cssnano(),
];
return gulp.src('./src/*.css')
.pipe(postcss(processors))
.pipe(gulp.dest('./dest'));
});
Conclusões
-
PostCSS pode ser usado com qualquer task runner que temos hoje como o Grunt, Gulp, Brocolli ou Fly.
-
Os plugins do PostCSS podem ser muito úteis e grandes facilitadores em seu projeto.
-
PostCSS invalida a briga entre os pré-processadores.
-
Remove a responsabilidade de uma única biblioteca resolver todos os nossos problemas.
-
Facilidade de criação do seu próprio plugin.
-
Curva de aprendizado muita rápida, documentação muito completa.
Referências

Dúvidas?
Post CSS - Front-End Meetup #1
By Tiago Vilas Boas
Post CSS - Front-End Meetup #1
Apresentação sobre PostCSS, realizada no primeiro Front-End Meetup de Itatiba e região.
- 444