layui table 的 loading 遮罩透明度需通过覆盖 .layui-layer-loading 的 background CSS 实现,因其 base64 背景图已内置半透明白色,仅支持修改 #rrggbbaa 格式颜色值或降级用 rgba() 加 !important。
layui table 的 loading 遮罩层透明度在哪改
不能直接设透明度。layui 的表格加载遮罩是用 layer.msg 模拟的,底层调用的是 layer.load(),而它默认渲染的 dom 没暴露 opacity 控制入口。
真正起作用的是 layer 自带的 CSS 类 layui-layer-loading 里的 background 色值——它把半透明白色和 loading 图标合成在一张 base64 图里了。
- 修改方式只有覆盖 CSS:重写
.layui-layer-loading的background - 不要动
layer.load(1)的 type 参数,type=1/2/3 对应不同图标,但都不影响透明度 - 别试图在
table.render()的done或init回调里操作 DOM,遮罩在data请求发出前就挂上了,时机不对
如何安全覆盖 layer 加载层背景色(含透明度)
必须等 layer CSS 加载完成后再注入样式,否则会被覆盖。推荐在 layui.use(['table', 'layer'], ...) 回调内执行:
layui.use(['table', 'layer'], function(){
var table = layui.table;
// 确保 layer 样式已就绪
setTimeout(function(){
var style = document.createElement('style');
style.innerHTML = '.layui-layer-loading{background:#0000001a url("data:image/svg+xml,%3Csvg...") no-repeat 50% 50%!important;}';
document.head.appendChild(style);
}, 0);
<p>table.render({/<em> your config </em>/});
});注意:#0000001a 是带 alpha 的十六进制(1a ≈ 10% 不透明),不是 rgba()——layer 的 background 是单个声明,用 rgba 会破坏 base64 图片拼接。
- base64 图片部分建议保留原样,只换前面的 color 值
- 如果用 webpack/vite,把这段 style 写进全局 CSS 更稳妥,加
:not(.layui-layer-iframe) .layui-layer-loading提高优先级 - 移动端需额外测试,某些安卓 WebView 对 #rrggbbaa 支持不一致
为什么不用 loading: false + 手动控制遮罩
可以,但没必要复杂化。禁用内置 loading 后你得自己监听 beforeSend 和 done,还要处理异常中断、重复点击、节流等问题。
-
loading: false只关掉 layer 遮罩,不影响请求本身 - 手动加遮罩要操作
table.elem.next('.layui-table-box')的父容器,容易错位 - 如果用了
page: true,翻页时还得重新绑定,table.on('page(...)事件里补逻辑 - 性能上没优势,反而多一次 DOM 查找和样式切换
兼容性与调试要点
Layui 2.8+ 的 layer 已支持 CSS 变量,但未暴露 opacity;旧版(如 2.5.6)连 #rrggbbaa 都不认,得降级用 rgba(0,0,0,0.1) + !important 强制。
- 检查浏览器控制台 Elements 面板,确认最终生效的
.layui-layer-loading样式是否被覆盖 - 遮罩消失延迟?不是透明度问题,是
done回调里数据解析太慢,跟 CSS 无关 - 如果表格用了
skin: 'line'或'nob',遮罩位置可能偏移,需同步调整 background-position
真正卡住人的往往不是怎么改,而是改完发现没生效——八成是 CSS 优先级或加载时机问题,盯住 computed styles 里 background 的最终值。


















