在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 網頁設計教程 > 詳細頁面

什么是css模塊化?css模塊化的完成方法

什么是css模塊化?css模塊化的完成方法

更新時間:2025-11-23 文章作者:未知 信息來源:網絡 閱讀次數:

網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立...
網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。
本篇文章給大家帶來的內容是關于什么是css模塊化?css模塊化的實現方法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

CSS 模塊化

CSS(Cascading Style Sheets),從誕生之初就決定了它無法編程,甚至連解釋性語言都算不上,只能作為一種簡單的層疊樣式表,對 HTML 元素進行格式化。

但隨著前端的發展,前端項目已經變得越來越龐大和復雜,社區也一直在探索如何以一種有效的方式去管理前端的代碼(js/css/html)和資源(images, fonts, ...)。

在這個過程中,社區探索出了 js 的模塊化(amd, commonjs, es6),現在用 js 開發大工程已經游刃有余,而 css 的模塊化卻還沒有特別的深入人心。

1. 分組式模塊化

這是最早對 css 模塊化的實現,也是最主要的一種方式,包括現在很多組件和開發者都是用這種方式開發的。

分組式模塊化就是用命名的方式,以不同的前綴代表不同的含義,實現樣式分組,文件分塊,達到模塊化的目的。

比如:

# 目錄結構
|-- one/page/css/ 某個頁面的 css 目錄
    |-- common.css 通用的 css
    |-- page1/ 單頁面1
        |-- section1.css 區域1 css
        |-- section2.css 區域2 css
    |-- page2/ 單頁面2
    |-- ...
    
# common.css 文件
.c-el-1 {
    ...
}
.c-el-2 {
    ...
}    
...    
    
# page1/section1.css 文件
.page1-section1 {
    ...
}
.page1-section1 .el-1 {
    ...
}    
.page1-section1 .el-2 {
    ...
}    
...

# page1/section2.css 文件
.page1-section2 {
    ...
}
.page1-section2 .el-1 {
    ...
}    
.page1-section2 .el-2 {
    ...
}    
...

這種方式并不是真正意義上的模塊化,因為無法避免全局沖突的問題,但原生 css 并不具備編程的能力,所以這個問題是無法避免的。盡管分組式不算真正意義上的模塊化,但是這種方式沒有脫離 css 原生的機制,所以尤其是第三方組件在導出 css 文件時,很多都使用的是這種方式。

比如,ant-design 導出的 css 中使用 ant- 前綴標識,mui 導出的 css 中使用 mui- 前綴標識等等。

1.1 最佳實踐

css 命名分組實踐的時間很長,從 css 誕生之初就有了,所以社區已經發展很成熟了,比如網易的 css 規范框架 NEC,H-ui。

補充:

一個 css 文件不宜過大,可以使用 @import 進行文件分塊;

樣式渲染盡量不要使用 #id [attr],應盡量使用 .class;

使用 js 庫操作 dom 時,盡量不要用 .class,應盡量用 #id data-set,如 $('#main'), $('[data-tab="1"]')。

<ul>
    <li data-tab="1">tab1</li>
    <li data-tab="2">tab2</li>
</ul>
<p data-tab-container="1"></p>
<p data-tab-container="2"></p>

1.2 css 語言擴充

因為 css 不是編程語言,所以不能聲明變量、函數,不能做判斷、循環和計算,也不能嵌套,所以這就使得寫樣式是一個效率底下且又枯燥的活兒。

為了解決這個問題,社區在探索中主要衍生出了兩種拓展語言 less 與 sass,它們兼容 css,并且拓展了編程的功能,主要是帶來了以下的特性:

可以聲明變量、函數,可以進行一些簡單的計算、判斷、循環;

可以嵌套選擇器,這樣節省了書寫的內容,也更具閱讀性;

.page1-section1 {
    ...
    
    .el-1 {
        ...
        
        .el-1-1 {
            ...
        }
    }
        
    .el-2 {
        ...
    }   
}

@import 避免重復導入問題,因此可以放心大膽的導入其他文件。

從模塊化的角度來講,less 與 sass 只是擴充了 css 的功能,但并沒有在語言的層面做模塊化,因為全局命名沖突的問題依然還在。

2. 模塊化(導出為 js 對象)

想要讓 css 具備真正意義上的模塊化功能,暫時還不能從語言的層面來考慮,所以只能從工具的角度來實現。

目前比較好的方式是使用 js 來加載 css 文件,并將 css 的內容導出為一個對象,使用 js 來渲染整個 dom 樹和匹配相應的樣式到對應的元素上,在這個過程中,我們便有機會對 css 做額外的處理,來達到模塊化的目的。

比如:

源文件

# style.css 文件
.className {
  color: green;
}

# js 文件
import styles from "./style.css";

element.innerHTML = '<p class="' + styles.className + '">Hello!</p>';

實際效果

# style.css 文件
._23_aKvs-b8bW2Vg3fwHozO {
  color: green;
}

# DOM
<p class="_23_aKvs-b8bW2Vg3fwHozO">Hello!</p>

在這個轉換過程中,根據文件的位置、內容生成一個全局唯一的 base64 字符串,替換原來的名稱,避免了全局命名沖突的問題,這樣便達到了模塊化的目的。所以,開發的過程中便無全局樣式沖突的問題。

# common.css 文件
.container {
    ...
}
.el1 {
    ...
}
.el2 {
    ...
}    
...    
    
# page1/section1.css 文件
.container {
    ...
}
.title {
    ...
}    
.content {
    ...
}    
...

# page2/section1.css 文件
.container {
    ...
}
.title {
    ...
}    
.content {
    ...
}
...

對 css 模塊化的定義參見 css-modules,其中對 css 書寫需求主要是:

1、應當用 .class,而非#id [attr](因為只有 .class 才能導出為對象的屬性);

2、推薦用 .className 書寫,而非 .class-name(前者可以通過 styles.className 訪問,后者需要通過 styles['class-name'] 才能訪問)。

更多功能可以查看 css-modules。

當然這個功能需要構建工具的支持,如果你是使用 webpack 構建工程的話,可以使用 css-loader,并設置 options.modules 為 true, 便可使用模塊化的功能了。

3. 模塊化(內置 js,綁定組件)

隨著前端組件化的發展,組件化框架的更新,如 react、vue,慢慢的發展為把整個組件的資源進行封裝,并只對外暴露一個對象,而調用者無需關心組件的內部實現和資源,直接調用這個對象就夠了。

比如(以 react 為例),一個 Welcome 組件,包括一個 js 文件、一個 css 文件、圖片:

# Welcome 組件
|-- welcome.js
|-- welcome.css
|-- images/

welcome.js 中便可如下加載(使用“導出為 js 對象”的 css 模塊化):

import styles from './welcome.css';
import image1 from './images/1.jpg';

其實,還有另外一種思路,就是將 css 內置 js 中,成為 js 的一部分。

這樣做的目的,一是 css 的模塊化,二是直接綁定到組件上。

比如,material-ui、styled-jsx、jss、vue style scoped 便是使用的這種方式。

這種方式的實現有很多種,這里主要介紹一下 styled-jsx。

3.1 styled-jsx

styled-jsx 的原理是根據當前文件的位置、內容生成一個全局唯一的標識,然后把這個標識追加到組件每一個元素上,每一個樣式選擇器上,達到模塊化的目的。

可以參考官方文檔,查看詳細的用法,我在這里給個例子:

3.1.1 安裝工具(babel 轉碼所需)

npm install --save styled-jsx

3.1.2 配置 babel plugins(如 .babelrc

{
  "plugins": [
    "styled-jsx/babel"
  ]
}

3.1.3 添加源文件代碼

hello.js

export default () => (
    <div className={'container'}>
        <p className={'hello'}>Hello! Hello!</p>
        <div id={'hi'}>Hi!</div>
        <style jsx>{`
          .container {
            color: blue;
          }
          p:first-child {
            color: red;
          }
          .hello {
            color: yellow;
          }
          #hi {
            color: green;
          }
        `}</style>
    </div>
)

3.1.4 轉碼

babel path/to/hello.js -d target/dir

轉碼后的文件

import _JSXStyle from 'styled-jsx/style';
export default () => (
    <div className={'jsx-234963469' + ' ' + 'container'}>
        <p className={'jsx-234963469' + ' ' + 'hello'}>Hello! Hello!</p>
        <div id={'hi'} className={"jsx-234963469"}>Hi!</div>
        <_JSXStyle styleId={"234963469"} css={".container.jsx-234963469{color:blue;}p.jsx-234963469:first-child{color:red;}.hello.jsx-234963469{color:yellow;}#hi.jsx-234963469{color:green;}"} />
    </div>
);

3.1.5 運行

實際渲染效果

<style type="text/css" data-styled-jsx="">
.container.jsx-234963469{
  color:blue;
}
p.jsx-234963469:first-child{
  color:red;
}
.hello.jsx-234963469{
  color:yellow;
}
#hi.jsx-234963469{
  color:green;
}
</style>
<div class="jsx-234963469 container">
  <p class="jsx-234963469 hello">Hello! Hello!</p>
  <div id="hi" class="jsx-234963469">Hi!</div>
</div>

以上就是本篇文章的全部內容了,更多css相關內容請關注php中文網的css教程欄目。

以上就是什么是css模塊化?css模塊化的實現方法的詳細內容,更多請關注php中文網其它相關文章!


網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 99视频在线视频| 99色精品视频| 午夜激情av在线| 日本一道本久久| www.xxx麻豆| 欧美精品久久96人妻无码| 红桃视频 国产| 亚洲国产成人va在线观看麻豆| 午夜视频在线瓜伦| 亚洲成人av免费看| 久热精品在线观看视频| 一起操在线视频| 国产又爽又黄ai换脸| 五月天av影院| 国产不卡一区二区视频| 国产3p露脸普通话对白| 女人天堂av手机在线| 欧美韩国日本在线| 香蕉视频禁止18| 中文国产在线观看| 狠狠精品干练久久久无码中文字幕| www.偷拍.com| 欧洲精品在线播放| 男人日女人bb视频| 日韩av一卡二卡三卡| 一级黄色高清视频| 免费不卡av在线| 一区二区在线播放视频| 日本在线观看视频一区| 日韩小视频网站| 久久午夜夜伦鲁鲁一区二区| 亚洲男人天堂av在线| 黄色特一级视频| 久久综合久久色| 999热精品视频| 99蜜桃臀久久久欧美精品网站| 无码少妇一区二区三区芒果| 天天干天天玩天天操| 黄网站色视频免费观看| 久久久久久久久久久久久久国产| 婷婷激情综合五月天| 男的插女的下面视频| 中文字幕中文在线| 黄色一级视频片| 成年人网站av| 久久人妻精品白浆国产 | 黄www在线观看| 浴室偷拍美女洗澡456在线| 欧美日韩一区二区在线免费观看 | 亚洲综合激情五月| 欧美激情成人网| 国产91沈先生在线播放| 国产三级精品三级在线| 国产无套内射久久久国产| 久久久久久久久影视| www.xxx亚洲| 男人操女人免费软件| 成人午夜视频在线观看免费| 日本丰满大乳奶| 奇米777在线视频| 国产欧美一区二| wwww.国产| 欧美日韩在线免费播放| 9久久9毛片又大又硬又粗| 免费网站在线观看视频| 4444在线观看| 97久久国产亚洲精品超碰热 | 日韩精品在线视频免费观看| 日本一级淫片演员| 影音先锋男人的网站| 中文字幕22页| 第一区免费在线观看| 一个色综合久久| 黄色一级片免费播放| 午夜xxxxx| 久久久成人精品一区二区三区 | 成人在线视频一区二区三区| 国产日产欧美一区二区| 六月婷婷激情网| av无码久久久久久不卡网站| 日韩精品一区二区免费| 国产亚洲黄色片| 妺妺窝人体色www在线小说| 日本三级免费观看| 国产精品无码一本二本三本色| 四虎永久在线精品无码视频| 午夜国产一区二区三区| 一级片免费在线观看视频| 污免费在线观看| 男人天堂av片| 91蝌蚪视频在线观看| 极品粉嫩美女露脸啪啪| 亚洲天堂第一区| 91传媒久久久| 亚洲无在线观看| 丁香花在线影院观看在线播放| 日韩精品一区二区三区久久| 日韩av一卡二卡三卡| 麻豆tv在线播放| 国产成人黄色网址| 成人在线免费高清视频| 亚洲中文字幕久久精品无码喷水| 最新免费av网址| 伊人成色综合网| 久久精品一二三四| 久久国产色av免费观看| 一区二区三区一级片| 99爱视频在线| 国产日韩欧美大片| 日本美女高潮视频| 奇米影视亚洲色图| 国产高清免费在线| 男人插女人下面免费视频| 成人短视频在线观看免费| 国产九九在线视频| 九色在线视频观看| 少妇大叫太大太粗太爽了a片小说| 无人在线观看的免费高清视频| 日本一本中文字幕| 日韩精品在线播放视频| 黄色片视频在线| 可以在线看的黄色网址| 久久综合久久久久| 福利在线小视频| 激情图片qvod| 日韩精品一区二区三区电影| 亚欧激情乱码久久久久久久久| 黄色片视频在线免费观看| bt天堂新版中文在线地址| 日本不卡一区二区三区四区| 天堂在线中文在线| 在线一区二区不卡| 九九九九九伊人| 91看片破解版| 亚洲国产午夜精品| 午夜啪啪福利视频| 在线成人免费av| 日韩精品久久一区二区| 妞干网在线播放| 日韩精品在线视频免费观看| 九九爱精品视频| 成人观看免费完整观看| 欧美女人性生活视频| 日本久久久精品视频| 哪个网站能看毛片| 天天影视综合色| 五月六月丁香婷婷| 国产激情片在线观看| 国产精品久久..4399| 男人操女人逼免费视频| 日本女优爱爱视频| 在线观看国产福利| 99热都是精品| 日本精品一区在线观看| 牛夜精品久久久久久久| 欧美精品色视频| 国产96在线 | 亚洲| www.xxx亚洲| 一区中文字幕在线观看| 人妻夜夜添夜夜无码av| 韩国日本美国免费毛片| 国产成年人在线观看| 东北少妇不带套对白| 久久久久久久少妇| 国产日产欧美一区二区| 久草精品在线播放| www.激情网| 欧美精品色视频| 日韩黄色片在线| 国产美女作爱全过程免费视频| 国产精品丝袜久久久久久消防器材| 国语对白做受xxxxx在线中国| 色香蕉在线观看| 精品久久久久久久免费人妻| 五月天男人天堂| 亚洲成熟丰满熟妇高潮xxxxx| 久久精品国产精品亚洲精品色| 91精品91久久久中77777老牛| 亚洲综合欧美在线| 黄色大片中文字幕| 四虎永久免费网站| 91小视频网站| 久久久免费视频网站| 日本大胆人体视频| 91亚洲免费视频| 大香煮伊手机一区| 自拍日韩亚洲一区在线| 男人的天堂成人| 色呦色呦色精品| 免费一区二区三区在线观看| 国产日韩av网站| 日韩黄色片在线| 台湾无码一区二区| 亚洲欧美日韩不卡| 中文字幕第22页| 手机av在线免费| www欧美激情| 一道本视频在线观看| 欧美精品成人网| 北条麻妃在线一区|