scoped私有作用域和deep selector深度作用選擇器

私有作用域

<style>標(biāo)簽上添加scoped屬性,可以使樣式只在當(dāng)前組件生效,樣式私有化,避免影響其他的組件,造成全局污染。

<template>
  <div class="example">hi</div>
</template>

<style scoped>
.example {
  color: red;
}
</style>

原理:
上述代碼會通過PostCSS轉(zhuǎn)換成:

<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>

<style>
.example[data-v-f3f3eg9] {
  color: red;
}
</style>

通過給一個組件中的所有dom節(jié)點(diǎn)添加了一個唯一的data屬性,并且給css選擇器添加當(dāng)前組件對應(yīng)的data屬性選擇器來私有化樣式

深度作用選擇器

如果你希望 scoped 樣式中的一個選擇器能夠作用得更深,影響到子組件,你可以使用 深度作用選擇器>>>。

<style scoped>
.a >>> .b { /* ... */ }
</style>

上述代碼會轉(zhuǎn)換成:

.a[data-v-f3f3eg9] .b { /* ... */ }

因?yàn)楹竺娴哪莻€類沒加組件的data屬性選擇器,所以就能選到子組件里面的類了

別名

/deep/>>>的別名,有些像 Sass,Less 之類的預(yù)處理器無法正確解析 >>>,所以使用/deep/代替

<style scoped>
.a /deep/ .b { /* ... */ }
</style>

應(yīng)用

平時(shí)寫項(xiàng)目肯定會用第三方的組件,比如iview,element-ui,mint-ui,vux-ui,swiper等等,想要修改第三方組件的樣式,但又不想去掉scoped屬性,影響別的組件。

方式一

使用深度作用選擇器:

<style scoped>
    外層組件類 >>> 第三方組件內(nèi)部類 {
        樣式
    }
</style>
方式二

一個組件中可以使用多個style,同時(shí)使用有 scoped 和非 scoped 樣式:

<style>
/* 全局樣式 */
/* 將修改第三方組件的樣式寫在這里 */
/* 組件的最外層標(biāo)簽定義一個唯一類,最好將樣式都寫在這個類名下,以防組件間互相影響 */
</style>

<style scoped>
/* 本地樣式 */
</style>

提示

表層的一些樣式,比如你在HTML頁面中寫出來標(biāo)簽的那些,如果加類名就可以實(shí)現(xiàn)修改樣式,沒必要使用深度選擇器

文檔

scoped

網(wǎng)站導(dǎo)航

網(wǎng)站導(dǎo)航

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,213評論 3 119
  • 在我至今患過的所有疾病中 我只承認(rèn)孤獨(dú) 這靈魂里的一根刺 銳度扎疼了我的肉體 我嘗試過用冥想入藥 在日出日落間調(diào)整...
    人造月球閱讀 226評論 3 7
  • 我親愛的倪先生, 首先,我得抱歉夏日對你的冷淡,躁熱的空氣讓我偷偷去享受一個人的靜謐。 因?yàn)榫判r(shí)的火車距離,我沒...
    twinklele閱讀 820評論 0 3
  • 三 展無塵當(dāng)然沒有乖乖聽話真的跑了八丈遠(yuǎn),他頂多是竭力控制自己的手腳,讓它們老實(shí)點(diǎn)就罷了。 只是,讓零落頗為不解的...
    稻場舊事閱讀 301評論 0 4

友情鏈接更多精彩內(nèi)容