VUE3 无法修改 el-dialog 样式

  1. 解决方案 - 当前页面新增不带scope的style标签

    <style lang="scss">
    // pdf-preview 是dialog新增的class类名
    .pdf-preview {
      .el-dialog__body {
        padding: 0;
      }
    }
    </style>
    
  2. 场景复现

    使用:deep() 添加样式无效

    <template>
      <el-dialog
        v-model="dialogVisible"
        width="70%"
        top="5vh"
        append-to-body
        class="pdf-preview"
      >
        xxx
     </el-dialog>
    <template>
    <style lang="scss" scoped>
    .pdf-preview {
      :deep() {
          padding: 0;
      }
     }
    </style>
    
  3. 问题原因

    3.1. 网上搜索说dialog需要一个div包裹

    <template>
      <div>
          <el-dialog
            v-model="dialogVisible"
            width="70%"
            top="5vh"
            append-to-body
            class="pdf-preview"
          >
            xxx
         </el-dialog>
     </div>
    <template>
    <style lang="scss" scoped>
    .pdf-preview {
      :deep() {
          padding: 0;
      }
     }
    </style>
    

    原因:使用scoped的时候,在 html 的标签中会生成data-v-xxx的一个属性,样式穿透就是利用的这个属性生成的css;

    而在 vue3 中,我们可以在template下不使用一个标签来包裹全部内容,而此时el-dialog在第一层的情况下就没有对应的data-v-xxx父级元素标签,所以样式穿透也就无效了.

    但是对于我们的案例还是不生效

    3.2. 使用全局样式去覆盖 - 生效

    <style lang="scss">
    // pdf-preview 是dialog新增的class类名
    .pdf-preview {
      .el-dialog__body {
        padding: 0;
      }
    }
    </style>
    

    原因:因为使用append-to-body属性,导致即使按照穿透的规则找了,但是Dialog元素脱离了当前文档结构,跑到Body标签下面去了,所以还是无效。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值