shade参数仅支持false或[透明度, 颜色]数组格式才生效:shade: false完全禁用遮罩;shade: [0.2, '#ffffff']自定义浅白底;直接写shade: 0.5或shade: true会回退默认0.3黑色。
layer.open 的 shade 参数到底怎么传才生效
直接写 shade: 0.5 或 shade: true 是无效的——它只会回退到默认的 0.3 黑色遮罩。真正起作用的只有两种格式:shade: false(完全禁用)或 shade: [透明度, 颜色](自定义)。数组里两个值缺一不可,少一个就当没配。
-
shade: [0.2, '#ffffff']→ 浅白底,视觉上几乎不显,但底层仍不可点 -
shade: [0.6, 'rgba(0,0,0,0.4)']→ 合法,但没必要;颜色部分支持 rgba,但透明度已在第一个参数中控制,重复设置易混淆 -
shade: [0.0, '#000']→ 等效于shade: false,但 DOM 上仍会渲染遮罩层(只是全透明),可能影响 z-index 层叠
为什么改了 shade 还是黑色?检查这三点
常见现象:写了 shade: [0.1, '#f0f9ff'],结果弹出层外还是灰黑色。原因往往不是代码错,而是环境或调用方式不对:
- 用了老版本 Layui(layer.load() 支持 shade 数组,但
layer.open()对数组格式兼容不完整;确认你用的是layui-v2.9.1+或查文档「遮罩」章节是否明确列出数组支持 - 在错误函数里传参:比如对
layer.msg()或layer.alert()传shade,它们压根不接受该参数;只有layer.open()和layer.load()才认 - CSS 样式冲突:自定义 skin 类名时,如果里面重写了
.layui-layer-shade的 background,会覆盖你传的 shade 颜色;建议先清掉skin配置再测试
想控制“阴影范围”,其实是控制遮罩层尺寸
Layui 没有“阴影扩散半径”这种 CSS box-shadow 式的配置。所谓“范围”,实际由遮罩层 DOM 的宽高决定——它默认铺满整个视口(width: 100%; height: 100%)。若要缩小视觉范围,只能靠 JS 动态裁剪:
- 用
success回调拿到遮罩层 DOM:layero.siblings('.layui-layer-shade') - 手动设宽高和定位:
shadeEl.css({ width: '80%', height: '80%', left: '10%', top: '10%' }),但注意这会留下四周可点击区域 - 更稳妥的做法:设
shade: false,自己加一层<div class="my-shade"></div>,用 CSS 控制它的尺寸、圆角、模糊(backdrop-filter: blur(2px))和透明度
shadeClose 和透明度无关,但常被一起误解
shadeClose: true 只控制“是否允许点击遮罩关闭弹窗”,跟颜色、透明度完全解耦。哪怕你设了 shade: [0.01, 'transparent'],只要 shadeClose: true,点一下那几乎看不见的遮罩照样关窗。
容易忽略的一点:shadeClose 对 layer.load() 无效,只作用于 layer.open() 类型的弹层。如果你在 loading 层里想点空白关掉,得自己监听 document click 并调 layer.closeAll('loading')。


















