在使用antd或element-ui需要改变组件样式时,一般情况下,会采用深度改变组件样式的写法。
- 如果是css,一般采用>>>的写法,示例如下:前面的类一般是后面组件的父类或祖先类。
- 如果是less或其他预处理语言,需要使用/deep/语法,一般使用如下示例:deep前面可以不用写类名,有时候使用deep可能会报错,可以改成::v-deep,用法与deep一致。
有时候会出现以上三种情况都不能生效的问题,这个时候需要考虑组件的样式是否是在嵌套的组件中了。某些情况是直接绑定在body上面的,所以如果设置了scoped属性,可能会被影响,如果不生效,可以尝试去掉scoped这一属性,但这并不是一个好的写法,一个文件中可以有多个style的标签,如果想要改变的某样式在scoped里面不生效,可以多加一个style标签,用于放置scoped不生效的样式,其他样式仍写在设有scoped的style标签内,避免相互影响。如果不是scoped影响,还可以考虑样式的权重问题。很多时候我们应该避免使用以上这些写法,因为使用这些写法,样式还会被编译一次,有时候嵌套太深还可能会影响性能。基于此,我们可以找到要更改组件的类命,然后将类命提取出来重写,同时要注意权重问题,以免不生效。
下图展示了两个style标签的用法: