layer.open 的 area 参数应使用百分比(如['90%', 'auto'])而非固定像素,必须设置 fixed: true 以防止滚动偏移,shadeClose: true 和 anim: 'up' 更符合移动端交互习惯,且移动端项目须仅引入 mobile 版 layer 文件。
layer.open 的 area 参数必须用百分比
移动端屏幕宽度不固定,area 传固定像素(如 ['400px', '300px'])会导致在小屏上溢出、大屏上留白。正确做法是宽度用百分比,高度用 'auto' 或百分比:
-
area: ['90%', 'auto']:最常用,内容撑开高度,左右留 5% 边距 -
area: ['100%', '80%']:全宽、占视口 80% 高度,适合表单类弹层 - 避免写成
area: ['100px', 'auto']—— 这在 iPhone SE 上会窄得只剩一列文字
fixed: true 是移动端的保底配置
不设 fixed: true 时,layer 默认用 position: absolute,滚动页面后弹层会随文档流偏移,尤其在 iOS Safari 中极易错位。这个参数不是可选,是必填:
-
fixed: true强制使用position: fixed,绑定视口而非文档流 - 配合
top: '100px'可微调垂直起始位置(注意单位是 px,不是 %) - 若业务要求弹层随滚动,那说明你其实不该用 layer,该用 inline 模块或 modal 组件
shadeClose 和 anim 要按触控习惯配
移动端没有鼠标悬停,点击遮罩关闭和上滑入场更符合直觉:
-
shadeClose: true必开——用户点空白处即关闭,比找 × 图标快得多 -
anim: 'up'比'scale'更自然,尤其在竖屏手机上;'none'适合纯提示类弹层(如layer.msg) - 慎用
anim: 'down'或'left':反直觉,iOS 用户会下意识往上划
别混用 PC 版和 mobile 版 layer
项目里同时引入 src/layer.js 和 src/mobile/layer.js 会导致冲突,layer 实例方法行为不一致,比如 layer.closeAll() 可能漏关某些弹层:
- 移动端项目只引
src/mobile/layer.js+src/mobile/layer.css - 确保没在其他地方通过
layui.use('layer', ...)加载 PC 版模块 - 检查控制台是否报
Uncaught TypeError: Cannot read property 'open' of undefined—— 很可能是模块加载错乱
area 写死像素,弹层本身就会卡在错误位置。这点容易被忽略,但改起来就一行代码。











