vue中style scope深度访问方式
背景:
vue-cli3.0项目中需要修改element-ui collapse collapse-item 的样式(背景色等),template简单如下:
分类1
分类2
试了scoped局部样式,完全不生效。
去掉scoped,写在全局样式里,生效了!
第一次试全局样式没生效,找到原因:没写父类class .el-collapse-item,层级加载顺序出了问题,样式被覆盖了。
虽然全局样式可以解决,但是不想写在全局样式里,怎么办呢?找到了Deep Selectors,可以在父组件中修改子组件的样式,那咱就来尝个鲜吧。
在css中,使用 >>>
在无法正确解析>>>的预处理器中(例如sass)使用 /deep/ or ::v-deep
.el-collapse-item {
::v-deep .el-collapse-item__header {
background: #262720;
color: #ffffff;
height: 24px;
line-height: 24px;
font-size: 12px;
border-bottom: 1px solid #4b4c44;
display: flex;
flex-direction: row-reverse;
justify-content: flex-end;
.el-collapse-item__arrow {
margin: 0;
margin-right: 5px;
}
}
::v-deep .el-collapse-item__wrap {
background: #262720;
border-bottom: 1px solid #4b4c44;
color: #ffffff;
.el-collapse-item__content {
color: #ffffff;
padding-bottom: 0;
line-height: 18px;
}
}
}
编译后的结果:
/deep/ or ::v-deep
实现逻辑在插件component-compiler-utils里,附上component-compiler-utils解析scope的源码:
scope解析
参考:
vue中style scope深度访问新方式(::v-deep)
发表评论 (审核通过后显示评论):