为什么 vue 组件添加 scoped 后,某些组件样式不生效
简述
在父组件中修改子组件的某些样式,发现不生效,删去<style scoped></style>中的 scoped 后生效。
原因
scoped 实现样式隔离的原理为:
编译时,父组件的所有标签、子组件的根标签、以及所有的样式 都会加上特殊的标识;
因为子组件内部的标签都没有此种标识,所以样式就不会生效。
实例
不添加 scoped
1 | <!-- 父组件 --> |
1 | <!-- 子组件 --> |
编译后:
1 | <div class="parent"> |
1 | p { |
添加 scoped
编译后:
1 | <div data-v-7ba5bd90 class="parent"> |
1 | p[data-v-7ba5bd90] { |
解决方法
深度作用选择器
使用 /deep/ 或者 ::v-deep
1 | /deep/ p { |
编译后:
html 结果不变,样式代码变化
1 | [data-v-7ba5bd90] p { |
使用无 scoped 的 style
1 | <style scoped> |
- Title: 为什么 vue 组件添加 scoped 后,某些组件样式不生效
- Author: Gabrielle
- Created at : 2023-11-14 17:46:52
- Updated at : 2025-05-20 10:47:28
- Link: https://zoella-w.github.io/2023/11/14/5-为什么vue组件添加scoped后某些组件样式不生效/
- License: This work is licensed under CC BY-NC-SA 4.0.