深入理解 Vue Scope CSS 以及深度作用选择器

当 style 标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素。编译后代码如下:

<style>
.example[data-v-f3f3eg9] {
  color: red;
}
</style>

<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>

原理是使用 css 的属性选择器,在标签上设置了 data-v-xxx 属性,然后 .classname[data-v-xxx] 找到对应样式。


子组件

使用 scoped 后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件的 scoped CSS 和子组件的 scoped CSS 的影响。这样设计是为了让父组件可以从布局的角度出发,调整其子组件根元素的样式。

编译后 classname 添加了当前组件的选择器,导致组件内获取不到样式。


深度作用选择器

使用 lang="scss" 的嵌套语法编译结果:

如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>> /deep/ ::v-deep 操作符,scope 会添加到操作符的上一个节点,这样下层就能获取到样式。


whosmeya.com

posted @ 2020-12-15 13:41  whosmeya  阅读(528)  评论(0编辑  收藏  举报