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; ?? ?}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
查看更多关于element-ui自定义message-box自定义样式不生效的解决的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did121223