欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決vue scoped html樣式無效的問題

 更新時(shí)間:2020年10月24日 15:20:50   作者:西洲 -  
這篇文章主要介紹了解決vue scoped html樣式無效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

1、問題場(chǎng)景

page1,page2都使用flexible移動(dòng)端自適應(yīng)的時(shí)候,有一個(gè)頁(yè)面page2需要手動(dòng)設(shè)置rem基準(zhǔn)值,

//手動(dòng)設(shè)置基準(zhǔn)
html{ 
 font-size: 120px !important;
}

但是在page2引用的self.less里面設(shè)置了基準(zhǔn),竟然沒有生效

2、問題分析scoped屬性

在引用self.less的時(shí)候,使用了屬性scoped

vue中引入了scoped這個(gè)概念,設(shè)計(jì)思想就是讓當(dāng)前組件的樣式不會(huì)修改到其他頁(yè)面的樣式,使用了data-v-hash的方式來使css有了他對(duì)應(yīng)的模塊的標(biāo)識(shí),通俗來說就是使用了scoped屬性,template里面的html都會(huì)多一個(gè)data-v-hash的屬性,css 選擇器會(huì)根據(jù)data-v-hash來進(jìn)行選擇,當(dāng)前的css文件只會(huì)對(duì)當(dāng)前的頁(yè)面生效。參考下圖

那么問題來了,scoped只對(duì)當(dāng)前組件里面的內(nèi)容生效,會(huì)對(duì)組件里面的dom加data-v-hash屬性,而不會(huì)對(duì)html,body等組件之外的dom添加,但是css里面的屬性選擇器都是data-v-hash屬性的,參考下圖,橢圓形里面是組件之外的,沒有data-v-hash屬性,所以加了scoped屬性的css會(huì)對(duì)組件外無效。長(zhǎng)方形里面的dom是組件里面的,data-v-hash跟css里面的data-v-hash是一致的會(huì)生效。

雖然css里面的body選擇器也添加了data-v-hash,但是頁(yè)面dom沒有data-v-hash屬性,所以css里面設(shè)置的body樣式無效。

3、解決辦法

針對(duì)必須設(shè)置屬性scoped的組件,可以在page2.vue里面再單獨(dú)寫一個(gè)style,在頁(yè)面里面單獨(dú)寫組件之外(html,body等)的樣式,因?yàn)閟coped不會(huì)對(duì)組件之外的dom增加data-v-hash屬性

但是新問題來了,page2設(shè)置以后,影響了page1頁(yè)面的布局,page1頁(yè)面html的的font-size樣式依然是120px,

當(dāng)然會(huì)影響啊,page2也引用了page1的樣式啊,但是page2設(shè)置了scoped,所以只有page2的html樣式會(huì)影響page1,

解決辦法就是再vue什么周期create里面,用js給html設(shè)置font-size

4、總結(jié)

遇到了這問題,終于搞明白了scoped染渲染規(guī)則,在添加了scoped屬性的組件

給組件(template)里面的dom節(jié)點(diǎn),加了一共不重復(fù)屬性的data-v-hash,來標(biāo)志唯一性

給組件里面引用的的樣式文件,在每個(gè)選擇器后面添加了一個(gè)等同于dom節(jié)點(diǎn)一樣的data-v-hash字段,實(shí)現(xiàn)類似于作用域的問題,不影響全局

如果組件里面還有組件,只會(huì)給最外層的組件里面dom,添加data-v-hash,不會(huì)影響組件內(nèi)部引用的組件

補(bǔ)充知識(shí):vue中scoped慎用

scoped表示當(dāng)前style屬性只屬于當(dāng)前模塊

實(shí)現(xiàn)原理:

vue通過在DOM結(jié)構(gòu)以及css樣式上加上唯一的標(biāo)記 data-v-469af010,保證唯一,

問題:

1.父組件無scoped屬性,子組件帶有scoped,父組件是無法操作子組件的樣式的(原因在原理中可知),雖然我們可以在全局中通過該類標(biāo)簽的標(biāo)簽選擇器設(shè)置樣式,但會(huì)影響到其他組件

2.父組件有scoped屬性,子組件無,父組件也無法設(shè)置子組件樣式,因?yàn)楦附M件的所有標(biāo)簽都會(huì)帶有data-v-469af010唯一標(biāo)志,但子組件不會(huì)帶有這個(gè)唯一標(biāo)志屬性,與1同理,雖然我們可以在全局中通過該類標(biāo)簽的標(biāo)簽選擇器設(shè)置樣式,但會(huì)影響到其他組件

3.父子組建都有,同理也無法設(shè)置樣式,更改起來增加代碼量

因此如果組件內(nèi)部還有組件,只會(huì)給最外層的組件里的標(biāo)簽加上唯一屬性字段,不影響組件內(nèi)部引用的組件( 注意 )

方案:

1.混合使用全局屬性和局部屬性

<style>
/* global styles */
</style>
<style scoped>
/* local styles */
</style>

2.深選擇器

<template>
 <div id="app">
  <gHeader></gHeader>
 </div>
</template>
<style lang="css" scoped>
 .gHeader /deep/ .name{ //第一種寫法
  color:red;
 }
 .gHeader >>> .name{  //二種寫法
  color:red;
 }
</style>

以上這篇解決vue scoped html樣式無效的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中vant組件樣式失效問題及解決

    vue中vant組件樣式失效問題及解決

    這篇文章主要介紹了vue中vant組件樣式失效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue.js父子組件傳參的原理與實(shí)現(xiàn)方法

    vue.js父子組件傳參的原理與實(shí)現(xiàn)方法

    這篇文章主要介紹了vue.js父子組件傳參的原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了vue.js父子組件傳參的基本原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2023-04-04
  • 淺談vue.use()方法從源碼到使用

    淺談vue.use()方法從源碼到使用

    這篇文章主要介紹了淺談vue.use()方法從源碼到使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Nuxt引入vue-persistedstate以及踩坑記錄

    Nuxt引入vue-persistedstate以及踩坑記錄

    這篇文章主要介紹了Nuxt引入vue-persistedstate以及踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue element ui使用選擇器實(shí)現(xiàn)地區(qū)選擇兩種方法

    vue element ui使用選擇器實(shí)現(xiàn)地區(qū)選擇兩種方法

    這篇文章主要給大家介紹了關(guān)于vue element ui使用選擇器實(shí)現(xiàn)地區(qū)選擇的兩種方法,Element UI是一套基于Vue.js開發(fā)的UI組件庫(kù),其中包含了地區(qū)選擇器(Cascader)組件,需要的朋友可以參考下
    2023-09-09
  • Vue input輸入框回車以后自動(dòng)刷新頁(yè)面(直播程序)

    Vue input輸入框回車以后自動(dòng)刷新頁(yè)面(直播程序)

    這篇文章主要介紹了直播程序,Vue input輸入框回車以后自動(dòng)刷新頁(yè)面,適用場(chǎng)景是在輸入框輸入字符并按下回車鍵搜索時(shí),刷新頁(yè)面,需要的朋友參考下實(shí)現(xiàn)代碼
    2023-01-01
  • vue3使用useDialog實(shí)現(xiàn)對(duì)話框的示例代碼

    vue3使用useDialog實(shí)現(xiàn)對(duì)話框的示例代碼

    在日常開發(fā)中,彈窗是常見的一個(gè)功能,本文主要介紹了vue3使用useDialog實(shí)現(xiàn)對(duì)話框的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Vue3自動(dòng)引入組件與組件庫(kù)的方法實(shí)例

    Vue3自動(dòng)引入組件與組件庫(kù)的方法實(shí)例

    關(guān)于vue?組件還是非常好用的,真正掌握預(yù)計(jì)需要一段時(shí)間,下面這篇文章主要給大家介紹了關(guān)于Vue3自動(dòng)引入組件與組件庫(kù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Vue中的局部組件介紹

    Vue中的局部組件介紹

    這篇文章主要介紹了Vue中的局部組件,文章圍繞Vue局部組件得相關(guān)資料展開內(nèi)容,需要的的小孩伙伴請(qǐng)參考下面文章的具體介紹,希望對(duì)你有所幫助
    2021-12-12
  • Vue3使用contenteditable打造定制化輸入

    Vue3使用contenteditable打造定制化輸入

    contenteditable 屬性為網(wǎng)頁(yè)開發(fā)者提供了一種靈活的方式來創(chuàng)建可編輯的內(nèi)容區(qū)域,使用戶可以直接在網(wǎng)頁(yè)上進(jìn)行內(nèi)容編輯,而無需依賴傳統(tǒng)的輸入框,本文將利用contenteditable打造定制化輸入,感興趣的可以了解下
    2023-12-12

最新評(píng)論