vue中组件样式无法覆盖的解决方法

899 阅读1分钟

在使用vant组件时,时常会遇到自己写的CSS样式无法覆盖vant中CSS样式的问题,这个时候就需要用到深度作用选择器,在查阅资料后总结出关于深度作用选择器的一些方法。

scoped属性

  • scoped会给局部样式(非组件元素和组件根元素(不含组件内子元素))添加上 "class=data-*** " 的类名。
  • 在scoped中写样式,会在每句css选择器末尾中添加 data-*** 的类名,但如果是嵌套解构的css选择器会在最后一个样式中添加类名,从而导致a拿不到样式。
//.a为大div父组件 .b为子组件根元素 .c为子组件内的子元素
 .a .b .c{//多层
    color:red
  }
  //会渲染成
  .a .b .c[data-v-2311c06a]{
    color:red
  }

深度作用选择器

既想更改组件内样式,又想保持样式的局部作用域,不污染全局的情况下,就可以使用深度作用选择器。深度作用选择器可以更“深层”的影响组件中的样式。

1. >>>

当vue中的style使用的是css就可以使用 ">>>" ,但是预处理器无法使用该方法

<style lang="css" scoped>
    .a >>> .b{
        /*...*/
    }
</style>

2./deep/

/deep/ 放在需要添加样式的选择器前

<style lang="scss" scoped>
.a{
 /deep/ .b { 
  /* ... */ 
 }
} 
</style>

3. ::v-deep

在vue-cli3中,/deep/使用可能会失效。此时我们可以用到::v-deep

<style lang="scss" scoped>
.a{
 /deep/ .b { 
  /* ... */ 
 }
} 
</style>

在CSS预处理器less, sass, scss下使用后两种,::v-deep的编译速度更快

vue学习(十五) >>>或/deep/或::v-deep深度作用选择器作用及使用 - 坤嬷嬷 - 博客园 (cnblogs.com)一些更详细的例子在这里