摘要:支持不同的構(gòu)建工具,這里我使用的是下文都是以為例。全局作用域允許用的語(yǔ)法聲明一個(gè)全局的作用域。使用普通的寫(xiě)法,就會(huì)引用全局的的樣式我是結(jié)果的顯示黑色。的組合在里,一個(gè)選擇器可以繼承另一個(gè)選擇器。
這篇文章來(lái)一起了解 css 模塊化的用法和原理 ,dome 地址:css modules ?
詳情,可訪(fǎng)問(wèn)我的博客 lishaoy.net
局部作用域一般我們引入頁(yè)面的 CSS 的作用域都是全局的,都是對(duì)這個(gè)頁(yè)面起作用,產(chǎn)生局部的作用域,就是使用一個(gè)獨(dú)一無(wú)二的 class 的名稱(chēng),不會(huì)和其它選擇器重名的, CSS Modules 就是這個(gè)原理。下面我們看一段代碼
import $ from "jquery"; import styles from "./main.css"; import test from "./test.html"; $("body").append($("")); $("div h1").addClass(styles.testGreen); $("body").append(test).find("h2").addClass(styles.testBlue);我會(huì)變綠
上面的代碼我把 main.css 輸入到 style 對(duì)象,然后下面用了 styles.testGreen 對(duì)象的屬性形式調(diào)用,就會(huì)應(yīng)用 main.css 里的樣式
.testGreen { color: green; }
構(gòu)建工具( webpack )編譯成一個(gè)哈希字符串
我會(huì)變綠
main.css 也會(huì)同時(shí)編譯
._305zeUSoiGREv3GqPa9H8F { color: #aaf200; }
這樣一來(lái),這個(gè)類(lèi)名就是獨(dú)一無(wú)二的了,只對(duì)應(yīng)用的組件有效。
CSS Modules 支持不同的構(gòu)建工具,這里我使用的是 webpack ,下文都是以 webpack 為例。
下面我們來(lái)看下 webpack.config.js
module.exports = { context: __dirname + "/src", devtool: "eval-source-map", //配置生成Source Maps,選擇合適的選項(xiàng) entry: { app: ["./app.js", "./test.js"], }, output: { path: __dirname + "/dist", filename: "bundle.js", publicPath: "/assets", }, module: { loaders: [ {test: /.json$/,loader: "json-loader"}, {test: /.js$/,exclude: /node_modules/,loader: "babel-loader"}, {test: /.css$/,loader: ExtractTextPlugin.extract({ fallbackLoader: "style-loader", loader: { loader: "css-loader", query: { modules: true } } }) }, {test: /.html$/,loader: "html-loader"}, ] }, plugins: [ new ExtractTextPlugin("style.css") ] };
上面的代碼可以看到,query:{modules:true} 代表開(kāi)啟 CSS Modules 模塊,這里還配置了把所以得 css 合并一個(gè)文件,具體的可以了解 webpack 的 extract-text-webpack-plugin插件。
全局作用域CSS Modules 允許用 :global(.className) 的語(yǔ)法聲明一個(gè)全局的作用域。加了 :global 的不會(huì)被編譯成哈希值。
:global(.title) { color: black; } .title { color: red; }
test.js 使用普通的寫(xiě)法,就會(huì)引用全局的 .title 的樣式
import $ from "jquery"; import styles from "./main.css"; import test from "./test.html"; $("body").append($("")); $("div h1").addClass("title");我是title
結(jié)果 h1 的title顯示黑色。
Class的組合在 CSS Modules 里,一個(gè)選擇器可以繼承另一個(gè)選擇器。
在 mian.css 里,我讓 .testBlue 繼承 .testBg 類(lèi)
.testBg { background-color: red; } .testBlue { color: blue; composes: testBg; }
不用修改 test.js ,應(yīng)用了 .testBlue 就會(huì)有一個(gè)紅色的背景。
編譯結(jié)果:
.eh33VC37uFHXkCZ8LfKYd { background-color: #ff0000; } .xrmZso54fTBX29J9G65Ai { color: #0c77f8; }
相應(yīng)的 html 代碼:
輸入變量我會(huì)變藍(lán)
CSS Modules 支持使用變量,不過(guò)要安裝 PsotCSS 和 postcss-modules-values。
$ npm install --save postcss-loader postcss-modules-values
把 postcss-loader 加入 webpack.config.js .
{ test: /.css$/, loader: "style-loader!css-loader?modules!postcss-loader" },
然后我在 colors.css 里定義了一些變量。
@value blue: #0c77f8; @value red: #ff0000; @value green: #aaf200;
在 main.css 里可以這樣引用變量
@value colors: "./color.css"; @value blue, red, green from colors; .title { color: red; } .testBg { background-color: red; } .testGreen { color: green; } .testBlue { color: blue; composes: testBg; composes: div; }
這樣就可以把 colors.css 的變量拿過(guò)來(lái)用了,是不是很神奇。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/115971.html
摘要:隨著工程中代碼量的增加,一套有效的管理規(guī)范也是必須和必要的。鑒于以上兩種問(wèn)題,放棄使用,如同行有好的解決方案歡迎留言。現(xiàn)在我們工程中的做法,每個(gè)組件一個(gè)組件名稱(chēng)功能日期,然后使用的天然嵌套方式在此類(lèi)下進(jìn)行書(shū)寫(xiě)。 在實(shí)際開(kāi)發(fā)中,大部分人的精力都在js上,而css的管理總覺(jué)得不是那么重要。隨著工程中代碼量的增加,一套有效的css管理規(guī)范也是必須和必要的。最近一直想出一個(gè)工程中的css的命名...
摘要:近日在工作中由于疏忽問(wèn)題導(dǎo)致某個(gè)客戶(hù)的系統(tǒng)直接崩盤(pán),極大的影響了用戶(hù)使用產(chǎn)品的體驗(yàn)。在經(jīng)過(guò)修改之后,不得不思考下在日常開(kāi)發(fā)中的一些壞習(xí)慣以及如何規(guī)避這些日常問(wèn)題了。同時(shí)由于我們未能對(duì)錯(cuò)誤進(jìn)行好的處理,導(dǎo)致程序直接卡死。 近日在工作中由于疏忽問(wèn)題導(dǎo)致某個(gè)客戶(hù)的系統(tǒng)直接崩盤(pán),極大的影響了用戶(hù)使用產(chǎn)品的體驗(yàn)。在經(jīng)過(guò)修改之后,不得不思考下在日常開(kāi)發(fā)中的一些壞習(xí)慣以及如何規(guī)避這些日常問(wèn)題了。 在...
摘要:前言以前一直是用進(jìn)行的開(kāi)發(fā)于是決定年后弄一弄所以年后這段時(shí)間也就一直瞎弄可算是看到成果了本來(lái)是想寫(xiě)一個(gè)類(lèi)似仿今日頭條那樣的項(xiàng)目來(lái)入手后來(lái)又尋思還不如寫(xiě)個(gè)后臺(tái)管理呢。于是乎自己便著手簡(jiǎn)單的搭建了一個(gè)集中設(shè)置的版本。 前言 以前一直是用vue進(jìn)行的開(kāi)發(fā), 于是決定年后弄一弄react, 所以年后這段時(shí)間也就一直瞎弄react, 可算是看到成果了 本來(lái)是想寫(xiě)一個(gè) 類(lèi)似 Vue仿今日頭條 那樣...
摘要:起初只是一個(gè)美化文檔的工具,但是事情到年發(fā)生了變化。對(duì)于來(lái)說(shuō),這意味著有問(wèn)題的布局。和朝夕相伴的有和最終確定的。他們通過(guò)增加前綴的辦法,解決了命名沖突的問(wèn)題。長(zhǎng)長(zhǎng)的前綴將成為歷史,歡迎來(lái)到未來(lái)的世界。 譯者注(GeoffZhu): 這篇適合一些使用過(guò)預(yù)處理CSS的開(kāi)發(fā)者,比如less,sass或stylus,如果你都沒(méi)用過(guò),那你一定不是個(gè)好司機(jī)。在PostCSS中早就可以使用CSS M...
摘要:我們專(zhuān)注移動(dòng)體育領(lǐng)域的應(yīng)用開(kāi)發(fā),倡導(dǎo)開(kāi)放共享的精神,不模仿,不跟風(fēng),只做酷的產(chǎn)品。這就是正在做的事情,我們希望通過(guò)科技驅(qū)動(dòng),讓更多的人熱愛(ài)健身,喜歡運(yùn)動(dòng)。 序 因?yàn)樽约翰淮笙矚g喜歡用手機(jī),所以當(dāng)在手機(jī)上看到有些應(yīng)用只能在手機(jī)上使用時(shí)覺(jué)得好別扭,但我本身也不是寫(xiě)移動(dòng)App的,只是會(huì)寫(xiě)點(diǎn) js,都說(shuō)js啥都能干,那我就用它干! 關(guān)于 Keep Keep 是一個(gè)熱愛(ài)運(yùn)動(dòng)的年輕團(tuán)隊(duì),同時(shí)也是一...
閱讀 1758·2021-11-24 10:18
閱讀 2277·2021-11-18 13:20
閱讀 2366·2021-08-23 09:46
閱讀 1022·2019-08-30 15:56
閱讀 2865·2019-08-30 15:53
閱讀 777·2019-08-30 14:22
閱讀 492·2019-08-29 15:34
閱讀 2561·2019-08-29 12:14