layui table 的 height 属性无法通过 setOptions 直接修改,需先修改容器 DOM 高度再调用 table.resize('id') 强制刷新;旧版需 destroy 后重建并手动恢复状态。

layui table 的 height 属性不能直接用 setOptions 修改
直接调用 table.setOptions({ height: 500 }) 不会生效——这是很多人卡住的第一步。因为 layui 的 table.render() 初始化后,height 是一次性写入 DOM 容器并参与布局计算的,后续不触发重渲染就不会更新容器高度或滚动逻辑。
正确做法:用 resize + reSize 方法强制刷新容器尺寸
layui 2.8+ 提供了 table.resize()(注意不是 reSize 拼写),它会重新测量表格容器、重置列宽、同步滚动条,并适配新高度。但前提是:你得先改 DOM 上的容器高度,再调用它。
- 确保你的表格容器(比如
<div id="demo"></div>)是显式设置了height或max-height的,否则resize()找不到参考基准 - 修改容器高度后立即调用
table.resize('yourTableId'),其中'yourTableId'是你 render 时传的id值(不是元素 ID,是配置里的id字段) - 如果用的是自动高度(
height: 'auto'),改为固定值后再 resize 才有效;'auto'本身无法被resize()动态“拉伸”
示例:
document.getElementById('demo').style.height = '400px';
table.resize('demoTable'); // 这里的 'demoTable' 是 render 时写的 id: 'demoTable'
响应式场景下避免频繁 resize 导致闪烁或错位
在窗口缩放或折叠侧边栏后调整表格高度时,直接监听 resize 并立刻调用 table.resize() 容易因触发太密而出现滚动条跳动、列宽错乱。建议加简单节流:
- 用
setTimeout+ 标志位防连续触发,延迟 150ms 再执行 resize - 不要在
table.on('tool(...)')里直接改 height —— 工具栏操作通常不改变容器尺寸,强行 resize 反而干扰渲染 - 若表格启用了
limit分页且数据量小,设过高 height 会导致空白区域过大;此时更推荐用page: false+height: 'full-xx'(如'full-120')配合父容器 flex 布局
兼容旧版(layui 2.6.x)需手动触发重绘
2.6.x 没有 table.resize(),只能靠「销毁重建」:先 table.destroy('id'),再用原配置重新 table.render()。但要注意——这会丢失当前页码、排序状态、选中行等,且 DOM 替换可能导致事件绑定失效。
- 必须保存原始配置对象(别用内联对象字面量),并在 destroy 后复用
- 重建前用
table.cache['id']获取当前数据,避免 reload 接口 - 重建后需手动恢复排序:
table.sort('id', 'field', 'asc')
真正麻烦的不是改高度,而是改完之后表格是否还“认得”自己原来的状态——这点很容易被忽略。


















