vue单页面修改样式无法覆盖问题
当 <style> 标签有 scoped 属性时,它的 css 只作用于当前组件中的元素。
vue组件编译后,会将 template 中的每个元素加入 [data-v-xxxx] 属性来确保 style scoped 仅本组件的元素而不会污染全局。
比如:
<style scoped>
.example {
color: red;
}
</style>
<template>
<div>hi</div>
</template>
转换结果:
<style>
.example[data-v-f3f3eg9] {
color: red;
}
</style>
<template>
<div data-v-f3f3eg9>hi</div>
</template>
如果你想修改里面的span样式,你会发现是没有效果的,有两个解决办法。
方法一
你可以在一个组件中同时使用有作用域和无作用域的样式:
<style scoped>
.example{
// ...
}
</style>
<style>
.example span {
// ...
}
</style>
PPT模板下载大全https://redbox.wode007.com
方法二
深度作用选择器
如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>> 操作符:
只作用于css!!!!!!!!!!!!!!
<style scoped>
.a >>> .b { /* ... */ }
</style>
上述代码将会编译成:
.a[data-v-f3f3eg9] .b { /* ... */ }
如果是sass/less的话可能无法识别,这时候需要使用 /deep/ 选择器了。
<style lang="less" scoped>
/deep/ .b {
color: #000;
}
}
</style>