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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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'
			    }
			  },
### 实现带有滚动条效果的 `el-dialog` 为了使 `el-dialog` 对话框中的内容能够正常显示并支持滚动,可以采用多种方法来处理这个问题。 #### 方法一:局部或全局设置样式 通过覆盖默认样式,在 `.el-dialog__body` 或者整个对话框上应用特定的高度和溢出属性。这种方式适用于只需要修改单个实例的情况: ```css .el-dialog { max-height: 80vh; } .el-dialog__body { height: calc(100% - 56px); /* 减去头部高度 */ overflow-y: auto; } ``` 这种方法简单易行,并且会影响其他地方使用的相同组件[^1]。 #### 方法二:调整 body 元素上的 class 类名行为 当弹窗开启时,框架会在 `<body>` 上添加一个名为 `el-popup-parent--hidden` 的 CSS 类,这可能会改变页面的整体布局,比如引入必要的水平滚动条等问题。可以通过重新定义该类的行为来解决问题: ```css .el-popup-parent--hidden { padding-right: 0 !important; overflow: hidden !important; } ``` 此解决方案解决了由于弹层引起的视觉问题,还保持了原有功能变[^2]。 #### 方法三:内部容器自定义滚动区域 如果希望仅让部分内容可滚动而是整个对话框,则可以在 `el-dialog` 内创建一个新的包裹元素 (如 `<div>`) 并为其指定固定大小以及 `overflow:auto`, 这样只有这部分会被卷动而会干扰到标题栏或其他部分的内容展示. ```html <template> <el-dialog :visible.sync="dialogVisible"> <!-- 头部 --> <span slot="title">Dialog Title</span> <!-- 可滚动体 --> <div style="max-height: 400px; overflow: auto;"> {{ longContent }} </div> <!-- 底部按钮区 --> <span slot="footer" class="dialog-footer"> <el-button @click="closeDialog()">Cancel</el-button> <el-button type="primary" @click="confirmAction()">Confirm</el-button> </span> </el-dialog> </template> ``` 上述代码片段展示了如何在一个 Vue 单文件组件中实现这一点。这里的关键在于设置了最大高度 (`max-height`) 和自动隐藏/显示垂直方向上的滚动条(`overflow: auto`). 当内容超过设定的最大高度时就会触发滚动机制[^4]. #### 配置项优化 对于想看到浏览器窗口随弹窗状态变化而产生的滚动条现象,还可以考虑禁用锁屏滚轮的功能,默认情况下 Element UI 是启用这项特性的。可以在项目入口处导入 ElementUI 后立即更改这一选项为 `false`. ```javascript import Vue from 'vue'; import ElementUI from 'element-ui'; Vue.use(ElementUI, { Dialog: { props: { lockScroll: { default: false, }, } } }); ``` 这样做之后,即使打开了多个模态框也会再有额外的滚动条出现了.
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值