Layui 表格空数据占位图需通过 .layui-table-empty 类定制:CSS 方式用 background-image 替换整体,或 .layui-table-empty svg { display: none; } 隐藏 SVG 后加自定义内容;更灵活则用 done 回调动态替换 HTML,同时清除内联样式干扰。
修改 layui.table 空数据占位图的 CSS 类名
layui 的表格在 data.length === 0 时会自动渲染一个默认的「暂无数据」图标区域,它用的是内置的 svg + 文字组合,但实际 dom 中包裹它的容器有固定类名:.layui-table-empty。这个类就是你唯一需要动的地方。
常见错误是试图覆盖 .layui-table td 或改 tbody,结果无效——因为空状态是独立插入的 DOM 节点,不在表格数据行结构里。
- 直接给
.layui-table-empty设置background-image,就能替换整块背景(含图标和文字) - 如果只想换图标、保留文字,需用
.layui-table-empty .layui-icon重置伪元素内容(Layui 用的是字体图标) - 注意优先级:Layui 的 CSS 是内联 style 注入的,所以你的自定义样式必须加
!important,或确保样式表加载在 Layui CSS 之后
用 done 回调动态插入自定义空态 HTML
当 CSS 覆盖不够灵活(比如要加按钮、链接、不同尺寸图),更稳妥的方式是在表格初始化完成后再手动替换空容器内容。Layui 表格提供了 done 回调,此时 DOM 已就绪,且能准确判断是否为空:
-
done(res, curr, count)中,若count === 0,说明当前页无数据 - 查找到
.layui-table-empty元素,用innerHTML替换为你的 HTML(支持图片<img src="...">、SVG 或任意结构) - 别忘了清除原有内联样式(如
style="padding: 40px 0;"),否则可能撑高容器
示例片段:
done: function(res, curr, count){
if(count === 0){
var emptyEl = document.querySelector('.layui-table-empty');
if(emptyEl){
emptyEl.innerHTML = '<div style="text-align:center">
<img src="/imgs/no-data.png" style="max-width:90%"><p style="margin-top:12px;color:#999">暂无业务数据</p>
</div>';
}
}
}
避免 text: '暂无数据' 配置项干扰自定义样式
很多人在 cols 或 page 配置里看到 text: {none: 'xxx'} 就以为能控制空图——其实这个只改文字,不碰图标、不改容器结构,对样式毫无影响。
更隐蔽的问题是:如果你在 table.render() 中写了 text: {none: '暂无数据'},Layui 会强制给 .layui-table-empty 加一个内联 style,比如 padding: 40px 0,这会破坏你精心写的居中布局。
- 想彻底摆脱干扰?删掉所有
text相关配置项,完全靠 CSS 或done控制 - 如果必须保留文字配置,记得在你的 CSS 里重置
.layui-table-empty的padding和line-height - 不要指望
text.none支持 HTML 字符串,它会被转义,无法插入<img>
兼容性注意:Layui 2.8+ 的 SVG 占位图结构变化
2.8 版本起,Layui 把原来用字体图标()的空状态,换成了内联 SVG。DOM 结构从 <i class="layui-icon"></i> 变成 <svg>...</svg>,这意味着:
- 老写法
.layui-table-empty .layui-icon::before { content: "..." !important; }彻底失效 - 想隐藏原生 SVG,得用
.layui-table-empty svg { display: none; },再叠加你的图片 - 如果你用的是 CDN 引入的 Layui,务必确认版本号,
layui.v2.js和layui.js的行为可能不一致
最省事的做法:不纠结 SVG,直接用 done 回调整个替换,一劳永逸。
空状态样式看似简单,但跨版本、跨加载时机、跨 CSS 优先级,三者一搅和,很容易改了又回退。动手前先 console.log(document.querySelector('.layui-table-empty')) 看一眼真实结构,比硬猜靠谱得多。










