真正全屏需同时设置area: ['100vw', '100vh']、shade: false、closebtn: 0、title: false、offset: '0px'且maxmin: true,并在success回调中调用layer.full(index)并节流监听resize。

直接设 area: ['100%', '100%'] 是最常见却最不可靠的写法——它只拉伸容器,遮罩还在、标题栏还在、右上角按钮还在,用户点不到内容,也谈不上“全屏”。
layer.open 全屏必须配齐这五个参数
真正视觉+交互双全屏,缺一不可:
-
area: ['100vw', '100vh']:用视口单位而非百分比,避免父容器尺寸不明确导致高度塌陷 -
shade: false:必须显式关闭遮罩,否则灰色层盖住整个屏幕且无法穿透点击 -
closeBtn: 0:唯一干净方案,从 DOM 源头不渲染关闭按钮;别用 CSSdisplay: none或 jQuery.hide(),渲染时机错位会失效 -
title: false和offset: '0px'配合使用,确保顶部不留白;如需标题,应内嵌到content中 -
maxmin: true:启用最大化按钮,这是调用layer.full()的前提,否则静默失败
为什么必须在 success 回调里调 layer.full(index)
layer.full(index) 不是同步命令,它依赖弹层 DOM 已插入、样式已计算、浏览器重排完成。尤其在 iOS Safari 或 WebView 中,DOM 就绪延迟更明显:
- 同步调用(比如
layer.open()返回后立刻layer.full())大概率失败,index对应元素还没 ready -
success回调是 layui 唯一保证 DOM 就绪的钩子,必须放在这里 - 若
type: 2(iframe),success触发时 iframe 内容往往未加载完,建议加setTimeout(() => layer.full(index), 100) - 调用
layer.full(index)后,务必再确认一次shade: false是否生效,否则遮罩仍会覆盖
移动端旋转/缩放后弹窗错位怎么办
Layui 不监听 resize 事件做响应式重排,这是全屏弹窗在移动端最常被忽略的坑。横竖屏切换、地址栏收起、双指缩放都会导致溢出或留白:
- 仅对移动端绑定
window.addEventListener('resize', handler),PC 端无需监听(避免干扰拖拽) - 用
setTimeout+clearTimeout实现节流,延迟 150ms 再执行layer.full(index),防止高频抖动 - 退出全屏(如调
layer.restore(index)或关闭)时,必须主动removeEventListener,否则旧index失效还会触发错误 - 检测设备优先用
window.matchMedia('(max-width: 768px)'),比 UA 字符串更稳定可靠
最容易被忽略的是:全屏后内容区域虽满屏,但若子页面是 type: 2(iframe),其内部 html 和 body 高度默认不占满,必须在 iframe 子页 CSS 中手动设 html, body { height: 100%; margin: 0; },否则底部永远留白。











