Configurando postCSS en Gulp
Archivado en: CSS postCSS Gulp
Ayer contaba mi corta pero exitosa historia con postCSS. En el artículo comentaba que utilizo postCSS con Gulp. En este artículo voy a profundizar en como añadir postCSS a Gulp desde el principio hasta el final. Si ya has trabajado con Gulp seguramente todo esto te resultará familiar.
Soy usuario de OSX así voy a hacer todo tirando de iTerm2.
Creando el proyecto y su estructura
Voy a empezar creando el proyecto con todos sus directorios. Lo podéis hacer a manopla creando carpeta y archivos. Yo lo voy a hacer a lo viejuno(también es más rápido) tirando de cli.
mkdir gulp-postcss
cd gulp-postcss
mkdir dist
mkdir src
touch index.html
touch gulpfile.js
cd dist
mkdir css
cd css
touch styles.css
cd ..
cd ..
cd src
mkdir css
cd css
touch styles.cssNpm
Vamos a empezar a instalar todo lo necesario. Para aquellos que no tengan instalado Gulp, vamos a instalarlo de forma global, para ello vamos a escribir en el terminal
npm install -g gulpAhora nos vamos a la carpeta que hemos creado y vamos a escribir lo siguiente
npm initEn el terminal nos va a ir saliendo una serie de campos que vamos a ir rellenando y que más tarde se verán reflejados en el package.json que nos ha creado el npm init
Ahora vamos a empezar a instalar dependencias. La primera de ellas Gulp
npm install --save-dev gulpEscribiendo –save-dev agregará este paquete como un dependencia a nuestro proyecto, y también lo añadirá al package.json
Gulpfile
Ahora vamos a abrir Gulpfile.js con un IDE, en mi caso Sublime Text 3. Una vez abierto vamos a escribir lo siguiente
var gulp = require('gulp');gulp-postcss
Ahora vamos a instalar gulp-postcss. Volvemos a nuestra ventana del terminal
npm install --save-dev gulp-postcssY en nuestro gulpfile.js añadimos lo siguiente
var gulp = require('gulp');
var postcss = require('gulp-postcss');
gulp.task('css', function () {
    var processors = [
        //Aqui irán los plugins que vayamos instalando
    ];
    //Aquí la ruta de donde coge nuestros css
    return gulp.src('./src/css/styles.css')
        .pipe(postcss(processors))
        //Aqui la ruta de destino
        .pipe(gulp.dest('./dist/css'));
});Vamos a instalar todos los paquetes que vamos a utilizar del tirón. Y luego lo vamos a añadir todo a nuestro gulpfile.js
npm install --save-dev gulp-autoprefixer
npm install --save-dev postcss-pxtorem
npm install rucksack-css --save-dev
npm install --save-dev postcss-nested
npm install --save-dev postcss-simple-varsAhora vamos a volver a abrir nuestro gulpfile.js y vamos a ir añadiendo todos los paquetes que hemos instalado anteriormente. A algunos plugins les podemos pasar opciones, en este caso vamos configurar pxtorem, que el valor de root sea 16, que lo transforme solo con dos decimales, y que solo transforme de px a rem las propiedades: font-size line-height padding
var gulp = require('gulp');
var postcss = require('gulp-postcss');
var autoprefixer = require('gulp-autoprefixer');
var vars = require('postcss-simple-vars');
var nested = require('postcss-nested');
var rucksack = require('gulp-rucksack');
var pxtorem = require('postcss-pxtorem');
gulp.task('css', function() {
    var processors = [
        vars,
        nested,
        rucksack,
        pxtorem({
            root_value: 16,
            unit_precision: 2,
            prop_white_list: ['font-size', 'line-height', 'padding'],
            replace: true,
            media_query: false
        }),
        autoprefixer({
            browsers: ['last 2 version']
        })
    ];
    //Aquí la ruta de donde coge nuestros css
    return gulp.src('./src/css/styles.css')
        .pipe(rucksack())
        .pipe(postcss(processors))
        //Aqui la ruta de destino
        .pipe(gulp.dest('./dist/css'));
});Y ya por último vamos a instalar y activar los sourcemaps.
npm install --save-dev gulp-sourcemapsVamos a nuestro gulpfile.js y vamos a añadir dos .pipe()
return gulp.src('./src/css/styles.css')
    .pipe(rucksack())
    .pipe(sourcemaps.init())
    .pipe(postcss(processors))
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest('./dist/css'));Comenzando a escribir
Ahora vamos al terminal y escribimos lo siguiente
gulp cssSi esta todo bien nos debería de salir el siguiente mensaje en el terminal
Starting 'css'...
Finished 'css' after 14 msAhora vamos a nuestro styles.css y por fin empezamos a escribir líneas de CSS :d
Vamos a utilizar el plugin de las variables como SASS
//Utilizando las variables
$color-background: #001F3F;
$color-texto: #FFDC00;Vamos a crear @alias con Rucksack. Uno para la propiedad background-color y otro para el box-sizing. Esta funcionalidad del plugin es difícil de utilizar para aquellos que somos adictos a emmet y todos sus shorthands.
//Creando alias con rucksack
@alias {
  bgc: background-color;
  bxz: box-sizing;
  bbx: border-box;
}
body {
    //Utilizando un alias creado con rucksack, también una variable
    bgc: $color-background;
}Los valores de las siguientes propiedades serán transformados de pixel a REM.
//El pixel del padding se transformara en REM
padding: 0 20px;
//El pixel del font-size se transformara en REM
font-size: 16px;
//El pixel del line-height se transformara en REM
line-height: 20px;Y ya por último vamos a anidar como SASS
//Nested como SASS & pxtorem
section {
    width: 80%;
    margin: 0 auto;
    font-size: 0;
    article {
        width: 50%;
        display: inline-block;
        //Utilizando un alias creado con rucksack
        bxz: bbx;
        //El pixel del padding se transformara en REM
        padding: 0 20px;
        font-family: Arial, sans-serif;
        //El pixel del font-size se transformara en REM
        font-size: 16px;
        //El pixel del line-height se transformara en REM
        line-height: 20px;
        color: $color-texto;
    }
}IO
Ahora vamos a ver las diferencias entre lo que hemos escrito en nuestro src/css/styles.css y lo que ha generado postCSS en dist/css/styles.css
src/css/styles.css
//Utilizando las variables
$color-background: #001F3F;
$color-texto: #FFDC00;
//Creando alias con rucksack
@alias {
  bgc: background-color;
  bxz: box-sizing;
  bbx: border-box;
}
body {
    //Utilizando un alias creado con rucksack, también una variable
    bgc: $color-background;
}
//Nested como SASS & pxtorem
section {
    width: 80%;
    margin: 0 auto;
    font-size: 0;
    article {
        width: 50%;
        display: inline-block;
        //Utilizando un alias creado con rucksack
        bxz: bbx;
        //El pixel del padding se transformara en REM
        padding: 0 20px;
        font-family: Arial, sans-serif;
        //El pixel del font-size se transformara en REM
        font-size: 16px;
        //El pixel del line-height se transformara en REM
        line-height: 20px;
        color: $color-texto;
    }
}dist/css/styles.css
body {
    background-color: #001F3F;
}
section {
    width: 80%;
    margin: 0 auto;
    font-size: 0;
}
section article {
    width: 50%;
    display: inline-block;
    box-sizing: border-box;
    padding: 0 1.25rem;
    font-family: Arial, sans-serif;
    font-size: 1rem;
    line-height: 1.25rem;
    color: #FFDC00;
}Todo el código del artículo lo tenéis a vuestra disposición en GitHub
SCALABLE, un libro sobre SVGA lo largo de 15 capítulos, 120 páginas y más de 70 ejemplos vamos a ver todo lo que podemos hacer con SVG. Tu pones el precio, disponible desde 0$ para descargar desde LeanPub(PDF, ePUB y MOBI).