久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

聊聊css為什么需要模塊化?怎么進行模塊化?

css “局部”樣式

sass、less 通過 @import ,部分解決的 css 模塊化的問題。

由于 css 是全局的,在被引入的文件和當前文件出現重名的情況下,前者樣式就會被后者覆蓋。
在引入一些公用組件,或者多人協作開發同一頁面的時候,就需要考慮樣式會不會被覆蓋,這很麻煩。

// file A .name {     color: red }  // file B @import "A.scss"; .name {     color: green }

css 全局樣式的特點,導致 css 難以維護,所以需要一種 css “局部”樣式的解決方案。
也就是徹底的 css 模塊化,@import 進來的 css 模塊,需要隱藏自己的內部作用域。

CSS Modules 原理

通過在每個 class 名后帶一個獨一無二 hash 值,這樣就不有存在全局命名沖突的問題了。這樣就相當于偽造了“局部”樣式。

// 原始樣式 styles.css .title {   color: red; }  // 原始模板 demo.html import styles from 'styles.css';  <h1 class={styles.title}>   Hello World </h1>   // 編譯后的 styles.css .title_3zyde {   color: red; }  // 編譯后的 demo.html <h1 class="title_3zyde">   Hello World </h1>

webpack 與 CSS Modules

webpack 自帶的 css-loader 組件,自帶了 CSS Modules,通過簡單的配置即可使用。

{     test: /.css$/,     loader: "css?modules&localIdentName=[name]__[local]--[hash:base64:5]" }

命名規范是從 BEM 擴展而來。

  • Block: 對應模塊名 [name]

  • Element: 對應節點名 [local]

  • Modifier: 對應節點狀態 [hash:base64:5]

使用 __ 和 — 是為了區塊內單詞的分割節點區分開來。
最終 class 名為 styles__title--3zyde

在生產環境中使用

在實際生產中,結合 sass 使用會更加便利。以下是結合 sass 使用的 webpack 的配置文件。

{     test: /.scss$/,     loader: "style!css?modules&importLoaders=1&localIdentName=[name]__[local]--[hash:base64:5]!sass?sourceMap=true&sourceMapContents=true" }

通常除了局部樣式,還需要全局樣式,比如 base.css 等基礎文件。
將公用樣式文件和組件樣式文件分別放入到兩個不同的目標下。如下。

. ├── app                       │   ├── styles               # 公用樣式 │   │     ├── app.scss        │   │     └── base.scss       │   │ │   └── components           # 組件           ├── Component.jsx  # 組件模板           └── Component.scss # 組件樣式

然后通過 webpack 配置,將在 app/styles 文件夾的外的(exclude) scss 文件"局部"化。

{     test: /.scss$/,     exclude: path.resolve(__dirname, 'app/styles'),     loader: "style!css?modules&importLoaders=1&localIdentName=[name]__[local]--[hash:base64:5]!sass?sourceMap=true&sourceMapContents=true" }, {     test: /.scss$/,     include: path.resolve(__dirname, 'app/styles'),     loader: "style!css?sass?sourceMap=true&sourceMapContents=true" }

有時候,一個元素有多個 class 名,可以通過 join(" ") 或字符串模版的方式來給元素添加多個 class 名。

// join-react.jsx <h1 className={[styles.title,styles.bold].join(" ")}>   Hello World </h1>  // stringTemp-react.jsx <h1 className={`${styles.title} ${styles.bold}`}>   Hello World </h1>

如果只寫一個 class 就能把樣式定義好,那么最好把所有樣式寫在一個 class 中。
所以,如果我們使用了多個 class 定義樣式,通常會帶一些一些邏輯判斷。這個時候寫起來就會麻煩不少。

引入 classnames ,即可以解決給元素寫多個 class 名的問題,也可以解決寫邏輯判斷的麻煩問題。

classNames('foo', 'bar'); // => 'foo bar' classNames('foo', { bar: true }); // => 'foo bar' classNames({ 'foo-bar': true }); // => 'foo-bar' classNames({ 'foo-bar': false }); // => '' classNames({ foo: true }, { bar: true }); // => 'foo bar' classNames({ foo: true, bar: true }); // => 'foo bar'  // lots of arguments of various types classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'  // other falsy values are just ignored classNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'

引入 CSS Modules 的樣式模塊,每個 class 每次都要寫 styles.xxx 也是很麻煩,在《深入React技術棧》提到了 react-css-modules 的庫,來減少代碼的書寫,感興趣的同學可以研究下。

推薦學習:《css視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
日韩av字幕| 色偷偷偷在线视频播放| 精品一区二区三区免费看| 中文字幕日本一区| 亚洲精品免费观看| 蜜臀va亚洲va欧美va天堂 | 女人天堂亚洲aⅴ在线观看| 日韩精品一区二区三区中文字幕| 国产精品videossex久久发布 | 久久不见久久见国语| 亚洲91在线| 久久国内精品自在自线400部| 久久久久国产精品一区三寸| 日韩在线中文| 99精品综合| 久久国产尿小便嘘嘘| 午夜一级在线看亚洲| 亚洲专区视频| 国产欧美日韩综合一区在线播放| av亚洲在线观看| 久久av日韩| 国产精品成人国产| 精品久久网站| 久久九九99| 日韩精品一区第一页| 亚洲精品影视| 国产在线欧美| 亚洲精品一二三区区别| 亚洲一区观看| 欧美一级一区| 国产精品日本一区二区不卡视频| 欧美日韩精品一本二本三本 | 国产欧美另类| 久久国产三级| 成人福利视频| 樱桃成人精品视频在线播放| 亚洲精品影视| 99国产精品99久久久久久粉嫩| 激情久久99| 国产麻豆久久| 麻豆一区二区在线| 日产精品一区| 蜜桃视频在线观看一区| 午夜精品婷婷| 亚洲精品自拍| 精品亚洲精品| 国产午夜久久| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 在线看片日韩| 亚洲精品美女| 日韩一区自拍| 亚洲欧美日本国产专区一区| 一本大道色婷婷在线| 欧美+日本+国产+在线a∨观看| 美女av在线免费看| 91久久久精品国产| 国产日产精品_国产精品毛片| 亚洲一二av| 国产乱人伦精品一区| 99久久激情| 都市激情国产精品| 中文一区二区| 精品理论电影在线| 丝袜国产日韩另类美女| 国产精品啊啊啊| 亚洲综合五月| 97精品97| 亚洲一区二区三区久久久| 国产精品一二| 免费欧美一区| 国产精品久久久久久久免费软件| 日本麻豆一区二区三区视频| 97精品国产| 91精品啪在线观看国产爱臀| 婷婷六月综合| 狠狠久久伊人中文字幕| 亚洲综合婷婷| 在线人成日本视频| 亚洲女人av| 精品国产免费人成网站| 中文字幕亚洲精品乱码| 日韩一区欧美二区| 国产成人调教视频在线观看| 久久国产99| 免费高潮视频95在线观看网站| 日韩国产综合| 日韩精品中文字幕一区二区| 久久国产免费| 国产精品18| 亚洲精品影视| 免费成人网www| 黑人精品一区| 国产精区一区二区| 国产精品99久久精品| 日本不良网站在线观看| 麻豆中文一区二区| 在线免费观看亚洲| 日韩免费精品| 久久精品亚洲| 91成人在线精品视频| 国产精品普通话对白| 欧洲av不卡| 好吊日精品视频| 亚洲二区视频| 国产欧美日韩一区二区三区四区 | 欧美亚洲国产激情| 日韩精品久久久久久| 中文在线免费视频| 日韩av中文字幕一区| 亚洲成人va| 国产精品任我爽爆在线播放| 国产亚洲激情| 欧美综合另类| 久久久久久美女精品| 欧美天堂视频| 国产精品毛片在线| 精品国模一区二区三区| 98精品久久久久久久| 97精品国产一区二区三区| 久久一区欧美| 国内一区二区三区| 国产亚洲精品精品国产亚洲综合| 日韩在线视频精品| 精品国产三区在线| 精品免费av一区二区三区| 麻豆国产欧美一区二区三区| 国产亚洲久久| 久久国产电影| 日韩精品亚洲专区在线观看| 在线综合欧美| 日韩精品一二三| 在线成人直播| 老司机精品在线| 免费观看亚洲天堂| 91免费精品| 日韩在线第七页| 日韩欧美精品综合| 久久影院午夜精品| 日本精品影院| 日韩欧美午夜| 日韩中文首页| 不卡一区综合视频| 午夜亚洲精品| 日韩一区二区三区精品| 69堂精品视频在线播放| 欧美日韩国产高清电影| 91精品在线观看国产| 婷婷亚洲五月色综合| 首页国产欧美久久| 久久国产日韩欧美精品| 国产精品久久久久久久久久齐齐| 亚洲激情不卡| 国产视频一区免费看| 亚洲精品裸体| 国产精品一区高清| 久久不射中文字幕| 亚洲丝袜啪啪| 国产亚洲第一伦理第一区| 麻豆国产欧美一区二区三区 | 久久天堂av| 婷婷中文字幕一区| aa亚洲婷婷| 日韩av不卡一区二区| 国产一区二区精品福利地址| 久久国际精品| 久久精品毛片| 精品一区毛片| 97久久超碰| 欧美男人天堂| 男人的天堂久久精品| 欧美精品中文| 国产精品13p| 亚洲综合国产| 久久只有精品| 亚洲一区激情| 国产精品欧美一区二区三区不卡| 人人精品人人爱| 国产精品亚洲产品| 久久激情网站| 日韩不卡一二三区| 欧美gv在线| 日韩国产在线观看| 日韩av一级| 久久国产生活片100| 播放一区二区| 91精品美女| 不卡在线一区二区| 麻豆成人91精品二区三区| 怡红院精品视频在线观看极品| 日韩精品首页| 亚洲专区视频| 精品深夜福利视频| 亚洲精品va| 久久精品国产99国产| 中文无码日韩欧| 欧美xxxx中国| 午夜精品成人av| 日韩欧美高清一区二区三区| 欧美日韩视频网站| 国产亚洲高清一区|