layui表格高度需用"full-n"字符串配置,n为视口减去固定区域高度的像素值;必须手动绑定window.resize并调用tableins.resize(),全屏时还需监听fullscreenchange事件延迟16ms触发resize以确保重绘。
height 配置用 "full-n" 字符串,不是 "auto" 或数字
传 "auto" 会被 layui 忽略,回退到默认约 300px;填固定数字(如 500)则无法响应窗口变化。真正起效的自适应写法是字符串 "full-110" 这类格式,其中 110 表示从视口高度中减去的像素值(通常是顶部导航、搜索栏、分页栏等固定区域总高)。
常见错误是凭感觉写 "full-100",但实际页面结构变后(比如加了折叠面板、多行筛选项),这个值就偏了——结果要么底部留白过大,要么表格内容被截断。
- 推荐先用浏览器开发者工具量出真实占用高度,再填入
- 若顶部区块高度不固定(如侧边栏可收起),必须改用函数式
height: function(){...},且内部要用$('#search-bar').outerHeight()动态取值,别硬写魔法数字 -
"full-0"理论上占满整个视口,但要注意表格自身有内边距和边框,实际可能溢出
table.resize() 不是可选操作,而是必调动作
光设了 height: "full-110" 不够。Layui 不会自动监听 window.resize,你得自己绑定并手动触发 table.resize(),否则用户拖拽浏览器边框后,表格高度完全不会更新。
关键点在于:必须先保存渲染实例,再监听事件:
var tableIns = table.render({<br> elem: '#test',<br> height: 'full-110',<br> // ...其他配置<br>});<br><br>$(window).on('resize', function() {<br> tableIns.resize();<br>});
- 如果表格在
layui-layer弹窗或iframe中,监听对象要换成$(parent.window) - 2.9.1+ 版本才完整支持函数式
height的自动响应;旧版(如 2.8)需在resize回调里调用table.reload()并传新height值 - 别漏掉初始化执行一次:
$(window).trigger('resize')或直接调用tableIns.resize()
全屏切换后表格错位?本质是 resize 没跟上 DOM 重排
调用 layui.fullscreen.toggle() 进入全屏后,视口尺寸突变,但 layui.table 不会自动重绘——尤其带 fixed: true 列或自定义 cellMinWidth 的场景,常出现列宽错乱、内容截断。
核心修复动作是:在 fullscreenchange 全局事件中,延迟 16ms 再触发 table.resize():
document.addEventListener('fullscreenchange', function() {<br> setTimeout(function() {<br> tableIns.resize();<br> // 有固定列时补这一句,强制重新计算滚动宽度<br> table.getScrollWidth();<br> }, 16);<br>});
- 不要用
table.reload()替代resize(),它会重新请求数据,体验卡顿 - 某些老项目 CSS 强制设了
.layui-table { width: 1200px !important },全屏时必须用max-width: 100vw覆盖,否则宽度撑不开 - 退出全屏后若列宽异常,大概率是没监听
fullscreenchange或延迟太短,DOM 还没完成重排就调了resize()
maxHeight 和 height 同时存在时的行为
maxHeight 是 2.8+ 新增属性,作用是限制表格容器最大高度,超出部分显示滚动条。它和 height 可共存,但逻辑是:当 height 计算结果超过 maxHeight 时,以 maxHeight 为准。
典型用法是防止数据暴增导致表格撑爆页面:
table.render({<br> elem: '#test',<br> height: 'full-110',<br> maxHeight: 600,<br> // ...<br>});
-
maxHeight只控制容器高度,不影响分页逻辑;分页仍由page和limit控制 - 若同时设了
height: 400和maxHeight: 300,表格最终高度是 300px(因为 400 > 300) - 移动端或折叠侧边栏时,
maxHeight不会自动调整,仍需靠resize或reload重算
实际项目里最易忽略的是:fullscreenchange 事件监听必须全局注册,且延迟 16ms 不是可选项——它是让浏览器完成 layout 后再触发表格重绘的最小安全时机。 少了这一步,哪怕 height 配对了、resize 也绑了,全屏后照样错位。











