element MessageBox组件 如何修改样式(字体大小等)

文档上写的是加上customClass,给弹窗加上类名。
但是在我的网页加载完成过后,我的弹框需要点击事件去弹出,此时类名是加上了,但是类中的样式并没有生效。

阅读 18.1k
4 个回答

如果给elementui的组件设置样式 有几点需要注意

  1. style标签不能有scoped, 否则不生效
  2. 谨慎在全局的css文件设置elementui的样式, 因为这样设置后会应用所有页面中的这个组件样式
  3. 建议在style下在加一层标签 如下:

<style scoped lang="less">
// 页面样式
.index {}
</style>

<style lang="less">
// 设置elementui样式
.index {

.messageBox {

}

}
</style>

类名你就从chorme中找

正好组内的小伙伴儿也遇到了这样的问题,使用jsx语法自定义一个msgbox,自定义msgbox自然需要自定义样式,然后就遇到了自定义customClass不生效的问题。
先分析下为什么不生效,this.$msgbox($alert等等),是通过element-ui的方法在body下渲染出来一个class="el-message-box__wrapper"的div。如果你看过源码就知道,这div根本就不是一个vue组件,只是使用js操作dom 生成的一些节点元素。

![message-box 节点渲染](/img/bVcIulT)

所以不具备vue组件的一些特性:如在渲染templage模板时,不会在节点上添加data-v-xxxxxx 之类的属性,而scoped 正是运用data-v-xxxxxx属性找到对应的元素实现局部样式控制的。所以不生效是必然的。
为什么加 /deep/不生效呢,不过是css样式上加上了属性选择器[data-v-xxxxxx] 本质上还是从vue组件的角度来实现的样式注入,前面分析过了 message-box 本身就不是一个vue组件,所以也是不能生效的。

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

<style>
    .custom-class {
        
    }
</style>

没有生效是因为权限不够吧 加!important试试

可以用深度选择器 /deep/
这样处理不会污染其它组件

<style scoped>
    .boxClass /deep/.el-button {
        background:#ccc;
    }
</style>
推荐问题