詳解vue樣式穿透的幾種方式
scoped屬性
我們?cè)趘ue組件寫樣式一般是在<style>標(biāo)簽里面,但是我們?cè)谶@里的樣式默認(rèn)是全局樣式,如果其它組件的class名取重復(fù)了則會(huì)導(dǎo)致樣式污染。
所以vue支持在<style>標(biāo)簽添加scoped屬性,這樣當(dāng)前組件的樣式只會(huì)在當(dāng)前樣式生效,其它組件不會(huì)影響到。
例子如下:
<div class="page">
<span class="content">hello world</span>
</div>
<style lang="scss" scoped> .page {
.content {
color: aquamarine;
font-size: 20px;
}
} </style>
最終在瀏覽器渲染出來,div和span上都帶有特殊屬性

然后css的樣式最終也會(huì)帶上這些屬性,根據(jù)這些屬性找到元素。

這樣子避免樣式全局污染。
如果你的引入了第三方庫,如果你想修改第三方庫的樣式,直接通過dom查找,修改樣式是沒有效果的。
比如我在項(xiàng)目引入了餓了么的組件庫elementUI。
<el-card class="box-card"> <span class="content">hello world</span> </el-card>

如果我們想把padding改小一點(diǎn),下面這樣寫是沒有效果的。
<style lang="scss" scoped> .box-card {
.el-card__body {
padding: 10px;
}
} </style>
只看到默認(rèn)的padding。我們寫的樣式?jīng)]有渲染出來。

此時(shí)需要樣式穿透,需要用到深度選擇器/deep/。
<style lang="scss" scoped> .box-card {
/deep/.el-card__body {
padding: 10px;
}
} </style>

可以看到生效了。
樣式穿透
vue都是通過深度選擇器來樣式穿透的。除了上面的講/deep/,我熟知的還有::v-deep,>>>。
那它們有何區(qū)別?
- 如果你使用的是
css,沒有使用css預(yù)處理器,則可以使用>>>,/deep/,::v-deep。 - 如果你使用的是
less或者node-sass,那么可以使用/deep/,::v-deep都可以生效。 - 如果你使用的是
dart-sass,那么就不能使用/deep/,而是使用::v-deep才會(huì)生效。
總結(jié)
總結(jié)一下:
css可以使用>>>,/deep/,::v-deepless和node-sass可以使用/deep/,::v-deepdart-sass可以使用::v-deep
到此這篇關(guān)于詳解vue樣式穿透的幾種方式的文章就介紹到這了,更多相關(guān)vue樣式穿透內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue.js中window.onresize的超詳細(xì)使用方法
這篇文章主要給大家介紹了關(guān)于vue.js中window.onresize的超詳細(xì)使用方法,window.onresize 是直接給window的onresize屬性綁定事件,只能有一個(gè),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
vue控制滾動(dòng)條滑到某個(gè)位置的方法實(shí)例
當(dāng)容器有滾動(dòng)條時(shí),有時(shí)需要將滾動(dòng)條滑到某個(gè)位置,下面這篇文章主要給大家介紹了關(guān)于vue控制滾動(dòng)條滑到某個(gè)位置的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
解決Vue keep-alive 調(diào)用 $destory() 頁面不再被緩存的情況
這篇文章主要介紹了解決Vue keep-alive 調(diào)用 $destory() 頁面不再被緩存的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
vue-cli項(xiàng)目中使用echarts圖表實(shí)例
在本篇文章里我們給大家分享了關(guān)于vue中使用echarts圖表的實(shí)現(xiàn)方法,有興趣的朋友們學(xué)習(xí)下。2018-10-10
vue+swiper實(shí)現(xiàn)組件化開發(fā)的實(shí)例代碼
這篇文章主要介紹了vue+swiper實(shí)現(xiàn)組件化開發(fā)的相關(guān)資料,需要的朋友可以參考下2017-10-10
Vue ElementUI之Form表單驗(yàn)證遇到的問題
這篇文章主要介紹了Vue ElementUI之Form表單驗(yàn)證遇到的問題,需要的朋友可以參考下2017-08-08
Vue路由重復(fù)點(diǎn)擊報(bào)錯(cuò)問題及解決
這篇文章主要介紹了Vue路由重復(fù)點(diǎn)擊報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Vue.js如何利用v-for循環(huán)生成動(dòng)態(tài)標(biāo)簽
這篇文章主要給大家介紹了關(guān)于Vue.js如何利用v-for循環(huán)生成動(dòng)態(tài)標(biāo)簽的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
vue中使用elementui實(shí)現(xiàn)樹組件tree右鍵增刪改功能
這篇文章主要介紹了vue中使用elementui實(shí)現(xiàn)對(duì)樹組件tree右鍵增刪改功能,右擊節(jié)點(diǎn)可進(jìn)行增刪改,對(duì)節(jié)點(diǎn)數(shù)據(jù)進(jìn)行模糊查詢功能,本文給大家分享了完整代碼,需要的朋友可以參考下2022-08-08

