解决elementui的el-dialog 对话框 屏幕放大缩小不变形问题

本文介绍如何在使用Vue与ElementUI时,使弹出框自适应不同屏幕尺寸,通过监听窗口大小变化调整对话框宽度,实现良好的响应式设计。

使用elementui的弹出框时,屏幕缩小会出现下图问题
(ps:该例子使用vue+elementui)
在这里插入图片描述
解决方法:监听屏幕变化:

  1. el-dialog 标签的width绑定变量dialogWidth,(在data中定义该变量,赋一个默认值,如:‘450px’)
<el-dialog title="新增临时单" :visible.sync="dialogVisible" :width="dialogWidth" :close-on-click-modal="false">
  1. 在mounted监听window.onresize事件
window.onresize = () => {
			    return (() => {
			      this.setDialogWidth()
			    })()
			  }
  1. setDialogWidth方法的定义
setDialogWidth() {
			    var val = document.body.clientWidth
			    const def = 450 // 默认宽度
			    if (val < def) {
			      this.dialogWidth = '100%'
			    } else {
			      this.dialogWidth = def + 'px'
			    }
			  },
Element UI 中,可以通过自定义样式或动态计算尺寸来实现 `el-dialog` 对话框的全屏效果。以下是几种实现方法: --- ### **方法 1:使用 `:fullscreen` 属性(Element UI 2.15.0+)** Element UI **2.15.0 及以上版本**原生支持全屏属性: ```html <template> <el-dialog :visible.sync="dialogVisible" fullscreen @close="handleClose"> <span>全屏对话框内容</span> </el-dialog> </template> <script> export default { data() { return { dialogVisible: false }; }, methods: { handleClose() { console.log("对话框关闭"); } } }; </script> ``` --- ### **方法 2:自定义样式覆盖** 如果版本较低或需要更灵活的控制,可以通过 CSS 强制全屏: ```html <template> <el-dialog :visible.sync="dialogVisible" :modal="false" custom-class="fullscreen-dialog" @close="handleClose"> <span>全屏对话框内容</span> </el-dialog> </template> <style> /* 关键样式 */ .fullscreen-dialog { position: fixed; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; width: 100% !important; height: 100vh !important; margin: 0 !important; } .fullscreen-dialog .el-dialog__header, .fullscreen-dialog .el-dialog__body { padding: 20px; /* 根据需求调整内边距 */ } </style> ``` --- ### **方法 3:动态计算尺寸(响应式全屏)** 通过 JavaScript 动态设置对话框的宽度和高度为视口尺寸: ```html <template> <el-dialog :visible.sync="dialogVisible" :width="dialogWidth" :top="dialogTop" :modal="false" @close="handleClose"> <span>动态全屏对话框</span> </el-dialog> </template> <script> export default { data() { return { dialogVisible: false, dialogWidth: '80%', dialogTop: '15vh' }; }, mounted() { window.addEventListener('resize', this.setDialogSize); }, beforeDestroy() { window.removeEventListener('resize', this.setDialogSize); }, methods: { setDialogSize() { this.dialogWidth = `${window.innerWidth}px`; this.dialogTop = '0px'; }, openDialog() { this.setDialogSize(); this.dialogVisible = true; } } }; </script> ``` --- ### **方法 4:结合 `el-dialog` 的 `append-to-body`** 避免父容器限制,将对话框挂载到 `body` 下: ```html <el-dialog :visible.sync="dialogVisible" append-to-body custom-class="fullscreen-dialog"> <!-- 内容 --> </el-dialog> ``` --- ### **注意事项** 1. **遮罩层**:全屏时通常需要关闭默认遮罩(`:modal="false"`)。 2. **滚动条**:全屏对话框内容过长时,确保 `.el-dialog__body` 设置 `overflow: auto`。 3. **ESC 键退出**:全屏后可能需手动处理键盘事件(如监听 `ESC` 关闭对话框)。 --- ### **完整示例(推荐)** ```html <template> <div> <el-button @click="dialogVisible = true">打开全屏对话框</el-button> <el-dialog :visible.sync="dialogVisible" fullscreen :modal="false" append-to-body @close="handleClose"> <div style="height: 100vh; overflow: auto;"> <h2>全屏内容</h2> <p>这里可以放置任意长内容...</p> </div> </el-dialog> </div> </template> <script> export default { data() { return { dialogVisible: false }; }, methods: { handleClose() { console.log("全屏对话框已关闭"); } } }; </script> ``` ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值