成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

什么是CSS Modules ?我們?yōu)槭裁葱枰麄?

dongfangyiyu / 2768人閱讀

摘要:我們將去探索它的目的和主旨。這到底是什么呢我們?yōu)槭裁匆@么做呢我們很快就進(jìn)行介紹。我們不需要人為處理和文件。我們不寫純,我們需要在一個類似這樣的文件中取寫我們所有的標(biāo)簽。這就是樣式也有作用域的原因。換句話說消除了特殊性問題。

原文地址:https://css-tricks.com/css-mo...
最近我對CSS Modules比較好奇。如果你曾經(jīng)聽說過他們,那么這篇博客正適合你。我們將去探索它的目的和主旨。如果你同樣很好奇,敬請關(guān)注,在下一篇博文中我們將介紹如何使用CSS Modules。如果你想親自嘗試并且掌握如何使用,第三部分將會很適合你,這一部分剖析了如何在React環(huán)境中使用。

什么是CSS Modules?

根據(jù)官方的repository介紹,CSS Modules是:

所有的class的名稱和動畫的名稱默認(rèn)屬于本地作用域的CSS文件。
所以CSS Modules不是一個官方的規(guī)范,也不是瀏覽器的一種機(jī)制,它是一種構(gòu)建步驟中的一個進(jìn)程。(構(gòu)建通常需要webpack或者browserify的幫助)。通過構(gòu)建工具的幫助,可以將class的名字或者選擇器的名字作用域化。(類似命名空間化。)

這到底是什么呢?我們?yōu)槭裁匆@么做呢?我們很快就進(jìn)行介紹。首先,不要忘記HTML和CSS的工作原理。在HTML中一個類添加:

An example heading

在CSS中這個class的定義如下:

.title {
    background-color: red;
}

只要CSS被添加到HTML文檔上,那個

的背景色就是紅色。我們不需要人為處理CSS和HTML文件。瀏覽器本身自己就理解這些文件的格式。

CSS Modules 和上面的方法不一樣。我們不寫純HTML,我們需要在一個類似index.js這樣的Javascript 文件中取寫我們所有的標(biāo)簽。這里有一個例子來說明這是怎么回事(我們之后將會去看更多真實(shí)的實(shí)例):

import styles from "./styles.css";

element.innerHTML = 
    `

An example heading

`;

在我們構(gòu)建的步驟中,編譯器將會搜索我們導(dǎo)入的styles.css文件,然后到我們剛剛寫的js文件中,通過styles.title使得.title class可用。我們的構(gòu)建步驟將會同時處理這些東西成為新的,分離的HTML和CSS文件,并且用一個新的字符串去替換HTML和CSS選擇器的class。

通過構(gòu)建工具生成的HTML也許像下面這樣:

An example heading

通過構(gòu)建工具生成的CSS也許像下面這樣:

._styles__title_309571057{
    background-color: red;
}


class屬性和.title選擇器已經(jīng)完全不見了,取而代之的是這個全新的字符串;我們的源CSS文件也沒有為瀏覽器提供服務(wù)。
就像Hugo Griaudel在他的這一模塊的教程中所說:

[the classes]是動態(tài)生成的,唯一的,而且和當(dāng)前的樣式有映射關(guān)系的。

這就是樣式也有作用域的原因。它們的作用域是特定的模板。如果我們有一個buttons.css文件我們將在buttons.js模板中導(dǎo)入它,并且在css文件內(nèi)的.btn class相對于其他模板(例如forms.js)也是不可用的,除非我們在這個文件中同樣導(dǎo)入了進(jìn)來。

為什么我們想要把CSS和HTML搞成這樣?我們這樣做的真真正正的原因是什么?

為什么我們要用CSS Modules?

有了CSS Modules,就可以確保所有的樣式能夠服務(wù)于單個組件:

集中在一個地方

只應(yīng)用于那個組件,其他組件不適用

除此之外,任何組件都能擁有真正的依賴,就像下面這樣:

import buttons from "./buttons.css";
import padding from "./padding.css";

element.innerHTML = `
`;

這樣設(shè)計的目的在于解決CSS中的全局作用域問題。

你曾有過為了提升效率,節(jié)省時間去簡略的寫css嗎?而且是在完全不考慮你會不會影響其他代碼的情況下?

你曾有過在樣式表的底部隨機(jī)打了一些的比特和垃圾,然后嘗試回過頭來重新去組織但是從來沒這么做嗎?

你曾有過看到樣式卻不完全知道它的意義的時候嗎?即使它們被用在了當(dāng)前的標(biāo)簽上?

你曾有過思考如何去不破壞任何東西的情況下,去棄用一些現(xiàn)有的樣式嗎?考慮過這些樣式是僅僅作用于自己還是依賴其它樣式呢?或者是在哪里重新覆蓋了樣式了?

這些問題會讓人很頭痛,項目時間緊張,而你的心思又在窗外的花花世界。

但是當(dāng)你有了CSS Modules之后,關(guān)鍵是這種默認(rèn)本地作用域的概念,這個問題將會被避免。你必須去思考寫樣式的方便性。

例如,如果你在不應(yīng)用CSS module-style class去做轉(zhuǎn)換的情況下,在HTML中使用random-gross-class,這個樣式將不會被應(yīng)用,因?yàn)檫@個選擇器將會被轉(zhuǎn)換為._style_random-gross-class_0038089.

composes 關(guān)鍵詞

我們現(xiàn)在擁有一個叫做type.css的模塊去渲染text樣式。在那個文件中,我們也許會有如下代碼:

.serif-font {
    font-family: Georgia,serif;
}
.display {
   composes: serif-font;
    font-size: 30px;
    line-height: 35px;
}

我們將在我們的模板中聲明class:

import type from "./type.css";
element.innerHTML = 
`
    

This is a heading

; `

編譯后的模板上的標(biāo)簽會是下面這樣:

Heading title

使用composes關(guān)鍵詞匯將2個class都綁定到元素上,從而避免了類似解決方案的一些問題,類似Sass中的@extend。

我們甚至可以在一個分離的CSS文件中去compose。

.element{
    compose: dark-red from "./colors.css";
    font-size: 30px;
    line-height: 1.2;
}
不需要BEM

在構(gòu)建CSS module的過程中,不需要BEM。有2個原因:

易解析- 類似type.display這樣的代碼,對于開發(fā)者來說就像BEM-y的.font-size__serif--large。當(dāng)BEM選擇器變長時,可能更容易被理解。

本地作用域- 比如我們在模塊中有一個類似.big去修改font-size屬性的class。同樣我們可能還會用.big去同時增大padding和font-size。這沒關(guān)系!他們不會沖突,因?yàn)樽饔糜蛑械臉邮绞怯懈髯砸饬x的。甚至一個module引入2個樣式表,然后它有通常的名字我們的構(gòu)建工具會為那個class加上前綴作區(qū)分。換句話說:CSS modules消除了特殊性問題。

很酷,難道不是嗎?

這些僅僅是CSS Modules的部分優(yōu)點(diǎn)。

如果你想學(xué)習(xí)更多,Glen Madden寫了更多的這樣做的好處。

這個系列的下一篇文章將會去探索如何在項目中使用Webpack和CSS Modules。我們將使用最新的ES2015的特性去實(shí)現(xiàn),也會給出一些代碼例子去引導(dǎo)大家去理解。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/113193.html

相關(guān)文章

  • PostCSS真的太好用了!

    摘要:下面的代碼違反規(guī)則下面的代碼符合規(guī)則禁止使用十六進(jìn)制顏色十六進(jìn)制的顏色違反規(guī)則無效的十六進(jìn)制色同樣違規(guī)下面的是符合規(guī)則的自動將十六進(jìn)制色轉(zhuǎn)換為大寫或者小寫可以使用實(shí)現(xiàn)同樣的功能。 showImg(https://segmentfault.com/img/remote/1460000014782565); 在PostCSS官網(wǎng)有著這樣的對PostCSS特性介紹,箭頭后面是對應(yīng)功能的插件及...

    SKYZACK 評論0 收藏0
  • CSS更完美: PostCSS-modules

    摘要:起初只是一個美化文檔的工具,但是事情到年發(fā)生了變化。對于來說,這意味著有問題的布局。和朝夕相伴的有和最終確定的。他們通過增加前綴的辦法,解決了命名沖突的問題。長長的前綴將成為歷史,歡迎來到未來的世界。 譯者注(GeoffZhu): 這篇適合一些使用過預(yù)處理CSS的開發(fā)者,比如less,sass或stylus,如果你都沒用過,那你一定不是個好司機(jī)。在PostCSS中早就可以使用CSS M...

    Barry_Ng 評論0 收藏0
  • 對React應(yīng)用的一些思考

    摘要:但還存在一些問題,比如,單向數(shù)據(jù)流導(dǎo)致的有時數(shù)據(jù)鏈過長過繁瑣所以才產(chǎn)生了,需要在多地保存同一份數(shù)據(jù)等等。數(shù)據(jù)流細(xì)粒度的目前來說,我們的的甚至是還是設(shè)計得太過簡單。 前言 ??由于筆者對React的了解不深,即便算是學(xué)習(xí)React的時間,到目前也才剛剛半年,所以錯誤不足之處還望指正。以下都是基于React 15(可能有些是16),webpack1進(jìn)行探討(注:未學(xué)習(xí)過Vue,Ng,Emb...

    ?。琛?/span> 評論0 收藏0
  • JS每日一題:Webpack有哪些常見的Loader?他們解決什么問題的?

    摘要:期有哪些常見的他們是解決什么問題的在回答之前我們先來了解一下我們在上一節(jié)講過,是屬于模塊化方案,他能讓任意類型的文件都能運(yùn)行在瀏覽器中,怎么做到呢這時就有了定義用于對模塊的源代碼進(jìn)行轉(zhuǎn)換。 20190326期 Webpack有哪些常見的Loader?他們是解決什么問題的? 在回答之前我們先來了解一下Loader 我們在上一節(jié)講過,webpack是屬于模塊化方案,他能讓任意類型的文件都能...

    Hanks10100 評論0 收藏0
  • 從sass到PostCSS

    摘要:下面是頭部的樣式示例這是一個用例我在之前了解過自定義屬性的用法。這里有一個正在進(jìn)行中的規(guī)則的規(guī)范與之相關(guān)。允許儲存一系列的屬性并且在選擇器引用。 原文鏈接:https://tylergaw.com/articles...譯者:Icarus郵箱:[email protected] 多年來我一直使用Sass.但是最近我想要使用PostCSS和它的cssnext插件來嘗試處理樣式.我愛死了現(xiàn)...

    Backache 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<