关于vue组件样式的作用域问题
参考文档:
关于组件的作用域样式
影响全局:
<style>
/* 全局样式 */
</style>
作用域样式,只对当前组件内部生效:
<style scoped>
.example {
color: red;
}
</style>
<template>
<div class="example">hi</div>
</template>
所谓的作用域,其实就是在转换的时候为其添加了一个唯一的属性名原理:
<style>
.example[data-v-f3f3eg9] {
color: red;
}
</style>
<template>
<div class="example" data-v-f3f3eg9>hi</div>
</template>
你可以在一个组件中同时使用有 scoped 和非 scoped 样式:
<style>
/* 全局样式 */
</style>
<style scoped>
/* 本地样式 */
</style>
子组件的根元素
使用 scoped 后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件的 scoped CSS 和子组件的 scoped CSS 的影响。这样设计是为了让父组件可以从布局的角度出发,调整其子组件根元素的样式。
注意:只能是根元素。
如何设置子组件根元素的样式
方式一:审查元素,观察该组件根节点的 class 类名
方式二:手动给组件添加 class,该类名会自动作用到组件的根元素
以上两种方式也只能作用到子组件的根节点 ,想要作用子组件内部的节点有两种方法
方法一:为当前样式单独包一个 style 标签,去掉 scoped 作用全局即可,但不是很推荐
方法二:使用 vue 提供的深度作用选择器, 强烈推荐!