日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

css-modules 简介

發布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 css-modules 简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

github·原文

CSS Modules 內部通過?ICSS?來解決樣式導入和導出這兩個問題。分別對應?:import?和?:export?兩個新增的偽類。

:import("path/to/dep.css") {localAlias: keyFromDep;/* ... */ } :export {exportedKey: exportedValue;/* ... */ }

webpack 配置

結合 Webpack 的?css-loader?后,就可以在 CSS 中定義樣式,在 JS 中導入。加上?modules?即為啟用,localIdentName?是設置生成樣式的命名規則。

// webpack.config.js css?modules&localIdentName=[name]__[local]-[hash:base64:5]

示例

css 樣式

/* components/Button.css */ .normal { /* normal 相關的所有樣式 */ } .disabled { /* disabled 相關的所有樣式 */ }

js 編寫

/* components/Button.js */ import styles from './Button.css';console.log(styles);buttonElem.outerHTML = `<button class=${styles.normal}>Submit</button>`

生成的 html

<button class="button--normal-abc53">Submit</button>

注意到?button--normal-abc53?是 CSS Modules 按照?localIdentName?自動生成的 class 名。其中的?abc53?是按照給定算法生成的序列碼。經過這樣混淆處理后,class 名基本就是唯一的,大大降低了項目中樣式覆蓋的幾率。同時在生產環境下修改規則,生成更短的 class 名,可以提高 CSS 的壓縮率。

通過這些簡單的處理,CSS Modules 實現了以下幾點:

  • 所有樣式都是 local 的,解決了命名沖突和全局污染問題
  • class 名生成規則配置靈活,可以此來壓縮 class 名
  • 只需引用組件的 JS 就能搞定組件所有的 JS 和 CSS
  • 依然是 CSS,幾乎 0 學習成本

樣式默認局部

使用了 CSS Modules 后,就相當于給每個 class 名外加加了一個?:local,以此來實現樣式的局部化,如果你想切換到全局模式,使用對應的?:global。

.normal {color: green; }/* 以上與下面等價 */ :local(.normal) {color: green; }/* 定義全局樣式 */ :global(.btn) {color: red; }/* 定義多個全局樣式 */ :global {.link {color: green;}.box {color: yellow;} }

樣式復用

可以使用 css-module自帶的?composes 來組合樣式

/* settings.css */ .primary-color {color: #f40; }/* components/Button.css */ .base { /* 所有通用的樣式 */ }.primary {composes: base;composes: primary-color from './settings.css';/* primary 其它樣式 */ }

class 命名技巧

CSS Modules 的命名規范是從 BEM 擴展而來。BEM 把樣式名分為 3 個級別,分別是:

  • Block:對應模塊名,如 Dialog
  • Element:對應模塊中的節點名 Confirm Button
  • Modifier:對應節點相關的狀態,如 disabled、highlight

綜上,BEM 最終得到的 class 名為?dialog__confirm-button--highlight。使用雙符號?__?和?--?是為了和區塊內單詞間的分隔符區分開來。

CSS Modules 中 CSS 文件名恰好對應 Block 名,只需要再考慮 Element 和 Modifier。BEM 對應到 CSS Modules 的做法是:

/* .dialog.css */ .ConfirmButton--disabled { }

你也可以不遵循完整的命名規范,使用 camelCase 的寫法把 Block 和 Modifier 放到一起:

/* .dialog.css */ .disabledConfirmButton { }

原則規范

CSS Modules 是對現有的 CSS 做減法。為了追求簡單可控,作者建議遵循如下原則:

  • 不使用選擇器,只使用 class 名來定義樣式
  • 不層疊多個 class,只使用一個 class 把所有樣式定義好
  • 所有樣式通過?composes?組合來實現復用
  • 不嵌套

?

轉載于:https://my.oschina.net/lemos/blog/1537216

總結

以上是生活随笔為你收集整理的css-modules 简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av噜噜在线 | 国产亚洲精品久久久久久打不开 | 黄频在线看 | 精品自拍第一页 | 三上悠亚亚洲一区 | 日本三级黄色录像 | 古典武侠av | 国偷自产av一区二区三区麻豆 | 日韩激情精品 | 色在线综合 | 日韩欧美中文一区 | 午夜一区二区三区在线观看 | 青青草原国产 | 毛片动态图 | 特级丰满少妇一级aaa爱毛片 | 久草免费在线视频 | 国产欧美久久一区二区三区 | 精品日韩一区 | 好吊一二三区 | 免费av大全 | av一二三 | 19禁大尺度做爰无遮挡电影 | 激情视频网站 | 光棍福利视频 | 91区国产 | 四虎av| 日韩国产精品久久 | 精品伦精品一区二区三区视频 | 国产日韩在线播放 | 毛片毛片毛片毛片毛片毛片 | 致命弯道8在线观看免费高清完整 | 国产麻豆精品视频 | 日韩国产精品久久 | 久久国产a | 国产麻豆剧传媒精品国产 | 一卡二卡三卡在线视频 | www.啪啪.com| 精品人伦一区二区 | 欧美体内谢she精2性欧美 | 激情第四色 | 高潮网 | 亚洲成a人v欧美综合天堂麻豆 | 久成人| 337p粉嫩色噜噜噜大肥臀 | 日日夜夜爱爱 | 亚洲人高潮女人毛茸茸 | 91小宝寻花一区二区三区 | 日本成人免费在线视频 | 强制憋尿play黄文尿奴 | 美女黄色真播 | 麻豆久久久久久久久久 | 欧美日本韩国一区 | 含羞草一区二区三区 | 精品久久久在线观看 | 日韩精品在线观看视频 | 小辣椒福利视频导航 | 嫩草午夜少妇在线影视 | 亚欧美日韩 | 欧美日韩字幕 | 欧美人与性禽动交精品 | av福利在线看 | 国产日韩片 | 国产精品有码 | 日本黄视频网站 | 无码精品一区二区三区在线 | 最新黄网| 成年网站在线播放 | 久久日视频 | videos亚洲| 国产主播啪啪 | 亚洲精品久久久久久无码色欲四季 | 超碰777| 五月网 | 欧美国产在线观看 | 国产高清在线观看 | 福利一区二区在线 | 国产福利一区二区 | 久久综合精品国产二区无码不卡 | 尤物精品在线观看 | 高跟鞋调教—视频|vk | 国产精品伦一区二区三级视频 | 国产成人福利视频 | 两口子交换真实刺激高潮 | 国产精品理论片在线观看 | av直接看| 欧美天堂久久 | 日本免费视频 | 亚洲免费三级 | 高潮毛片无遮挡免费看 | 操女网站| a激情 | 成人av免费在线 | 在线视频欧美日韩 | 久久久精品免费看 | 成人av电影免费观看 | 国产日产久久高清欧美一区 | 久草免费在线观看 | 少妇太爽了在线观看 | 夜夜骑天天干 |