根本原因是 .layui-layer-content 的 overflow: auto 导致 iframe 内容被裁剪;应通过 skin 自定义类设 overflow: visible,同时确保 iframe 页面 body 无 overflow: hidden 且高度适配,并在内容变化后调用 layer.iframeAuto(index)。
layer.open(type: 2) 时 iframe 页面底部被遮挡,根本原因是 .layui-layer-content 的 overflow: auto
不是 z-index 不够,也不是 iframe 高度设小了——而是 layui 默认给 .layui-layer-content 加了 overflow: auto,一旦 iframe 内容超出弹层高度,就会被直接裁剪,底部元素(比如按钮、分页栏)就“消失”了。你拉滚动条也看不到,因为裁剪发生在容器层,不是内容溢出。
- 不要全局改
.layui-layer-content样式,会污染其他弹层 - 不要只调
z-index或给 iframe 加scrolling="yes",这两者都解决不了容器裁剪问题 - type: 2 弹层的 content 是 iframe,其父容器是
.layui-layer-content,这个容器才是裁剪源
用 skin 自定义类覆盖 overflow: visible
官方推荐且最安全的方式:通过 skin 参数隔离样式作用域,只对当前弹层生效。
- 在 CSS 中定义:
.iframe-fix-skin .layui-layer-content { overflow: visible !important; } - 调用
layer.open()时传入:skin: 'iframe-fix-skin' - 务必加
!important,因为 layui 会内联写overflow: auto,优先级更高
iframe 页面本身需支持滚动,且避免 body 被截断
光放开容器溢出还不够——如果 iframe 里页面的 body 或根节点设置了 overflow: hidden 或 height: 100%,内容仍可能被压扁或无法滚动。
- 检查 iframe 页面的
是否有class="layui-layout-body",它自带overflow: hidden,删掉或重置 - 确保 iframe 页面的
html和body高度不锁死,推荐:html, body { height: auto; min-height: 100%; } - 若 iframe 页面用了 Layui 的
layui-layout,需确认是否意外启用了layui-layout-auto导致高度计算异常
动态内容导致遮挡重现?监听 resize 并重设 iframe 高度
用户展开折叠面板、加载表格分页后,iframe 内容变高,但弹层不会自动撑开——这时又会出现底部被切。
- 在
success回调里,用setTimeout延迟 30ms 后调用layer.iframeAuto(index) - 更稳妥的做法:监听 iframe 的
load事件,在子页面 DOM 就绪后手动触发自适应:$(layero).find('iframe').on('load', () => layer.iframeAuto(index)) - 避免高频触发:对 resize 做防抖,只在窗口尺寸稳定后才重算
overflow,别忘了进 iframe 页面 inspect 一下 body 的实际 computed style。











