文档上写的是加上customClass,给弹窗加上类名。
但是在我的网页加载完成过后,我的弹框需要点击事件去弹出,此时类名是加上了,但是类中的样式并没有生效。
文档上写的是加上customClass,给弹窗加上类名。
但是在我的网页加载完成过后,我的弹框需要点击事件去弹出,此时类名是加上了,但是类中的样式并没有生效。
正好组内的小伙伴儿也遇到了这样的问题,使用jsx语法自定义一个msgbox,自定义msgbox自然需要自定义样式,然后就遇到了自定义customClass不生效的问题。
先分析下为什么不生效,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属性找到对应的元素实现局部样式控制的。所以不生效是必然的。
为什么加 /deep/不生效呢,不过是css样式上加上了属性选择器[data-v-xxxxxx] 本质上还是从vue组件的角度来实现的样式注入,前面分析过了 message-box 本身就不是一个vue组件,所以也是不能生效的。
解决办法:
scoped不生效,那么只能将样式放全局,在当前组件加上一段不带scoped的style,或者放到全局样式表中。
<style>
.custom-class {
}
</style>
可以用深度选择器 /deep/
这样处理不会污染其它组件
<style scoped>
.boxClass /deep/.el-button {
background:#ccc;
}
</style>
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
6 回答1.2k 阅读
如果给elementui的组件设置样式 有几点需要注意
<style scoped lang="less">
// 页面样式
.index {}
</style>
<style lang="less">
// 设置elementui样式
.index {
}
</style>
类名你就从chorme中找