vue3使用ElementPlus的消息el-message样式不生效或者被遮盖(z-index)

问题1:el-message自定义样式不生效

想改弹出框的位置时不生效,使用了el-message的自定义类的custom-class属性也不行。原因应该是加了scoped后使用到里面样式的dom会添加data-v-xxxx这种属性防止css污染,但是message生成的dom是没有添加data-v-xxx属性的,所以样式无效。

解决方式:js动态设置(就是麻烦一点)
 this.$message({
          message:'登录失败',
          center:true,
          type:'error',
          duration:0
        });
        var el=document.querySelector('.el-message');
        if(el) el.style.cssText = 'margin-top: 60px;'

我用的vue3+TypeScript

ElMessage({
            showClose: true,
            message: '登录成功',
            type: 'success'
          })
          var el: any = document.querySelector('.el-message')
          if (el) el.style.cssText = 'margin-top: 60px;'
问题2:el-message被遮罩层挡住

在有半透明遮罩层的情况下触发message时其层级(z-index)在遮罩层之下

解决办法:在上面代码的基础上加z-index
ElMessage({
            showClose: true,
            message: '登录成功',
            type: 'success'
          })
          var el: any = document.querySelector('.el-message')
          if (el) {
            el.style.cssText = 'margin-top: 60px;'
            el.style.zIndex = 10000
          }

如果还是被遮罩层挡住很可能是父元素层级的问题,需要给父级加个z-index属性调整父元素层级,比如:

<div style="z-index: 1">
  <div style="z-index: 10">son</div>
</div>
<div style="z-index: 2"></div>

我的是A(父)组件包含了B(子)组件,给A的样式加了z-index小的值就可以了

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以按照以下步骤使用 Element Plus 封装 el-drawer 组件: 1. 安装 Element Plus 在项目中安装 Element Plus,可以使用 npm 或 yarn: ``` npm install element-plus --save ``` 或 ``` yarn add element-plus ``` 2. 创建 Drawer 组件 在 components 目录下创建 Drawer.vue 文件,定义 Drawer 组件的模板和样式: ```html <template> <el-drawer :visible="visible" :direction="direction" :size="size" :before-close="beforeClose" :close-on-click-modal="closeOnClickModal" :close-on-press-escape="closeOnPressEscape" :lock-scroll="lockScroll" :modal="modal" :custom-class="customClass" :with-header="withHeader" :with-footer="withFooter" :show-close="showClose" > <div class="drawer-body"> <slot></slot> </div> </el-drawer> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'Drawer', props: { visible: { type: Boolean, default: false, }, direction: { type: String, default: 'rtl', }, size: { type: String, default: '30%', }, beforeClose: Function, closeOnClickModal: { type: Boolean, default: true, }, closeOnPressEscape: { type: Boolean, default: true, }, lockScroll: { type: Boolean, default: true, }, modal: { type: Boolean, default: true, }, customClass: String, withHeader: { type: Boolean, default: true, }, withFooter: { type: Boolean, default: true, }, showClose: { type: Boolean, default: true, }, }, }); </script> <style> .drawer-body { padding: 20px; } </style> ``` 3. 注册 Drawer 组件 在 main.js 中注册 Drawer 组件: ```js import { createApp } from 'vue'; import ElementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; import App from './App.vue'; import Drawer from './components/Drawer.vue'; const app = createApp(App); app.use(ElementPlus); app.component('Drawer', Drawer); app.mount('#app'); ``` 4. 使用 Drawer 组件 在需要使用 Drawer 组件的页面中引入: ```html <template> <div> <el-button @click="openDrawer">打开 Drawer</el-button> <drawer :visible="visible" @update:visible="visible = $event"> <h3 slot="title">这是标题</h3> <p>这是内容</p> </drawer> </div> </template> <script> import { defineComponent, ref } from 'vue'; export default defineComponent({ name: 'App', components: { Drawer: () => import('./components/Drawer.vue'), }, setup() { const visible = ref(false); function openDrawer() { visible.value = true; } return { visible, openDrawer, }; }, }); </script> ``` 这样就可以使用 Element Plus 封装的 Drawer 组件了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值