Tất cả các plugin có ở đây ví dụ xử lý font ...
https://postcss.org/docs/postcss-plugins
PostCSS là một xu hướng sử dụng CSS chuyển thể mới nổi lên từ năm 2016. Sự xuất hiện của nó đem lại khá nhiều tiện ích và được cộng đồng Lập trình Frontend khá ưa chuộng. Code Tốt xin giới thiệu những điểm nhấn và ứng dụng rộng rãi của PostCSS.
PostCSS là gì?
PostCSS ra đời vào cuối năm 2013 và được một số lượng lớn frontend developer ứng dụng vào các dự án của mình, bao gồm cả các công ty lớn như Google, Twitter, Shopify.
PostCSS là một công cụ dùng JavaScript để xử lý CSS
Định nghĩa từ trên Github cho rằng đây là một công cụ để chuyển đổi style với các plugin JS, chẳng hạn như tối ưu CSS, hỗ trợ biến và mixins, sư dụng các công nghệ CSS của tương lai,…
Nó chuyển CSS của bạn thành AST (abstract syntax tree )(cây cú pháp trừu tượng) Một điều tuyệt vời của công cụ này là nó mang tính modular rõ rệt.
Chính bởi cách tiếp cận này, có tới hơn 200 plugin có thể sử dụng cùng PostCSS.
Sau đây là một số plugin phổ biến sử dụng với PostCCC
Sử dụng PostCSS và gulp
Bắt đầu cài đặt
Copy npm install --save-dev postcss gulp gulp-postcss
Hoặc yarn add -D postcss gulp gulp-postcss
Thêm các plugin của PostCSS
Copy yarn add -D postcss-import autoprefixer cssnano
gulpfile.js
Step 1: Sử dụng postcss-nested
Copy var gulp = require ( 'gulp' );
var postcss = require ( 'gulp-postcss' );
var postcssNested = require ( 'postcss-nested' )
gulp .task ( 'css' , function () {
var plugins = [postcssNested];
return gulp .src ( './src/*.css' )
.pipe ( postcss (plugins))
.pipe ( gulp .dest ( './dest' ));
});
package.json
Copy {
"name" : "postcss" ,
"version" : "1.0.0" ,
"main" : "index.js" ,
"scripts" : {
"test" : "gulp css"
} ,
"keywords" : [] ,
"author" : "" ,
"license" : "ISC" ,
"description" : "" ,
"devDependencies" : {
"@types/autoprefixer" : "^9.7.2" ,
"autoprefixer" : "^10.4.20" ,
"cssnano" : "^7.0.6" ,
"gulp" : "^5.0.0" ,
"gulp-postcss" : "^10.0.0" ,
"postcss-import" : "^16.1.0"
} ,
"dependencies" : {
"postcss" : "^8.4.49"
}
}
src\style.css
Copy .phone {
&_ title {
width : 500 px ;
@ media ( max-width : 500 px ) {
width : auto ;
}
body .is_dark & {
color : white ;
}
}
img {
display : block ;
}
}
Kết quả:
dest\style.css
Copy .phone_title {
width : 500 px ;
}
@media ( max-width : 500 px ) {
.phone_title {
width : auto ;
}
}
body .is_dark .phone_title {
color : white ;
}
.phone img {
display : block ;
}
Step 2: Sử dụng postcss-nested
src\style.css
Copy @import "import" ;
.phone {
&_ title {
width : 500 px ;
@ media ( max-width : 500 px ) {
width : auto ;
}
body .is_dark & {
color : white ;
}
}
img {
display : block ;
}
}
src\import.css
gulpfile.js
Copy var gulp = require ( 'gulp' );
var postcss = require ( 'gulp-postcss' );
var postcssNested = require ( 'postcss-nested' );
var postcssImport = require ( 'postcss-import' );
gulp .task ( 'css' , function () {
var plugins = [postcssNested , postcssImport];
return gulp .src ( './src/*.css' )
.pipe ( postcss (plugins))
.pipe ( gulp .dest ( './dest' ));
});
Biến đổi nó thành 1 đầu vào thôi
Copy var gulp = require ( 'gulp' );
var postcss = require ( 'gulp-postcss' );
var postcssNested = require ( 'postcss-nested' );
var postcssImport = require ( 'postcss-import' );
gulp .task ( 'css' , function () {
var plugins = [postcssNested , postcssImport];
return gulp .src ( './src/style.css' )
.pipe ( postcss (plugins))
.pipe ( gulp .dest ( './dest' ));
});
dest\style.css
Kết quả như mong đợi
Copy body {
color : red ;
}
.phone_title {
width : 500 px ;
}
@media ( max-width : 500 px ) {
.phone_title {
width : auto
}
}
body .is_dark .phone_title {
color : white ;
}
.phone img {
display : block ;
}
Step 3: Sử dụng Autoprefixer
gulpfile.js
Copy var gulp = require ( 'gulp' );
var postcss = require ( 'gulp-postcss' );
var postcssNested = require ( 'postcss-nested' );
var postcssImport = require ( 'postcss-import' );
var autoPreFixer = require ( 'autoprefixer' );
gulp .task ( 'css' , function () {
var plugins = [postcssNested , postcssImport , autoPreFixer];
return gulp .src ( './src/style.css' )
.pipe ( postcss (plugins))
.pipe ( gulp .dest ( './dest' ));
});
src\style.css
Copy .example {
display : grid ;
user-select : none ;
}
dest\style.css
Kết quả
Copy .example {
display : grid ;
-webkit-user-select : none ;
-moz-user-select : none ;
user-select : none ;
}
Autoprefixer còn cho phép bạn có thể lựa chọn tiền tố cho từng trình duyệt cụ thể
package.json
Copy "browserslist" : [ "last 1 version" , "> 1%" ]
Nó sẽ compile ra file
dest\style.css
Copy .example {
display : grid ;
-webkit-user-select : none ;
-ms-user-select : none ;
user-select : none ;
}
package.json
Copy "browserslist" : [ "last 1 chrome versions" ]
Nó sẽ compile ra file
dest\style.css
Copy .example {
display : grid ;
user-select : none ;
}
Các tham số tham khảo thêm ở đây: https://browsersl.ist
Step 4: Sử dụng postcss-preset-env
PostCSS Preset Env cho phép bạn chuyển đổi CSS hiện đại thành thứ mà hầu hết các trình duyệt có thể hiểu được, xác định các polyfill bạn cần dựa trên trình duyệt hoặc môi trường thời gian chạy mục tiêu.
gulpfile.js
Copy var gulp = require ( 'gulp' );
var postcss = require ( 'gulp-postcss' );
var postcssNested = require ( 'postcss-nested' );
var postcssImport = require ( 'postcss-import' );
var autoPreFixer = require ( 'autoprefixer' );
var postcssPresetEnv = require ( 'postcss-preset-env' );
gulp .task ( 'css' , function () {
var plugins = [postcssNested , postcssImport , autoPreFixer , postcssPresetEnv];
return gulp .src ( './src/style.css' )
.pipe ( postcss (plugins))
.pipe ( gulp .dest ( './dest' ));
});
src\style.css
Copy @custom-media --viewport-medium (width <= 50rem);
@custom-selector :--heading h1, h2, h3, h4, h5, h6;
:root {
--mainColor : #12345678 ;
}
body {
color : var (--mainColor) ;
font-family : system-ui ;
overflow-wrap : break-word ;
}
:--heading {
background-image : image-set ( url (img/heading.png) 1x , url (img/heading@2x.png) 2x) ;
@ media (--viewport-medium) {
margin-block : 0 ;
}
}
a {
color : rgb (0 0 100 % / 90 % ) ;
& : hover {
color: rebeccapurple ;
}
}
Kết quả
dest\style.css
Copy @custom-selector :--heading h1, h2, h3, h4, h5, h6;
:root {
--mainColor : rgba (18 , 52 , 86 , 0.47059) ;
}
body {
color : rgba (18 , 52 , 86 , 0.47059) ;
color : var (--mainColor) ;
font-family : system-ui , -apple-system , Segoe UI , Roboto , Ubuntu , Cantarell , Noto Sans , sans-serif ;
word-wrap : break-word ;
}
:--heading {
background-image : url (img/heading.png) ;
background-image : -webkit-image-set( url (img/heading.png) 1x , url (img/heading@2x.png) 2x );
background-image : image-set ( url (img/heading.png) 1x , url (img/heading@2x.png) 2x) ;
}
@media ( -webkit-min-device-pixel-ratio : 2 ) , ( min-resolution : 192 dpi ){
:--heading {
background-image : url (img/heading@2x.png) ;
}
}
@media ( max-width : 50 rem ) {
:--heading {
margin-top : 0 ;
margin-bottom : 0
}
}
a {
color : rgba (0 , 0 , 255 , 0.9) ;
}
a :hover {
color : #639 ;
}
Step 5: Sử dụng postcss-each
Sử dụng với vòng lặp
src\style.css
Copy @each $icon in foo, bar, baz {
. icon- $(icon) {
background : url ( 'icons/$(icon).png' ) ;
}
}
Kết quả:
dest\style.css
Copy .icon-foo {
background : url ( "icons/foo.png" ) ;
}
.icon-bar {
background : url ( "icons/bar.png" ) ;
}
.icon-baz {
background : url ( "icons/baz.png" ) ;
}
Step 6: cssnano
cssnano giúp minify (giảm dung lượng) file CSS đầu ra
gulpfile.js
Copy var gulp = require ( 'gulp' );
var postcss = require ( 'gulp-postcss' );
var postcssNested = require ( 'postcss-nested' );
var postcssImport = require ( 'postcss-import' );
var autoPreFixer = require ( 'autoprefixer' );
var postcssPresetEnv = require ( 'postcss-preset-env' );
var postcssEach = require ( 'postcss-each' );
var cssNano = require ( 'cssnano' );
gulp .task ( 'css' , function () {
var plugins = [postcssNested , postcssImport , autoPreFixer , postcssPresetEnv , postcssEach , cssNano];
return gulp .src ( './src/style.css' )
.pipe ( postcss (plugins))
.pipe ( gulp .dest ( './dest' ));
});