整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          初識PostCss

          初識PostCss

          ess和Sass主要是解決了一個模塊化的問題,但是還有一個全局的樣式的污染問題。我今天個人分享的就是關于PostCss的一些個人理解。

          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定位和使用

          PostCss是一個插件系統,所以它既不是預處理器也不是后處理器,類似于css領域的webpack、Grunt和Gulp進行集成。它的作用就是整合預處理器和后處理器。

          關于PostCss的使用,一般是不單獨使用的,與已有的構建工具集合;比如webpack、Grunt和Gulp。

          最廣泛的PostCss使用是與webpack集成。

          與webpack集成

          1 搭建環境

          • 得到一個package.json文件
          npm init
          

          06-18-01

          • 安裝webpack依賴包
          npm install webpack webpack-cli --save-dev
          
          • --save表示會把依賴保存在package.json的文件里面來,然后-dev就會保存到devDependencies里面。
          注意:”script“:{“bulid”:"webpack --config webpack.config.js"}意思就是說在運行webpack,--config表示指定配置文件,webpack.config.js 配置文件名。
          
          • 配置webpack.config.js

          06-18-02

          06-18-03

          • 打包index.js
          npm run build
          
          • 分離css

          因為要查看PostCss打包的一個效果,所以分離css是一定需要的。

          需要安裝的插件:

          npm install css-loader --save-dev
          npm install extract-text-webpack-plugin@next --save-dev
          npm install postcss-loader --save-dev
          

          PostCss 常見插件介紹

          • autoprefixer

          自動添加瀏覽器前綴,這個插件是根據can i use解析css并且為其添加瀏覽器廠商前綴的PostCss插件。

          caniuse(https://www.caniuse.com )是一個網站,我們可以在這個網站里面知道我們所使用的一個屬性的瀏覽器的支持情況。

          npm install autoprefixer --save-dev
          

          安裝之后添加到webpack.config.js下面的loader里面

          • stylelint

          強制開發人員按照團隊css規范來寫css樣式的工具,類似的eslint(JS的規范)。

          npm install stylelint stylelint-config-lost stylelint-config-standard --save-dev
          

          它是一個強大的,現代的linter,可以幫助您避免錯誤并在您的樣式中強制執行約定。 為什么是強大的呢?因為它的特征:

          • 了解最新的CSS語法,包括自定義屬性和4級選擇器
          • 從HTML,markdown和CSS-in-JS對象和模板文字中提取嵌入式樣式
          • 解析類似CSS的語法,如SCSS,Sass,Less和SugarSS
          • 擁有超過170條內置規則來捕獲錯誤,應用限制并強制執行風格約定
          • 支持插件,因此您可以創建自己的規則或使用社區編寫的插件
          • 自動修復一些違規行為(實驗性功能)
          • 是很好的測試超過10000的單元測試
          • 支持可共享的配置,您可以擴展或創建自己的配置
          • 被unopinionated這樣你就可以定制棉短絨您的確切需求
          • 有一個不斷增長的社區,[Facebook],[GitHub]和[WordPress使用]

          關于它更多的介紹可以通過(https://stylelint.io/ )官網了解一下。

          • postcss-cssnext(https://cssnext.github.io/ )
          npm install postcss-cssnext --save-dev
          
          • postcss-modules

          以模塊化方式實現Css, 重點在于解決了樣式沖突

          npm install postcss-modules --save-dev
          
          • lost

          強大的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 的區別

          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中配置

          常用的postcss插件

          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

          原理

          工作流

          大致步驟:

          1. 將CSS解析成抽象語法樹(AST樹)
          2. 將AST樹”傳遞”給任意數量的插件處理
          3. 將處理完畢的AST樹重新轉換成字符串

          在PostCSS中有幾個關鍵的處理機制:

          Source string → Tokenizer → Parser → AST → Processor → Stringifier

          Tokenizer

          將源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
          ]

          Parser

          經過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 // 子元素
          }

          Processor

          經過AST之后,PostCSS提供了大量JS API給插件用

          Stringifier

          插件處理后,比如加瀏覽器前綴,會被重新Stringifier.stringify為一般CSS。

          參考:
          https://segmentfault.com/a/1190000017886402
          https://www.jianshu.com/p/288963680642


          作者:指尖跳動
          鏈接:https://www.jianshu.com/p/9a9048bc8978
          來源:簡書
          著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

          析 .postcss.js 配置文件:深入了解 PostCSS 配置

          PostCSS 是一個強大的 CSS 處理工具,可以幫助開發者自動化地轉換和優化 CSS。通過.postcss.js 配置文件,你可以定制化地配置 PostCSS 插件和選項,以適應你的項目需求。本文將詳細介紹.postcss.js 配置文件的各個方面,幫助你更好地理解如何配置 PostCSS。

          創建 .postcss.js 配置文件

          首先,你需要在項目根目錄下創建一個名為.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 處理流程,提高開發效率。


          主站蜘蛛池模板: 日本一区二区三区在线视频| 丰满人妻一区二区三区免费视频 | 激情内射亚州一区二区三区爱妻| 冲田杏梨AV一区二区三区| 日本免费一区二区三区四区五六区| 久久精品国产免费一区| 久久人妻av一区二区软件| 无码av人妻一区二区三区四区| 国产精品亚洲综合一区在线观看| 在线免费视频一区二区| 国产福利视频一区二区| 在线观看亚洲一区二区| 国产精品熟女视频一区二区 | 亚洲AV无码一区二区乱孑伦AS| 久久精品国产一区二区三区日韩| 人妻AV中文字幕一区二区三区| 日韩一区二区三区电影在线观看| 三上悠亚日韩精品一区在线| 亚洲码欧美码一区二区三区| 日本精品无码一区二区三区久久久| 亚洲一区二区三区国产精品| 亚洲宅男精品一区在线观看| 精品视频在线观看你懂的一区 | 久久国产精品无码一区二区三区 | 波多野结衣久久一区二区| 无码丰满熟妇浪潮一区二区AV | 香蕉免费一区二区三区| 日韩一区二区精品观看| 精品一区二区视频在线观看| 国产精品一区二区三区99| 国产产一区二区三区久久毛片国语| 无码人妻久久一区二区三区免费| 亚洲国产一区二区三区| 无码人妻一区二区三区一| 久久久精品人妻一区亚美研究所 | 国产精品亚洲产品一区二区三区| 亚洲AV日韩综合一区尤物| 精品无码一区二区三区爱欲| 亚洲av无码一区二区三区乱子伦 | 无码人妻精品一区二区蜜桃网站| 国精品无码一区二区三区在线蜜臀|