table.resize()是唯一可靠方式,需手动监听父容器变化后调用,仅重算列宽和高度,不重载数据;height须为'full-xxx'或函数,width字段必须删除,仅用minWidth控制自适应。

table.resize() 是唯一可靠的方式
光靠设置 width: '100%' 或 height: 'full-100' 不起作用——Layui 表格不会自动感知父容器尺寸变化。必须手动监听容器变动,并调用 table.resize('id')。它只重算列宽和表格区域高度,不重载数据、不重置页码或选中状态,是轻量且安全的操作。
- 别用
table.reload():会清空当前页码、排序、选中项,还可能重复请求接口 - 别依赖
layui.resize():这是内部事件总线,table模块默认不监听,调了也白调 - 确保在
table.render()成功返回实例后才绑定监听,否则table.resize()找不到目标
监听父容器变化比监听 window.resize 更精准
当父容器是侧边栏折叠区、Tab 页签、layer 弹窗或可展开的筛选面板时,window.onresize 根本捕获不到变化。正确做法是监听具体容器的尺寸变更,比如用 MutationObserver 监听 class 切换(如 sidebar-collapsed),或在 Tab 切换、layer success 回调里主动触发:
- Tab 场景:在
element.on('tab(test)', function(){ table.resize('demo'); })中调用 - Layer 弹窗:在
layer.open({ success: function(){ setTimeout(() => table.resize('demo'), 16); } })中调用 - 侧边栏折叠:监听
$('.layui-layout-left').hasClass('layadmin-side-fold')变化后调用
height 自适应要避开 fixed 数值陷阱
table.resize() 对 height 的响应有明确限制:只有当 height 配置为字符串 'full-120' 或函数(返回数值)时,它才会根据新容器高度重算;若写成 height: 400 这类固定像素值,调用 resize() 完全无效。
- 推荐起步写法:
height: 'full-110',再用开发者工具量出顶部真实占用高度(导航栏 + 工具栏 + 筛选项) - 顶部高度不固定?必须改用函数:
height: function(){ return $('#container').outerHeight() - $('.toolbar').outerHeight(); } - 如果表格在 iframe 内,监听和 resize 都得在 iframe 内执行,父页面调无效
width 自适应的关键是删掉所有 width 配置
Layui 表格的 width 字段只接受数字,不支持百分比或 '100%'。一旦写了 width: 150,该列就锁死宽度,无法随容器伸缩。真正起作用的是列宽总和与容器宽度的相对关系,以及 minWidth 提供的下限保障。
- 删掉所有列的
width字段(包括width: null、width: '') - 每列只设
minWidth(数值型,如minWidth: 80),中文建议 ≥ 60,英文/数字 ≥ 30 - 含固定列(
fixed: 'left')时,该列必须同时设width和minWidth,且两值相等(如都为120)
最易被忽略的一点:表格首次渲染时,若父容器处于 display: none 状态(比如未激活的 Tab 页、隐藏弹窗),Layui 读到的容器宽高是 0,列宽直接崩坏。这不是 bug,是 DOM 渲染时机问题——必须在容器真正可见、尺寸稳定后,手动补一次 table.resize()。


















