Vue2的老项目升级到了Vue3,然后UI组件也从element-ui升级到了element-plus。然后发现原来写的弹窗样式覆盖不成功了。首先是报错,/deep/ 语法不再支持,改成了 :deep(),然后发现样式还是不能覆盖成功;网上还有说需要一个根节点的,我发现我这个只有一个根节点。毕竟是老项目,vue2支持一个元素最为根节点。经过对元素的的分析看到了这样的问题;
由于为了方便,我把所有的弹窗都添加到了body(:append-to-body="true")下面造成了弹窗的路径不再属于我们引入的位置。
找打了问题的关键,就能解决这个问题了。
<el-dialog class="watchElDialog" :append-to-body="true"></el-dialog>
<style lang="scss" scope>
// 原来的样式
/deep/ .el-dialog__footer { // 不起作用,并且报错
text-align: center;
}
:deep(.el-dialog__footer){ // 不起作用,不报错
text-align: center;
}
</style>
<style lang="scss">
// 单独覆盖element-plus的样式,添加一个class是为了不影响其他的样式
.watchElDialog{
.el-dialog__footer { // 开始覆盖原来的样式
text-align: center;
}
}
</style>