91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

css為什么需要模塊化

發布時間:2021-10-25 17:03:56 來源:億速云 閱讀:138 作者:iii 欄目:web開發

這篇文章主要講解了“css為什么需要模塊化”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“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';

<h2 class={styles.title}>
  Hello World
</h2>


// 編譯后的 styles.css
.title_3zyde {
  color: red;
}

// 編譯后的 demo.html
<h2 class="title_3zyde">
  Hello World
</h2>

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
<h2 className={[styles.title,styles.bold].join(" ")}>
  Hello World
</h2>

// stringTemp-react.jsx
<h2 className={`${styles.title} ${styles.bold}`}>
  Hello World
</h2>

如果只寫一個 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為什么需要模塊化”的內容了,經過本文的學習后,相信大家對css為什么需要模塊化這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

css
AI

鄂托克前旗| 望谟县| 尉氏县| 济南市| 武威市| 苗栗县| 老河口市| 罗田县| 新乐市| 岑溪市| 南城县| 介休市| 东明县| 呼图壁县| 社旗县| 平罗县| 三河市| 余江县| 揭东县| 朔州市| 新乡县| 闵行区| 呼玛县| 宝应县| 青田县| 拜泉县| 稻城县| 田东县| 塔河县| 旬邑县| 鹤山市| 和龙市| 棋牌| 丹江口市| 手机| 郴州市| 潜江市| 廊坊市| 新建县| 类乌齐县| 襄城县|