<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        在vue中使用css modules替代scroped的方法

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:17:49
        文檔

        在vue中使用css modules替代scroped的方法

        在vue中使用css modules替代scroped的方法:前面的話 css modules是一種流行的模塊化和組合CSS的系統(tǒng)。 vue-loader提供了與css modules的集成,作為scope CSS的替代方案。本文將詳細(xì)介紹css modules 引入 最開始使用Vue的時(shí)候,提倡并大量使用的是scoped這種技術(shù) <style scop
        推薦度:
        導(dǎo)讀在vue中使用css modules替代scroped的方法:前面的話 css modules是一種流行的模塊化和組合CSS的系統(tǒng)。 vue-loader提供了與css modules的集成,作為scope CSS的替代方案。本文將詳細(xì)介紹css modules 引入 最開始使用Vue的時(shí)候,提倡并大量使用的是scoped這種技術(shù) <style scop

        前面的話

        css modules是一種流行的模塊化和組合CSS的系統(tǒng)。 vue-loader提供了與css modules的集成,作為scope CSS的替代方案。本文將詳細(xì)介紹css modules

        引入

        最開始使用Vue的時(shí)候,提倡并大量使用的是scoped這種技術(shù)

        <style scoped>
         @media (min-width: 250px) {
         .list-container:hover {
         background: orange;
         }
         }
        </style>

        這個(gè)可選 scoped 屬性會(huì)自動(dòng)添加一個(gè)唯一的屬性 (比如 data-v-21e5b78) 為組件內(nèi) CSS 指定作用域,編譯的時(shí)候 .list-container:hover 會(huì)被編譯成類似 .list-container[data-v-21e5b78]:hover

        但是,它并不能完全避免沖突

        <span data-v-0467f817 class="errShow">用戶名不得為空</span>

        以上面的代碼為例,使用scoped之后,它在元素上添加了一個(gè)唯一的屬性'data-v-0467f817',CSS樣式被編譯如下

        .errShow[data-v-0467f817] {
         font-size: 12px;
         color: red;
        }

        但是,如果用戶也定義了一個(gè)errShow類名,會(huì)影響到所有定義為errShow類名的組件的顯示

        而CSS modules則做的更徹底,它不是添加屬性,而是直接改變類名

        <span class="_3ylglHI_7ASkYw5BlOlYIv_0">用戶名不得為空</span>

        這樣,大大降低了沖突的可能性,只要不是用戶直接給span標(biāo)簽設(shè)置樣式,基本上不會(huì)影響組件的顯示

        模塊化

        CSS Modules既不是官方標(biāo)準(zhǔn),也不是瀏覽器的特性,而是在構(gòu)建步驟中對(duì)CSS類名選擇器限定作用域的一種方式(通過hash實(shí)現(xiàn)類似于命名空間的方法)。類名是動(dòng)態(tài)生成的,唯一的,并準(zhǔn)確對(duì)應(yīng)到源文件中的各個(gè)類的樣式

        實(shí)際上,CSS Modules只是CSS模塊化的一種方式。為什么我們需要CSS模塊化呢?

        CSS的規(guī)則都是全局的,任何一個(gè)組件的樣式規(guī)則,都對(duì)整個(gè)頁(yè)面有效。于是,亟待解決的就是樣式?jīng)_突(污染)的問題。一般地,為了解決沖突,會(huì)把class命名寫長(zhǎng)一點(diǎn),降低沖突幾率;加上父元素的選擇器,來(lái)限制范圍等

        CSS模塊化就是來(lái)解決這個(gè)問題的,一般地,分為三類

        1、命名約定類

        該類CSS模塊化方案主要用來(lái)規(guī)范CSS命名,最常見的是BEM,當(dāng)然還有OOCSS等,在構(gòu)建工具出現(xiàn)之前,大多數(shù)都是在CSS命名上做文章

        2、CSS in JS

        徹底拋棄CSS,用javascript來(lái)寫CSS規(guī)則,常見的有styled-components

        3、使用JS來(lái)管理樣式

        使用JS編譯原生的CSS文件,使其具備模塊化的能力,最常見的就是CSS Modules

        隨著構(gòu)建工具的興起,越來(lái)越多的人開始使用后兩者方案,書寫CSS時(shí),不用再特意地關(guān)心樣式?jīng)_突問題。只需要使用約定的格式編寫代碼即可

        寫法

        下面來(lái)介紹CSS modules的寫法

        在style標(biāo)簽中添加module屬性,表示打開CSS-loader的模塊模式

        <style module>
        .red {color: red;}</style>
        

        在模板中使用動(dòng)態(tài)類綁定:class,并在類名前面加上'$style.'

        <template>
         <p :class="$style.red">
         This should be red
         </p>
        </template>

        如果類名包含中劃線,則使用中括號(hào)語(yǔ)法

        <h4 :class="$style['header-tit']">類別推薦</h4>

        也可以使用數(shù)組或?qū)ο笳Z(yǔ)法

         <p :class="{ [$style.red]: isRed }">
         Am I red?
         </p>
         <p :class="[$style.red, $style.bold]">
         Red and bold
         </p>

        更復(fù)雜的對(duì)象語(yǔ)法

         <ul 
            :class="{
         [$style.panelBox]:true,
         [$style.transitionByPanelBox]:needTransition
         }"

        更復(fù)雜的數(shù)組語(yǔ)法

         <li
         :class="[
         $style['aside-item'],
         {[$style['aside-item_active']]:(i === index)}
         ]"

        配置

        css-loader關(guān)于CSS modules的默認(rèn)配置如下

        {
         modules: true,
         importLoaders: 1,
         localIdentName: '[hash:base64]'
        }
        

        可以使用vue-loader的cssModules選項(xiàng)為css-loader進(jìn)行自定義的配置

        module: {
         rules: [
         {
         test: '\.vue$',
         loader: 'vue-loader',
         options: {
         cssModules: {
         localIdentName: '[path][name]---[local]---[hash:base64:5]',
         camelCase: true
         }
         }
         }
         ]
        }
        
        

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        在vue中使用css modules替代scroped的方法

        在vue中使用css modules替代scroped的方法:前面的話 css modules是一種流行的模塊化和組合CSS的系統(tǒng)。 vue-loader提供了與css modules的集成,作為scope CSS的替代方案。本文將詳細(xì)介紹css modules 引入 最開始使用Vue的時(shí)候,提倡并大量使用的是scoped這種技術(shù) <style scop
        推薦度:
        標(biāo)簽: 方法 VUE 模塊
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲欧洲精品成人久久曰影片| 麻豆国产精品入口免费观看| 亚洲美女又黄又爽在线观看| 无码 免费 国产在线观看91| 一本色道久久88亚洲综合| 久久久久亚洲精品无码网址色欲| 久久亚洲色一区二区三区| 国产青草亚洲香蕉精品久久| 精品无码国产污污污免费网站| 亚洲精品国产精品乱码不卡√| a级日本高清免费看| 亚洲AV永久无码精品| 永久免费在线观看视频| 亚洲五月综合网色九月色| 最近免费中文字幕视频高清在线看| 国产精品亚洲四区在线观看| 成人啪精品视频免费网站| 天天综合亚洲色在线精品| 亚洲成a人片在线观看国产| 久久精品成人免费国产片小草| 亚洲精品无码专区在线在线播放 | 国产高清在线免费| 久久水蜜桃亚洲AV无码精品| 亚洲人成网站18禁止一区| 中国内地毛片免费高清| 亚洲国产美国国产综合一区二区 | 亚洲另类古典武侠| 黄网址在线永久免费观看 | 暖暖在线视频免费视频| 亚洲视频中文字幕在线| 免费无码又爽又刺激网站| 免费a级毛片18以上观看精品| 乱淫片免费影院观看| 亚洲午夜久久影院| 全免费A级毛片免费看网站| 一级黄色免费大片| 亚洲成人免费在线观看| 亚洲国产精品第一区二区三区| 国产免费AV片在线观看 | 亚洲AV无码一区二区三区人| 免费二级毛片免费完整视频|