From Preprocessor to Postprocessor

51
FROM PREPROCESSOR TO POSTPROCESSOR

Transcript of From Preprocessor to Postprocessor

Page 1: From Preprocessor to Postprocessor

FROM PREPROCESSORTO POSTPROCESSOR

Page 2: From Preprocessor to Postprocessor
Page 3: From Preprocessor to Postprocessor

DA DOVE VENIAMO?CHE SIAMO?

DOVE ANDIAMO?

Page 4: From Preprocessor to Postprocessor

PERCHÉ LA FETTA BISCOTTATA CADE SEMPRE

DAL LATO IMBURRATO?

Page 5: From Preprocessor to Postprocessor

LE GRANDI DOMANDE DEL WEBDEV

Page 6: From Preprocessor to Postprocessor

LE GRANDI DOMANDE DEL WEBDEV

QUALE FRAMEWORK JS USO OGGI?QUALE FRAMEWORK JS USO DOMANI?

Page 7: From Preprocessor to Postprocessor
Page 8: From Preprocessor to Postprocessor

Matteo Guidotto

@j8matteoProject Manager

Page 9: From Preprocessor to Postprocessor

IL LONTANO 2006

ITALIA CAMPIONE DEL MONDO

Page 10: From Preprocessor to Postprocessor

IL LONTANO 2006

STAGISTA FULLSTACK

Page 11: From Preprocessor to Postprocessor

IL LONTANO 2006

ANGOLI TONDISFONDI GRADIENTI

Page 12: From Preprocessor to Postprocessor

ANGOLI TONDI

Page 13: From Preprocessor to Postprocessor

ANGOLI TONDI

.round {

-webkit-border-top-left-radius: 1px;

-webkit-border-top-right-radius: 2px;

-webkit-border-bottom-right-radius: 3px;

-webkit-border-bottom-left-radius: 4px;

-moz-border-radius-topleft: 1px;

-moz-border-radius-topright: 2px;

-moz-border-radius-bottomright: 3px;

-moz-border-radius-bottomleft: 4px;

border-top-left-radius: 1px;

border-top-right-radius: 2px;

border-bottom-right-radius: 3px;

border-bottom-left-radius: 4px;

}

Page 14: From Preprocessor to Postprocessor

2010: FLAT DESIGN FTW

Page 15: From Preprocessor to Postprocessor

2015 CSSDAY

Page 16: From Preprocessor to Postprocessor

DA CSS A SASS

.area {

@include border-radius(10px);

@include background-

image(linear-gradient(120deg,

#2ac363, #cd8c14, #9c4cc2));

}

.area {

-moz-border-radius: 10px;

-webkit-border-radius: 10px;

border-radius: 10px;

background-image: -moz-linear-

gradient(330deg, #2ac363, #cd8c14,

#9c4cc2);

background-image: -webkit-linear-

gradient(330deg, #2ac363, #cd8c14,

#9c4cc2);

background-image: linear-

gradient(120deg, #2ac363, #cd8c14,

#9c4cc2);

}

Page 17: From Preprocessor to Postprocessor

SASS DARK SIDE

NO CSS STANDARDBLOCCO MONOLITICO

Page 18: From Preprocessor to Postprocessor
Page 19: From Preprocessor to Postprocessor

POSTCSS

“PostCSS is a tool for transforming CSS with JS plugins. These plugins can support variables and mixins, transpile

future CSS syntax, inline images, and more.”

Page 20: From Preprocessor to Postprocessor

POSTCSS NON È

COSA NON E’ POSTCSS

PREPROCESSOR

CSS FUTURE SYNTAX

POSTPROCESSOR

OPTIMIZATION TOOL

MINIFIER

PLUGIN JQUERY

ALL-IN-ONE TOOL

LINTER

SUBWAY SANDWICH

Page 21: From Preprocessor to Postprocessor
Page 22: From Preprocessor to Postprocessor

POSTCSS

TOOLPLUGIN ECOSYSTEM

Page 23: From Preprocessor to Postprocessor

POSTCSS - TOOL

Page 24: From Preprocessor to Postprocessor

THE MOJO

ESSENZIALEVELOCE

MODULAREINTEGRABILE

Page 25: From Preprocessor to Postprocessor

ESSENZIALE

Libsass: 110 files, 21 300 LOC of C++Stylus: 72 files, 7 900 LOCLess: 105 files, 9 800 LOC

Page 26: From Preprocessor to Postprocessor

VELOCE

PostCSS: 39 msRework: 73 ms (1.9 times slower)libsass: 77 ms (1.9 times slower)Less: 179 ms (4.5 times slower)Stylus: 269 ms (6.8 times slower)

Stylecow: 271 ms (6.9 times slower)Ruby Sass: 1101 ms (28.0 times slower)

Page 27: From Preprocessor to Postprocessor

MODULARE

Agglomerato di plugin 200+Creare proprio plugin

Page 28: From Preprocessor to Postprocessor

INTEGRABILE

Page 29: From Preprocessor to Postprocessor

CIOÈ?

border-radius: 10px -moz-border-radius: 10px;

-webkit-border-radius: 10px;

border-radius: 10px;

Page 30: From Preprocessor to Postprocessor

CIOÈ?

border-radius: 10px -moz-border-radius: 10px;

-webkit-border-radius: 10px;

border-radius: 10px;

brad: round10

Page 31: From Preprocessor to Postprocessor

I PLUGIN - AUTOPREFIXER

Display: flex display: -webkit-box;

display: -webkit-flex;

display: -ms-flexbox;

display: flex

Page 32: From Preprocessor to Postprocessor

I PLUGIN - CSSNEXT

:root {

--color: red;

}

div {

color: var(--color);

}

div {

color: red;

}

Page 33: From Preprocessor to Postprocessor

I PLUGIN - NESTED

.phone {

&_title {

width: 500px;

@media (max-width: 500px) {

width: auto;

}

body.is_dark & {

color: white;

}

}

img {

display: block;

}

}

.phone_title {

width: 500px;

}

@media (max-width: 500px) {

.phone_title {

width: auto;

}

}

body.is_dark .phone_title {

color: white;

}

.phone img {

display: block;

}

Page 34: From Preprocessor to Postprocessor

I PLUGIN - BEM

@b nav { /* b is for block */

@e item { /* e is for element */

display: inline-block;

}

@m placement_header {

background-color: red;

}

}

.nav {}

.nav__item {

display: inline-block

}

.nav_placement_header {

background-color: red

}

Page 35: From Preprocessor to Postprocessor

I PLUGIN - STYLELINT

Page 36: From Preprocessor to Postprocessor

I PLUGIN

PRECSSRTLCSS

POSTCSS-FOCUSCSSNANO

http://postcss.parts/

Page 37: From Preprocessor to Postprocessor

HANDS ON

npm install gulp-postcss

Page 38: From Preprocessor to Postprocessor

HANDS ON

var gulp = require('gulp');var postcss = require('gulp-postcss');

Page 39: From Preprocessor to Postprocessor

HANDS ON

gulp.task('css', function () {var processors = [];return gulp.src('./src/*.css').pipe(postcss(processors)).pipe(gulp.dest('./dest'));

});

Page 40: From Preprocessor to Postprocessor

HANDS ON

var autoprefixer = require('autoprefixer');var cssnext = require('cssnext');var precss = require('precss');

Page 41: From Preprocessor to Postprocessor

HANDS ON

var processors = [autoprefixer({browsers: ['last 1 version']}),cssnext,precss

];

Page 42: From Preprocessor to Postprocessor

HANDS ON - PLUGIN

brad: round10 -moz-border-radius: 10px;

-webkit-border-radius: 10px;

border-radius: 10px;

Page 43: From Preprocessor to Postprocessor

HANDS ON - PLUGIN

var postcss = require('postcss');

module.exports = postcss.plugin('postcss-brad', function (opts) {

opts = opts || {};

return function(css) {

css.walkDecls(function(decl) {

if (decl.prop.match(/^brad$/)) {

if (decl.value === "round10") {

decl.replaceWith("border-radius:10px");

}

}

});

};

});

Page 44: From Preprocessor to Postprocessor

OLTRE GULP

GRUNT e WEBPACKCODEPEN

CLINODEJS

https://github.com/postcss/postcss

Page 45: From Preprocessor to Postprocessor

E REACT?

let prefixer = postcssJs.sync([ autoprefixer ]);

let style = prefixer({display: 'flex'

});

style //=> { display: ['-webkit-box', '-webkit-flex', '-ms-flexbox', 'flex'] }

https://github.com/postcss/postcss-js

Page 46: From Preprocessor to Postprocessor

A PICCOLI PASSI?

POSTCSS + SASS + AUTOPREFIXER

POSTCSS + PRECSS

POSTCSS + MODUL*

Page 47: From Preprocessor to Postprocessor

C’È DA FIDARSI?

WORDPRESSTWITTERGOOGLE

WIKIPEDIA

E 650 milioni di download al mese

Page 48: From Preprocessor to Postprocessor

LE GRANDI DOMANDE

SOLIDO E MONOLITICOO

NUOVO E MODULARE

Page 49: From Preprocessor to Postprocessor

SE STATE PER FARE IL SALTO

Page 50: From Preprocessor to Postprocessor

PRENDETE BENE LE DISTANZE

Page 51: From Preprocessor to Postprocessor

GRAZIE!

Matteo Guidotto@j8matteo