当前位置 : 主页 > 网络编程 > JavaScript >

element-ui自定义message-box自定义样式不生效的解决

来源:互联网 收集:自由互联 发布时间:2023-02-08
目录 element-ui自定义message-box自定义样式不生效 背景 先分析下不生效的原因 解决方法 element-ui修改样式不生效,最简单的解决 element-ui自定义message-box自定义样式不生效 背景 这是小伙伴今
目录
  • element-ui自定义message-box自定义样式不生效
    • 背景
    • 先分析下不生效的原因
    • 解决方法
  • element-ui修改样式不生效,最简单的解决

    element-ui自定义message-box自定义样式不生效

    背景

    这是小伙伴今天在开发中遇到的问题,使用jsx语法自定义一个msgbox,自定义msgbox自然需要自定义样式,然后就遇到了自定义customClass不生效的问题。

    下面上jsx的一个写法

    this.$msgbox({
            title: '确认',
            message: h('div', {
              style: 'text-align: center'
            }, [
              h('p', { class: 'content-title' }, '请确认是否为XX'),
              h('div', { class: 'content-message' }, 'XXXXXX'),
              h('div', { class: 'content-message' }, 'XXXXXXXXXXXXXXXXXXXXXXXXX')
            ]),
            customClass: 'return-visit-message-box',
            showCancelButton: true,
            confirmButtonText: '是',
            cancelButtonText: '否',
          }).then(() => {
            this.checkPrescriptionType()
          }).catch(() => {
            this.$message.info('XXXXXXXXXXXXXX')
          })

    先分析下不生效的原因

    1、this.$msgbox($alert等等),是通过element-ui的方法在body下渲染出来一个class="el-message-box__wrapper"的div。如果你看过源码就知道,这div根本就不是一个vue组件,只是使用js操作dom 生成的一些节点元素。所以不具备vue组件的一些特性:如在渲染templage模板时,不会在节点上添加data-v-xxxxxx 之类的属性,而scoped 正是运用data-v-xxxxxx属性找到对应的元素实现局部样式控制的。所以不生效是必然的。

    2、/deep/不生效,deep 不过是css样式上加上了属性选择器[data-v-xxxxxx] 本质上还是从vue组件的角度来实现的样式注入,前面分析过了 message-box 本身就不是一个vue组件,所以也是不能生效的。

    解决方法

    1、scoped不生效,那么只能将样式放全局,在当前组件加上一段不带scoped的style,或者放到全局样式表中。

    <style>
    .el-message-box.return-visit-message-box {
      width: 355px;
      padding-bottom: 0;
      .el-message-box__header {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding-top: 10px;
        background: rgba(241,243,245,1);
        .el-message-box__title {
          font-size:16px;
          font-weight:500;
          color:rgba(51,51,51,1);
        }
        .el-message-box__headerbtn {
          position: unset;
        }
      }
      .el-message-box__content {
        padding-top: 20px;
        .content-title {
          font-size:16px;
          font-weight:500;
          color:rgba(51,51,51,1);
          line-height:22px;
          margin-bottom: 16px;
        }
        .content-message {
          font-size: 12px;
          font-weight: 400;
          color: #666666;
          line-height: 17px;
        }
      }
      .el-message-box__btns {
        padding: 20px 20px 20px;
        .el-button {
          padding: 9px 27px;
        }
      }
    }
    </style>

    element-ui修改样式不生效,最简单的解决

    参考网上的去掉style中的scoped作用域那样确实生效,但是会影响其他组件的样式。

    我们直接在该类名前添加::v-deep就可以,赶紧去试试看吧,超实用!

        // 在类名前添加 ::v-deep 方法和属性后的 !important
        ::v-deep .el-input__prefix {
              left: 71px !important;
              transition: all 0.3s;
        }
    

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。

    上一篇:React实现表格选取
    下一篇:没有了
    网友评论