淺談PostCSS

1. 背景

  • css的預處理器語言(比如 sass, less, stylus)的擴展性不好,你可以使用它們已有的功能,但如果想做擴展就沒那么容易。

  • sass是很常用的css預處理器語言,在webpack中要使用它,需要安裝sass-loader,而sass-loader又依賴于node-sass。大家知道node-sass很龐大,安裝極其緩慢,經常安裝失敗。而且node-sass各版本對于node版本有嚴格限制,經常造成為了安裝某個node-sass版本而升級node版本的問題(在本地這沒有問題,但在服務器上升級node可能牽連很大)。

  • vue項目,都安裝了postcss(因為它是vue-loader的依賴項)。我們沒必要再安裝其它工具處理css。

2. 什么是PostCSS

  • 它是一個js庫,能夠將css轉換成js。

  • 它將css轉換成AST語法樹(表現為js對象),然后借助各種plugins對轉化后的js對象進行操作,最終轉化回css。

  • 所以說postcss是不會影響css的,只有安裝和配置plugin之后,才會影響css。

  • postcss可以看作是css的babel。

3. 如何在vue項目中使用和配置PostCSS

3.1 webpack中如何使用PostCSS

使用webpack的vue項目,都會安裝vue-loader(它是一個webpack的loader,用來將vue sfc組件轉換成js模塊)。而vue-loader正是借助postcss實現scoped css的,因此安裝了vue-loader就默認安裝了postcss。當然默認它并不包含我們需要的特性,因此我們就要安裝插件并配置。

關于安裝何種插件,我們會在后面介紹幾種常用的插件。

vue-loader可以自動加載以下3種postcss的配置文件

  1. postcss.config.js

  2. .postcssrc

  3. package.json 中的postcss字段

這里我們主要介紹第一種postcss.config.js,其格式如下

注意: 需要先安裝插件

module.exports = {plugins: [['postcss-import', { path: ['src/css/'] }],'postcss-mixins','postcss-nested','postcss-color-mod-function',['postcss-cssnext', {warnForDuplicates: false,}],['cssnano', {sourcemap: false,autoprefixer: false,safe: true,discardComments: {removeAll: true,},discardUnused: false,zindex: false,}]]
};

對postcss的配置,可以查閱 GitHub - webpack-contrib/postcss-loader: PostCSS loader for webpack

3.2 rollup中如何使用PostCSS

rollup需要引入rollup-plugin-postcss,并在rollup.config.js配置postcss,樣例如下

rollup-plugin-postcss的配置,參見官方文檔

// rollup.config.js
import postcss from 'rollup-plugin-postcss'export default {plugins: [postcss({plugins: []})]
}

4. 常用PostCSS插件

postcss-import4.1?postcss-import:允許從其它 css 文件引入css。

注意:這個插件一般需要放在插件列表的第一位,這樣才能保證其它的插件工作正常。

方式:

  • 引入時,指定路徑,則從路徑下查找

@import '../css/styles.css';
  • 配置中指定 path, 并直接引入文件名,此時會從path查找

// postcss.config.js
['postcss-import', { path: ['src/css/'] }] // 在postcss.config.js中,指定path
// 在文件中引入
@import 'styles.css'; // 會加載src/css/styles.css

4.2?: 允許mixin

注意: 如果和postcss-simple-vars或者postcss-nested同用,此插件必須放在postcss-simple-vars或者postcss-nested之前

4.3?:允許像scss那樣定義變量

$dir:    top;
$blue:   #056ef0;
$column: 200px;.menu_link {background: $blue;width: $column;
}
.menu {width: calc(4 * $column);margin-$(dir): 10px;
}

4.4?:允許書寫嵌套語法

// postcss.config.js
module.exports = {plugins: [['postcss-import', { path: ['src/css/'] }],'postcss-nested']
};

4.5?:用來壓縮css

4.6?:在老舊瀏覽器上使用新的或者未來的css特性

該插件包含豐富的可選功能,可查看文檔選擇。這里主要用其控制自定義變量(custom variables),所以介紹如何配置以支持custom variables。

// 配置
module.exports = {plugins: [['postcss-import', { path: ['src/css/'] }],['postcss-preset-env', {stage: 2,// preserve 決定所有的插件是否接受preserve屬性(保留(true)或者忽略(false)其它polyfilled css(css的兜底方案)),// 這里preserve: false很關鍵,否則,自定義變量不起效preserve: false, // feature詳情可查看https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/FEATURES.md// 它里面有每個特性的文檔和樣例features: {'custom-selectors': true, // 自定義選擇器'custom-properties': true, // 自定義變量},// importFrom 用來指定從哪里導入各類變量(比如 Custom Media, Custom Properties, Custom Selectors, Environment Variables)// 如果只引入單個文件,可以不用數組importFrom: ['./src/css/colorDef.css']}]]
};

引入變量時,不需要使用@import

<style lang="postcss" scoped>/* 變量--color-danger 是在 'src/css/colorDef.css'文件定義的, 但不用導入css文件 */.about {.about-details {color: var(--color-danger);width: 100px;}}
</style>

postcss-preset-env 可以配置多個特性,見特性列表

4.7?postcss-px-to-viewport

rem響應式布局的缺陷:必須通過js來動態控制根元素font-size的大小。

postcss-px-to-viewport 的配置項

{unitToConvert: "px", // 要轉化的單位viewportWidth: 3024, // UI設計稿的寬度unitPrecision: 2, // 轉換后的精度,即小數點位數propList: ["*"], // 指定轉換的css屬性的單位,*代表全部css屬性的單位都進行轉換viewportUnit: "vw", // 指定需要轉換成的視窗單位,默認vwfontViewportUnit: "vw", // 指定字體需要轉換成的視窗單位,默認vw// selectorBlackList: ["wrap"], // 指定不轉換為視窗單位的類名,minPixelValue: 1, // 默認值1,小于或等于1px則不進行轉換// mediaQuery: true, // 是否在媒體查詢的css代碼中也進行轉換,默認falsereplace: true, // 是否轉換后直接更換屬性值// exclude: [/node_modules/], // 設置忽略文件,用正則做目錄名匹配landscape: false // 是否處理橫屏情況
}

5. 團隊介紹

三翼鳥數字化技術平臺-ToC服務平臺」以用戶行為數據為基礎,利用推薦引擎為用戶提供“千人千面”的個性化推薦服務,改善用戶體驗,持續提升核心業務指標。通過構建高效、智能的線上運營系統,全面整合數據資產,實現數據分析-人群圈選-用戶觸達-后效分析-策略優化的運營閉環,并提供可視化報表,一站式操作提升數字化運營效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44527.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44527.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式使用場景實現示例及優缺點(結構型模式——組合模式)

結構型模式 組合模式&#xff08;Composite Pattern&#xff09; 組合模式使得用戶對單個對象和組合對象的使用具有一致性。 有時候又叫做部分-整體模式&#xff0c;它使我們樹型結構的問題中&#xff0c;模糊了簡單元素和復雜元素的概念&#xff0c;客戶程序可以像處理簡單元…

小米起訴“小米”商標侵權,索賠500萬!

近日浙江麗水有家叫小米的公司&#xff0c;因為商標侵權被小米科技起訴索賠500萬&#xff0c;需要變更企業名稱&#xff0c;官網也不能用“小米智能大家居”等&#xff0c;還有其它的賠償&#xff0c;普推知產商標老楊分析&#xff0c;“小米智能大家居”“小米”&#xff0c;后…

【Flask從入門到精通:第九課:數據庫基本操作、數據表操作以及數據操作】

數據庫操作 數據庫驅動&#xff08;drivers&#xff09;模塊&#xff1a;pymysql、MySQLDB 數據庫基本操作 在SQLAlchemy中&#xff0c;添加、修改、刪除操作&#xff0c;均由數據庫會話(sessionSM)管理。 會話用 db.session 表示。在準備把數據寫入數據庫前&#xff0c;要先…

交易平臺Zero Hash現已支持SUI交易

Zero Hash是一家領先的加密貨幣和穩定幣基礎設施平臺&#xff0c;為包括Stripe、Shift4和Franklin Templeton在內的公司提供支持&#xff0c;現在也支持對SUI的訪問。此舉使Zero Hash的客戶及其終端用戶能夠使用SUI。 提供API和SDK以及專注于無縫連接法幣、加密貨幣和穩定幣的…

讀人工智能全傳11人工智能會出什么錯

1. 人工智能會出什么錯 1.1. 一些報道是公正合理的&#xff0c;不過坦白地說&#xff0c;大部分報道都愚蠢得無可救藥 1.2. 一些報道頗有知識性和引導性&#xff0c;而大部分則是杞人憂天式的恐嚇 1.3. 滑稽的報道迎合了大眾對人工智能的“終結者式恐懼” 1.3.1. 我們創造出…

html設計(兩種常見的充電效果)

第一種 完整代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

方便快捷傳文件—搭建rsync文件傳輸服務器

比如我們有一個服務器&#xff0c;想把各個機器的文件都通過腳本傳給這臺機&#xff0c;用sftp或者直接rsync就必須輸密碼&#xff0c;肯定不行&#xff0c;做等效性免密又麻煩&#xff0c;怎么辦呢&#xff0c;這么辦&#xff01; 在服務端 yum -y install rsync #編輯&…

Vue3 關于scss預編譯中:deep 其中的deep如何理解

在SCSS預處理器中&#xff0c;:deep是一個偽類選擇器&#xff0c;用于選擇一個元素的所有后代元素&#xff0c;無論它們在DOM結構中的層級深度如何。換句話說&#xff0c;:deep選擇器是一個類似于CSS中的后代選擇器&#xff0c;但是它可以不考慮嵌套層級的限制&#xff0c;而是…

Android MessageQueue 源碼分析

類注釋 /*** Low-level class holding the list of messages to be dispatched by a* {link Looper}. Messages are not added directly to a MessageQueue,* but rather through {link Handler} objects associated with the Looper.** <p>You can retrieve the Messa…

【FineGrip】全光學感知:一種新的通用遙感圖像解釋任務和細粒度數據集(IEEE TGRS 2024)

摘要 目前的遙感解譯模型通常集中于單一的任務&#xff0c;如檢測、分割或字幕。但是&#xff0c;針對特定任務設計的模型無法實現綜合多層次解譯。該領域也缺乏多任務聯合解譯數據集。本文提出Panoptic Perception&#xff0c;一個新的任務和一個新的細粒度數據集&#xff08…

apache Kylin系列介紹及配置

Apache Kylin是一個開源的分布式分析引擎,用于OLAP(聯機分析處理)數據處理。它專門設計用于處理大規模的數據集,并提供快速的查詢和分析能力。 apache Kylin架構: Apache Kylin是一個開源的分布式分析引擎,旨在提供高性能、低延遲的OLAP(聯機分析處理)能力。下面是Ap…

nvim工具介紹

1. **seoul256.vim**: 一個基于首爾色彩的低對比度 Vim 顏色方案&#xff0c;適用于 256 色終端或 GVim。 2. **vim-easy-align**: Vim 插件&#xff0c;用于對齊文本。 3. **vim-go**: Vim 的 Go 語言插件&#xff0c;支持語法高亮、自動縮進等。 4. **coc.nvim**: 集成了 LSP…

GESP CCF C++ 二級認證真題 2024年6月

第 1 題 小楊父母帶他到某培訓機構給他報名參加CCF組織的GESP認證考試的第1級&#xff0c;那他可以選擇的認證語言有幾種&#xff1f;&#xff08; &#xff09; A. 1 B. 2 C. 3 D. 4 第 2 題 下面流程圖在yr輸入2024時&#xff0c;可以判定yr代表閏年&#xff0c;并輸出 2月…

介紹一款數據準實時復制(CDC)中間件 `Debezium`

簡介 文章開頭先介紹一下什么是CDC。數據準實時復制(CDC)是目前行內實時數據需求大量使用的技術。常用的中間件有Canal、Debezium、Flink CDC等 下面我們做一下對比 各有優缺點吧,本主要介紹一下Debezium中間件。 Debezium是什么 Debezium是一個為變更數據捕獲(CDC)提供…

Windows圖形界面(GUI)-SDK-C/C++ - 列表框(List)

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> 鏈接點擊跳轉博客主頁 目錄 列表框(List) 控件樣式 創建控件 初始控件 消息處理 示例代碼 列表框(List) 控件樣式 列表框&#xff08;ListBox&#xff09;是Windows圖形界面開發中常用的控件&#xff0c;允許用戶從…

力扣第230題“二叉搜索樹中第K小的元素”

在本篇文章中&#xff0c;我們將詳細解讀力扣第230題“二叉搜索樹中第K小的元素”。通過學習本篇文章&#xff0c;讀者將掌握如何使用中序遍歷來找到二叉搜索樹中的第K小的元素&#xff0c;并了解相關的復雜度分析和模擬面試問答。每種方法都將配以詳細的解釋&#xff0c;以便于…

OpenAI終止對中國提供API服務,對國內AI市場產生重大沖擊?

6月25日&#xff0c;OpenAI突然宣布終止向包括中國在內的國家地區提供API服務&#xff0c;本月9日這一政策已經正式生效了&#xff01; 有人說&#xff0c;這個事件給中國AI行業帶來很大沖擊&#xff01;是這樣嗎&#xff1f;在展開討論前&#xff0c;我們先來看看什么是API服務…

會話固定攻擊

會話固定攻擊&#xff08;Session Fixation Attack&#xff09;是一種網絡攻擊&#xff0c;攻擊者試圖誘騙受害者使用攻擊者指定的會話ID&#xff0c;以便在受害者登錄后&#xff0c;攻擊者能夠竊取受害者的會話并冒充受害者進行操作。下面是一個形象的例子來解釋會話固定攻擊&…

8080端口映射外網不成功的原因

最近因為需要將群暉nas的8080端口映射到外網&#xff0c;但是路由器已經成功設置&#xff0c;群暉nas上對應端口的服務也已經部署好&#xff0c;可是如論如何也從外網訪問不到群暉服務器上&#xff0c;但是同樣是5000端口&#xff0c;群暉的外網管理端口就可以&#xff0c;最后…

在linux x86服務器安裝jdk

安裝JDK&#xff08;Java Development Kit&#xff09;在Linux x86 服務器上可以按照以下步驟進行操作。以下步驟假設你有root權限或者sudo權限。 1. 下載JDK安裝包 首先&#xff0c;你需要從Oracle官網或者OpenJDK官網下載JDK的安裝包。可以選擇對應的版本&#xff0c;比如J…