ess和Sass主要是解決了一個模塊化的問題,但是還有一個全局的樣式的污染問題。我今天個人分享的就是關于PostCss的一些個人理解。
PostCss是Autoprefixer的開發者Andrey Sitnik開發的,它最初是一個通過JavaScript來處理CSS 的方法。
可以理解為一種插件系統(類似于css領域的webpack),它本身只是一個API,作為一個API它可以創建任何需要的插件和工具。
PostCss有兩個概念:pre-processor(預處理器)和post-processor(后處理器)。
像Sass、Less和Stylus都是屬于預處理器的范疇,按照預處理器的語法來寫css的代碼,最后交由預處理器的編譯器編譯成一個傳統的css,這個就叫做預處理器。
post-processor(后處理器)就是我們把css代碼寫完之后,交由它去處理,添加一些必要的屬性,比如比較典型的:CSS Prefixer,會加上一些瀏覽器的前綴。
PostCSS is a tool for transformimg CSS with JS plugins.
These plugins can support variables and mixins,transpile future CSS syntax,inline images,and more.
翻譯過來的意思就是說呢,PostCSS是一個用JS插件轉換css的工具。這些插件可以支持變量和混合,轉換成未來的css語法,內聯圖像等。我們可以把PostCss理解成一個管道,然后在管道各處可以放一些插件,然后從管道經過的css都會經過插件的處理。實際上PostCss它將css代碼轉換成抽象的一個語法結構AST,就是一個對象的一個樹,然后方便插件處理。
PostCss是一個插件系統,所以它既不是預處理器也不是后處理器,類似于css領域的webpack、Grunt和Gulp進行集成。它的作用就是整合預處理器和后處理器。
關于PostCss的使用,一般是不單獨使用的,與已有的構建工具集合;比如webpack、Grunt和Gulp。
最廣泛的PostCss使用是與webpack集成。
1 搭建環境
npm init
06-18-01
npm install webpack webpack-cli --save-dev
注意:”script“:{“bulid”:"webpack --config webpack.config.js"}意思就是說在運行webpack,--config表示指定配置文件,webpack.config.js 配置文件名。
06-18-02
06-18-03
npm run build
因為要查看PostCss打包的一個效果,所以分離css是一定需要的。
需要安裝的插件:
npm install css-loader --save-dev npm install extract-text-webpack-plugin@next --save-dev npm install postcss-loader --save-dev
自動添加瀏覽器前綴,這個插件是根據can i use解析css并且為其添加瀏覽器廠商前綴的PostCss插件。
caniuse(https://www.caniuse.com )是一個網站,我們可以在這個網站里面知道我們所使用的一個屬性的瀏覽器的支持情況。
npm install autoprefixer --save-dev
安裝之后添加到webpack.config.js下面的loader里面
強制開發人員按照團隊css規范來寫css樣式的工具,類似的eslint(JS的規范)。
npm install stylelint stylelint-config-lost stylelint-config-standard --save-dev
它是一個強大的,現代的linter,可以幫助您避免錯誤并在您的樣式中強制執行約定。 為什么是強大的呢?因為它的特征:
關于它更多的介紹可以通過(https://stylelint.io/ )官網了解一下。
npm install postcss-cssnext --save-dev
以模塊化方式實現Css, 重點在于解決了樣式沖突
npm install postcss-modules --save-dev
強大的PostCSS網格系統
npm install lost --save-dev
文章主要介紹了PostCss的定位,結合webpack介紹了PostCss主要的幾個插件:autoprefixer、postcss-cssnext、postcss-modules、lost、stylelint。文章可能存在很多不足,閱讀的小伙伴們看到了可以稍作提示或者哪里有錯誤的可以私信告訴我糾正過來,O(∩_∩)O謝謝。
ostcss 一種對css編譯的工具,類似babel對js的處理,常見的功能如:
1 . 使用下一代css語法
2 . 自動補全瀏覽器前綴
3 . 自動把px代為轉換成rem
4 . css 代碼壓縮等等
postcss 只是一個工具,本身不會對css一頓操作,它通過插件實現功能,autoprefixer 就是其一。
less sass 是預處理器,用來支持擴充css語法。
postcss 既不是 預處理器也不是 后處理器,其功能比較廣泛,而且重要的一點是,postcss可以和less/sass結合使用
這里只說在webpack里集成使用,首先需要 loader
1 . 安裝
npm install postcss-loader –save-dev
2 . webpack配置
一般與其他loader配合使用,下面*標部分才是postcss用到的
配合時注意loader的順序(從下面開始加載)
3 . postcss配置
項目根目錄新建 postcss.config.js文件,里面配置一些插件
注:也可以在webpack中配置
1 . Autoprefixer
前綴補全,全自動的,無需多說
安裝:
cnpm install Autoprefixer --save-dev
2 . postcss-cssnext
使用下個版本的css語法【關于語法另一篇文章會單獨講】
安裝:
cnpm install postcss-cssnext --save-dev
3 . postcss-pxtorem
把px轉換成rem
安裝:
cnpm install postcss-pxtorem --save-dev
配置項:
特殊技巧:不轉換成rem
px檢測區分大小寫,也就是說Px/PX/pX不會被轉換,可以用這個方式避免轉換成rem
大致步驟:
在PostCSS中有幾個關鍵的處理機制:
Source string → Tokenizer → Parser → AST → Processor → Stringifier
將源css字符串進行分詞
舉個例子:
.className { color: #FFF; }
通過Tokenizer后結果如下:
[
["word", ".className", 1, 1, 1, 10]
["space", " "]
["{", "{", 1, 12]
["space", " "]
["word", "color", 1, 14, 1, 18]
[":", ":", 1, 19]
["space", " "]
["word", "#FFF" , 1, 21, 1, 23]
[";", ";", 1, 24]
["space", " "]
["}", "}", 1, 26]
]
以word類型為例,參數如下:
const token=[
// token 的類型,如word、space、comment
'word',
// 匹配到的詞名稱
'.className',
// 代表該詞開始位置的row以及column,但像 type為`space`的屬性沒有該值
1, 1,
// 代表該詞結束位置的row以及column,
1, 10
]
經過Tokenizer之后,需要Parser將結果初始化為AST
this.root={
type: 'root',
source: { input: {css: ".className { color: #FFF; }", hasBOM: false, id: "<input css 1>"},
start: { line: 1, column: 1 } ,
end: { line: 1, column: 27 }
},
raws:{after: "", semicolon: false}
nodes // 子元素
}
經過AST之后,PostCSS提供了大量JS API給插件用
插件處理后,比如加瀏覽器前綴,會被重新Stringifier.stringify為一般CSS。
參考:
https://segmentfault.com/a/1190000017886402
https://www.jianshu.com/p/288963680642
作者:指尖跳動
鏈接:https://www.jianshu.com/p/9a9048bc8978
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
PostCSS 是一個強大的 CSS 處理工具,可以幫助開發者自動化地轉換和優化 CSS。通過.postcss.js 配置文件,你可以定制化地配置 PostCSS 插件和選項,以適應你的項目需求。本文將詳細介紹.postcss.js 配置文件的各個方面,幫助你更好地理解如何配置 PostCSS。
首先,你需要在項目根目錄下創建一個名為.postcss.js 的文件。這個文件將作為 PostCSS 的配置文件,并包含一些用于配置插件和選項的 JavaScript 代碼。
一個簡單的.postcss.js 配置文件可能如下所示:
module.exports={
plugins: [
'autoprefixer',
'cssnano'
]
};
在這個配置中,我們使用了兩個常用的 PostCSS 插件:autoprefixer 用于自動添加 CSS 前綴,cssnano 用于壓縮和優化 CSS。
你可以通過對象形式配置插件,設置插件的選項。例如,配置autoprefixer 插件的瀏覽器支持:
module.exports={
plugins: {
'autoprefixer': {
overrideBrowserslist: ['last 2 versions', '> 5%']
},
'cssnano': {}
}
};
在.postcss.js 配置文件中,你還可以使用更多高級選項。以下是一些示例:
你可以根據不同條件來配置插件。例如,只在生產環境下使用cssnano 插件:
const isProduction=process.env.NODE_ENV==='production';
module.exports={
plugins: {
'autoprefixer': {},
...(isProduction ? { 'cssnano': {} } : {})
}
};
有時,你可能想將多個插件配置串聯起來。你可以使用postcss-preset-env 插件來預設多個插件配置:
module.exports={
plugins: {
'postcss-preset-env': {
stage: 1,
features: {
'nesting-rules': true
}
}
}
};
你可以使用插件的別名來替代插件的名稱,以便更好地管理配置。
module.exports={
plugins: {
'autoprefixer': {},
'cssnano': {},
'postcss-preset-env': {
stage: 1,
features: {
'nesting-rules': true
}
}
}
};
.postcss.js 配置文件允許你定制化地配置 PostCSS 插件和選項,以滿足不同項目的需求。通過了解基本配置、插件配置、高級選項以及插件的別名使用,你可以更好地掌握如何使用.postcss.js 配置文件,優化你的 CSS 處理流程,提高開發效率。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。