詳解vue樣式穿透的幾種方式
scoped屬性
我們在vue組件寫樣式一般是在<style>標簽里面,但是我們在這里的樣式默認是全局樣式,如果其它組件的class名取重復了則會導致樣式污染。
所以vue支持在<style>標簽添加scoped屬性,這樣當前組件的樣式只會在當前樣式生效,其它組件不會影響到。
例子如下:
<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的樣式最終也會帶上這些屬性,根據這些屬性找到元素。

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

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

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

可以看到生效了。
樣式穿透
vue都是通過深度選擇器來樣式穿透的。除了上面的講/deep/,我熟知的還有::v-deep,>>>。
那它們有何區(qū)別?
- 如果你使用的是
css,沒有使用css預處理器,則可以使用>>>,/deep/,::v-deep。 - 如果你使用的是
less或者node-sass,那么可以使用/deep/,::v-deep都可以生效。 - 如果你使用的是
dart-sass,那么就不能使用/deep/,而是使用::v-deep才會生效。
總結
總結一下:
css可以使用>>>,/deep/,::v-deepless和node-sass可以使用/deep/,::v-deepdart-sass可以使用::v-deep
到此這篇關于詳解vue樣式穿透的幾種方式的文章就介紹到這了,更多相關vue樣式穿透內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue Element前端應用開發(fā)之用戶管理模塊的處理
本篇隨筆以權限管理模塊中的用戶管理為媒介,進行相關功能的介紹和界面設計的處理。2021-05-05

