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.css
Npm
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 gulp
Ahora nos vamos a la carpeta que hemos creado y vamos a escribir lo siguiente
npm init
En 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 gulp
Escribiendo –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-postcss
Y 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-vars
Ahora 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-sourcemaps
Vamos 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 css
Si esta todo bien nos debería de salir el siguiente mensaje en el terminal
Starting 'css'...
Finished 'css' after 14 ms
Ahora 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).