SlideShare a Scribd company logo
A u t o m a t e d C S S
@frontainer
CTO
Front-end Engineer
林 優一
株式会社LIG - CTO (フロントエンドチームリーダー)
AngularJS Japan User Group
フロントエンド開発・フロントエンドエンジニア育成を担当し
デザイン分野からサーバーサイド分野まで幅広く対応。
AngularJSのコミュニティに所属し、ng-mtgやDevelopers Summitで
スピーカーを務める。得意言語はJavaScript。
2015年6月にフロントエンドチームリーダー兼務のままCTO就任。
自社開発チームのエンジニアとしても活動。
- CSSのインデントや記述の仕方がバラバラ
- パフォーマンス・チューニング??
- ベンダープレフィックスなんてとりあえず全部つけておけばいいだろう!
- 圧縮を納品前にやって、圧縮したら崩れた
A u t o m a t e d C S S
- 常に同じ動作をするために、共通の書式が保てる
- 人がやる作業が減るので制作に専念できる
- そもそも人がやるには大変過ぎる作業が随時できる
L e t ’ s t r y ! !
h t t p s : / / g i t h u b . c o m / f r o n t a i n e r / a u t o c s s
N o d e . j s
h t t p s : / / n o d e j s . o r g / e n /
G u l p . j s
h t t p : / / g u l p j s . c o m /
$ npm i gulp -g
$ npm i gulp-sass --save-dev
$ npm i gulp-sass-lint --save-dev
$ npm i gulp-csso --save-dev
$ npm i gulp-postcss --save-dev
$ npm i autoprefixer --save-dev
$ npm i doiuse --save-dev
$ npm i css-mqpacker --save-dev
var gulp = require('gulp');
var sass = require('gulp-sass');
var sassLint = require('gulp-sass-lint');
var postcss = require('gulp-postcss');
var csso = require('gulp-csso');
gulp.task('default', function () {
return gulp.watch('*.scss',['css']);
});
var browsers = [
//'last 2 versions',
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
gulpfile.js
g u l p - s a s s
h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / g u l p - s a s s
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
.pipe(sassLint.failOnError())
.pipe(sass())
.pipe(postcss([
require('doiuse')({browsers: browsers,ignore:['transforms2d']}),
require('autoprefixer')({browsers: browsers}),
require('css-mqpacker')
]))
.pipe(csso())
.pipe(gulp.dest('dest'));
});
gulpfile.js
$font-size: 30px;
$link-color: #ff290e;
.test {
.test-heading {
font-size: 20px;
font-weight: bold;
}
.test-content {
padding: 10px 10px 10px 10px;
}
}
.test .test-heading {
font-size: 30px;
font-weight: 700;
}
.test .test-content {
padding: 10px 10px 10px 10px;
}
g u l p - s a s s - l i n t
h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / g u l p - s a s s - l i n t
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
.pipe(sassLint.failOnError())
.pipe(sass())
.pipe(postcss([
require('doiuse')({browsers: browsers,ignore:['transforms2d']}),
require('autoprefixer')({browsers: browsers}),
require('css-mqpacker')
]))
.pipe(csso())
.pipe(gulp.dest('dest'));
});
gulpfile.js
files:
include: '**/*.scss'
options:
formatter: stylish
merge-default-rules: false
rules:
border-zero:
- 1
- convention: zero
brace-style:
- 1
- allow-single-line: true
clean-import-paths:
- 1
- filename-extension: false
leading-underscore: false
empty-line-between-blocks:
- 0
- ignore-single-line-rulesets: true
extends-before-declarations: 1
.sass-lint.yml
R u l e s
h t t p s : / / g i t h u b . c o m / s a s s t o o l s / s a s s - l i n t / t r e e / m a s t e r / d o c s / r u l e s
g u l p - c s s o
h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / g u l p - c s s o
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
.pipe(sassLint.failOnError())
.pipe(sass())
.pipe(postcss([
require('doiuse')({browsers: browsers,ignore:['transforms2d']}),
require('autoprefixer')({browsers: browsers}),
require('css-mqpacker')
]))
.pipe(csso())
.pipe(gulp.dest('dest'));
});
gulpfile.js
$font-size: 30px;
$link-color: #ff290e;
.test {
.test-heading {
font-size: 20px;
font-weight: bold;
}
.test-content {
padding: 10px 10px 10px 10px;
}
}
.test .test-heading {
font-size: 30px;
font-weight: 700;
}
.test .test-content {
padding: 10px 10px 10px 10px;
}
.test .test-heading{font-size:30px;font-weight:700}.test .test-content{padding:10px}
g u l p - p o s t c s s
h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / g u l p - p o s t c s s
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
.pipe(sassLint.failOnError())
.pipe(sass())
.pipe(postcss([
require('doiuse')({browsers: browsers,ignore:['transforms2d']}),
require('autoprefixer')({browsers: browsers}),
require('css-mqpacker')
]))
.pipe(csso())
.pipe(gulp.dest('dest'));
});
gulpfile.js
A u t o P r e f i x e r
h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / a u t o p r e f i x e r
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
.pipe(sassLint.failOnError())
.pipe(sass())
.pipe(postcss([
require('doiuse')({browsers: browsers,ignore:['transforms2d']}),
require('autoprefixer')({browsers: browsers}),
require('css-mqpacker')
]))
.pipe(csso())
.pipe(gulp.dest('dest'));
});
gulpfile.js
return gulp.watch('*.scss',['css']);
});
var browsers = [
//'last 2 versions',
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
.pipe(sassLint.failOnError())
.pipe(sass())
.pipe(postcss([
require('doiuse')({browsers: browsers,ignore:['transforms2d']}),
require('autoprefixer')({browsers: browsers}),
require('css-mqpacker')
]))
gulpfile.js
a {
&:hover {
transform: scale(1.2);
}
}
a:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}
D o I U s e
h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / d o i u s e
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
.pipe(sassLint.failOnError())
.pipe(sass())
.pipe(postcss([
require('doiuse')({browsers: browsers,ignore:['transforms2d']}),
require('autoprefixer')({browsers: browsers}),
require('css-mqpacker')
]))
.pipe(csso())
.pipe(gulp.dest('dest'));
});
gulpfile.js
a {
&:hover {
transform: scale(1.2);
filter: blur(10px);
}
}
a:hover{-webkit-transform:scale(1.2);transform:scale(1.2);
-webkit-filter:blur(10px);filter:blur(10px)}
c s s - m q p a c k e r
h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / c s s - m q p a c k e r
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
.pipe(sassLint.failOnError())
.pipe(sass())
.pipe(postcss([
require('doiuse')({browsers: browsers,ignore:['transforms2d']}),
require('autoprefixer')({browsers: browsers}),
require('css-mqpacker')
]))
.pipe(csso())
.pipe(gulp.dest('dest'));
});
gulpfile.js
@media screen and (max-width:800px) {
.test {
width: 100px;
}
}
@media screen and (max-width:800px) {
.test2 {
width: 200px;
}
}
@media screen and (max-width:800px){.test{width:100px}.test2{width:200px}}
W a t c h i n g
var gulp = require('gulp');
var sass = require('gulp-sass');
var sassLint = require('gulp-sass-lint');
var postcss = require('gulp-postcss');
var csso = require('gulp-csso');
gulp.task('default', function () {
return gulp.watch('*.scss',['css']);
});
var browsers = [
//'last 2 versions',
//'ie >= 9',
'> 3%'
];
gulp.task('css', function () {
return gulp.src('*.scss')
.pipe(sassLint())
.pipe(sassLint.format())
gulpfile.js
T o d a y ’ s E n v i r o n m e n t
h t t p s : / / g i t h u b . c o m / f r o n t a i n e r / a u t o c s s
F u l l V e r s i o n
h t t p s : / / g i t h u b . c o m / f r o n t a i n e r / f r o n t p l a t e
h t t p s : / / g i t h u b . c o m / f r o n t a i n e r / f r o n t p l a t e / t r e e / d e v e l o p
β V e r s i o n
T h a n k y o u
@frontainer

More Related Content

What's hot

Yeoman is awesome
Yeoman is awesomeYeoman is awesome
Yeoman is awesomeDataArt
 
Unit Testing con Jest + Enzime para ReactJs
Unit Testing con Jest + Enzime para ReactJsUnit Testing con Jest + Enzime para ReactJs
Unit Testing con Jest + Enzime para ReactJsGabrielComas2
 
C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発祐司 伊藤
 
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Ontico
 
Сборка JavaScript-проектов с помощью Grunt
Сборка JavaScript-проектов с помощью GruntСборка JavaScript-проектов с помощью Grunt
Сборка JavaScript-проектов с помощью GruntFDConf
 

What's hot (6)

Yeoman is awesome
Yeoman is awesomeYeoman is awesome
Yeoman is awesome
 
Unit Testing con Jest + Enzime para ReactJs
Unit Testing con Jest + Enzime para ReactJsUnit Testing con Jest + Enzime para ReactJs
Unit Testing con Jest + Enzime para ReactJs
 
C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発
 
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
 
Сборка JavaScript-проектов с помощью Grunt
Сборка JavaScript-проектов с помощью GruntСборка JavaScript-проектов с помощью Grunt
Сборка JavaScript-проектов с помощью Grunt
 
Rubyslava2102
Rubyslava2102Rubyslava2102
Rubyslava2102
 

More from Hayashi Yuichi

実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会Hayashi Yuichi
 
Dockerとフロントエンド
DockerとフロントエンドDockerとフロントエンド
DockerとフロントエンドHayashi Yuichi
 
雇われエンジニアがCTOになってIVSに参加するまでの話 - IVS CTO Night 2016-05
雇われエンジニアがCTOになってIVSに参加するまでの話 - IVS CTO Night 2016-05雇われエンジニアがCTOになってIVSに参加するまでの話 - IVS CTO Night 2016-05
雇われエンジニアがCTOになってIVSに参加するまでの話 - IVS CTO Night 2016-05Hayashi Yuichi
 
とりあえず始めるAngular2
とりあえず始めるAngular2とりあえず始めるAngular2
とりあえず始めるAngular2Hayashi Yuichi
 
Angular1.4で作られた自社マイクロサービスを2へマイグレーション
Angular1.4で作られた自社マイクロサービスを2へマイグレーションAngular1.4で作られた自社マイクロサービスを2へマイグレーション
Angular1.4で作られた自社マイクロサービスを2へマイグレーションHayashi Yuichi
 
Angularおじさんの1年
Angularおじさんの1年Angularおじさんの1年
Angularおじさんの1年Hayashi Yuichi
 
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おうHayashi Yuichi
 
LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築Hayashi Yuichi
 
One-time Binding & $digest
One-time Binding & $digestOne-time Binding & $digest
One-time Binding & $digestHayashi Yuichi
 
いい感じのフロントエンド開発環境を作ってみた
いい感じのフロントエンド開発環境を作ってみたいい感じのフロントエンド開発環境を作ってみた
いい感じのフロントエンド開発環境を作ってみたHayashi Yuichi
 
Front-end package managers
Front-end package managersFront-end package managers
Front-end package managersHayashi Yuichi
 
Gulp入門 - コーディングを10倍速くする
Gulp入門 - コーディングを10倍速くするGulp入門 - コーディングを10倍速くする
Gulp入門 - コーディングを10倍速くするHayashi Yuichi
 
ng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターンng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターンHayashi Yuichi
 
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIGHayashi Yuichi
 

More from Hayashi Yuichi (16)

実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会
 
Dockerとフロントエンド
DockerとフロントエンドDockerとフロントエンド
Dockerとフロントエンド
 
雇われエンジニアがCTOになってIVSに参加するまでの話 - IVS CTO Night 2016-05
雇われエンジニアがCTOになってIVSに参加するまでの話 - IVS CTO Night 2016-05雇われエンジニアがCTOになってIVSに参加するまでの話 - IVS CTO Night 2016-05
雇われエンジニアがCTOになってIVSに参加するまでの話 - IVS CTO Night 2016-05
 
とりあえず始めるAngular2
とりあえず始めるAngular2とりあえず始めるAngular2
とりあえず始めるAngular2
 
Angular1.4で作られた自社マイクロサービスを2へマイグレーション
Angular1.4で作られた自社マイクロサービスを2へマイグレーションAngular1.4で作られた自社マイクロサービスを2へマイグレーション
Angular1.4で作られた自社マイクロサービスを2へマイグレーション
 
LIGでのDocker活用
LIGでのDocker活用LIGでのDocker活用
LIGでのDocker活用
 
Angularおじさんの1年
Angularおじさんの1年Angularおじさんの1年
Angularおじさんの1年
 
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
 
LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築
 
One-time Binding & $digest
One-time Binding & $digestOne-time Binding & $digest
One-time Binding & $digest
 
いい感じのフロントエンド開発環境を作ってみた
いい感じのフロントエンド開発環境を作ってみたいい感じのフロントエンド開発環境を作ってみた
いい感じのフロントエンド開発環境を作ってみた
 
Front-end package managers
Front-end package managersFront-end package managers
Front-end package managers
 
Gulp入門 - コーディングを10倍速くする
Gulp入門 - コーディングを10倍速くするGulp入門 - コーディングを10倍速くする
Gulp入門 - コーディングを10倍速くする
 
CSS Living StyleGuide
CSS Living StyleGuideCSS Living StyleGuide
CSS Living StyleGuide
 
ng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターンng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターン
 
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
 

Automated css

  • 1. A u t o m a t e d C S S
  • 2. @frontainer CTO Front-end Engineer 林 優一 株式会社LIG - CTO (フロントエンドチームリーダー) AngularJS Japan User Group フロントエンド開発・フロントエンドエンジニア育成を担当し デザイン分野からサーバーサイド分野まで幅広く対応。 AngularJSのコミュニティに所属し、ng-mtgやDevelopers Summitで スピーカーを務める。得意言語はJavaScript。 2015年6月にフロントエンドチームリーダー兼務のままCTO就任。 自社開発チームのエンジニアとしても活動。
  • 3. - CSSのインデントや記述の仕方がバラバラ - パフォーマンス・チューニング?? - ベンダープレフィックスなんてとりあえず全部つけておけばいいだろう! - 圧縮を納品前にやって、圧縮したら崩れた
  • 4. A u t o m a t e d C S S
  • 6. L e t ’ s t r y ! ! h t t p s : / / g i t h u b . c o m / f r o n t a i n e r / a u t o c s s
  • 7. N o d e . j s h t t p s : / / n o d e j s . o r g / e n /
  • 8.
  • 9.
  • 10. G u l p . j s h t t p : / / g u l p j s . c o m /
  • 11. $ npm i gulp -g
  • 12. $ npm i gulp-sass --save-dev $ npm i gulp-sass-lint --save-dev $ npm i gulp-csso --save-dev $ npm i gulp-postcss --save-dev $ npm i autoprefixer --save-dev $ npm i doiuse --save-dev $ npm i css-mqpacker --save-dev
  • 13. var gulp = require('gulp'); var sass = require('gulp-sass'); var sassLint = require('gulp-sass-lint'); var postcss = require('gulp-postcss'); var csso = require('gulp-csso'); gulp.task('default', function () { return gulp.watch('*.scss',['css']); }); var browsers = [ //'last 2 versions', //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) gulpfile.js
  • 14. g u l p - s a s s h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / g u l p - s a s s
  • 15. //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) .pipe(sassLint.failOnError()) .pipe(sass()) .pipe(postcss([ require('doiuse')({browsers: browsers,ignore:['transforms2d']}), require('autoprefixer')({browsers: browsers}), require('css-mqpacker') ])) .pipe(csso()) .pipe(gulp.dest('dest')); }); gulpfile.js
  • 16.
  • 17. $font-size: 30px; $link-color: #ff290e; .test { .test-heading { font-size: 20px; font-weight: bold; } .test-content { padding: 10px 10px 10px 10px; } } .test .test-heading { font-size: 30px; font-weight: 700; } .test .test-content { padding: 10px 10px 10px 10px; }
  • 18. g u l p - s a s s - l i n t h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / g u l p - s a s s - l i n t
  • 19. //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) .pipe(sassLint.failOnError()) .pipe(sass()) .pipe(postcss([ require('doiuse')({browsers: browsers,ignore:['transforms2d']}), require('autoprefixer')({browsers: browsers}), require('css-mqpacker') ])) .pipe(csso()) .pipe(gulp.dest('dest')); }); gulpfile.js
  • 20. files: include: '**/*.scss' options: formatter: stylish merge-default-rules: false rules: border-zero: - 1 - convention: zero brace-style: - 1 - allow-single-line: true clean-import-paths: - 1 - filename-extension: false leading-underscore: false empty-line-between-blocks: - 0 - ignore-single-line-rulesets: true extends-before-declarations: 1 .sass-lint.yml
  • 21. R u l e s h t t p s : / / g i t h u b . c o m / s a s s t o o l s / s a s s - l i n t / t r e e / m a s t e r / d o c s / r u l e s
  • 22.
  • 23. g u l p - c s s o h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / g u l p - c s s o
  • 24. //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) .pipe(sassLint.failOnError()) .pipe(sass()) .pipe(postcss([ require('doiuse')({browsers: browsers,ignore:['transforms2d']}), require('autoprefixer')({browsers: browsers}), require('css-mqpacker') ])) .pipe(csso()) .pipe(gulp.dest('dest')); }); gulpfile.js
  • 25. $font-size: 30px; $link-color: #ff290e; .test { .test-heading { font-size: 20px; font-weight: bold; } .test-content { padding: 10px 10px 10px 10px; } } .test .test-heading { font-size: 30px; font-weight: 700; } .test .test-content { padding: 10px 10px 10px 10px; } .test .test-heading{font-size:30px;font-weight:700}.test .test-content{padding:10px}
  • 26. g u l p - p o s t c s s h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / g u l p - p o s t c s s
  • 27. //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) .pipe(sassLint.failOnError()) .pipe(sass()) .pipe(postcss([ require('doiuse')({browsers: browsers,ignore:['transforms2d']}), require('autoprefixer')({browsers: browsers}), require('css-mqpacker') ])) .pipe(csso()) .pipe(gulp.dest('dest')); }); gulpfile.js
  • 28. A u t o P r e f i x e r h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / a u t o p r e f i x e r
  • 29. //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) .pipe(sassLint.failOnError()) .pipe(sass()) .pipe(postcss([ require('doiuse')({browsers: browsers,ignore:['transforms2d']}), require('autoprefixer')({browsers: browsers}), require('css-mqpacker') ])) .pipe(csso()) .pipe(gulp.dest('dest')); }); gulpfile.js
  • 30. return gulp.watch('*.scss',['css']); }); var browsers = [ //'last 2 versions', //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) .pipe(sassLint.failOnError()) .pipe(sass()) .pipe(postcss([ require('doiuse')({browsers: browsers,ignore:['transforms2d']}), require('autoprefixer')({browsers: browsers}), require('css-mqpacker') ])) gulpfile.js
  • 31. a { &:hover { transform: scale(1.2); } } a:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}
  • 32. D o I U s e h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / d o i u s e
  • 33. //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) .pipe(sassLint.failOnError()) .pipe(sass()) .pipe(postcss([ require('doiuse')({browsers: browsers,ignore:['transforms2d']}), require('autoprefixer')({browsers: browsers}), require('css-mqpacker') ])) .pipe(csso()) .pipe(gulp.dest('dest')); }); gulpfile.js
  • 34. a { &:hover { transform: scale(1.2); filter: blur(10px); } } a:hover{-webkit-transform:scale(1.2);transform:scale(1.2); -webkit-filter:blur(10px);filter:blur(10px)}
  • 35.
  • 36. c s s - m q p a c k e r h t t p s : / / w w w . n p m j s . c o m / p a c k a g e / c s s - m q p a c k e r
  • 37. //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) .pipe(sassLint.failOnError()) .pipe(sass()) .pipe(postcss([ require('doiuse')({browsers: browsers,ignore:['transforms2d']}), require('autoprefixer')({browsers: browsers}), require('css-mqpacker') ])) .pipe(csso()) .pipe(gulp.dest('dest')); }); gulpfile.js
  • 38. @media screen and (max-width:800px) { .test { width: 100px; } } @media screen and (max-width:800px) { .test2 { width: 200px; } } @media screen and (max-width:800px){.test{width:100px}.test2{width:200px}}
  • 39. W a t c h i n g
  • 40. var gulp = require('gulp'); var sass = require('gulp-sass'); var sassLint = require('gulp-sass-lint'); var postcss = require('gulp-postcss'); var csso = require('gulp-csso'); gulp.task('default', function () { return gulp.watch('*.scss',['css']); }); var browsers = [ //'last 2 versions', //'ie >= 9', '> 3%' ]; gulp.task('css', function () { return gulp.src('*.scss') .pipe(sassLint()) .pipe(sassLint.format()) gulpfile.js
  • 41.
  • 42. T o d a y ’ s E n v i r o n m e n t h t t p s : / / g i t h u b . c o m / f r o n t a i n e r / a u t o c s s
  • 43. F u l l V e r s i o n h t t p s : / / g i t h u b . c o m / f r o n t a i n e r / f r o n t p l a t e h t t p s : / / g i t h u b . c o m / f r o n t a i n e r / f r o n t p l a t e / t r e e / d e v e l o p β V e r s i o n
  • 44. T h a n k y o u @frontainer