二次元绘画创作
56.21M · 2026-02-04
仓库源码:github.com/parade0393/…
在线演示:parade0393.github.io/table-layou…
table-layout 决定了浏览器如何计算列宽与单元格排版。核心只有两种取值:
auto:先看内容,再算列宽;内容越多、越长,越容易把列撑开。fixed:先定列宽,再排内容;内容超出时被截断/换行/省略,布局更稳定。| 维度 | auto | fixed |
|---|---|---|
| 列宽来源 | 内容驱动 | 结构/声明驱动(width/colgroup) |
| 首屏布局 | 慢(需测量内容) | 快(无需测量内容) |
| 宽度稳定性 | 易抖动 | 稳定 |
| 省略号表现 | 不稳定 | 稳定可控 |
| 适合场景 | 小表、内容驱动 | 大表、固定列、虚拟滚动 |
flowchart LR
A[读取表头/列宽声明] --> B{table-layout}
B -- auto --> C[测量内容宽度]
C --> D[计算列宽]
B -- fixed --> E[按声明/剩余空间分配]
E --> F[直接排版]
D --> F[排版]
table-layout: auto结论:“能用,但不稳定;能控,但不够准。”
fixed 基本效果fixed 只决定“列宽如何算”,不自动省略。white-space: normal),省略号要显式开启。fixed + 不设置列宽fixed + 只设置部分列宽在 fixed 下的直觉算法是:
fixed + 列宽总和大于容器overflow-x: auto。fixed + 列宽总和小于容器表格会把“剩余空间”补齐给未声明列或按浏览器算法分配,因此不同浏览器细节可能略有差异。
在 table-layout: fixed 下,列宽声明位置不同,浏览器对“宽度”的理解也不同,这是最容易踩坑的点之一。
col/colgroup 上的 widthborder-box:包含单元格的 padding/border 在内的最终宽度。th/td 上的 width当你需要“列宽强控制”时,优先用:
colgroup/col 作为列宽入口table-layout: fixed 作为布局策略这组合的表现最接近“所见即所得”,且可维护性更高。
结论
tableLayout 是 props,默认值为 fixed。maxHeight 时,内部会强制以 fixed 方式渲染表格布局。colgroup,而非内容测量。源码依据
tableLayout 默认值为 fixed:node_modules/element-plus/es/components/table/src/table/defaults.mjsmaxHeight 强制返回 fixed:node_modules/element-plus/es/components/table/src/table/style-helper.mjscolgroup 行为:auto 时给列设置 style.width;fixed 时用 name 进行列宽同步:node_modules/element-plus/es/components/table/src/h-helper.mjs工程含义
结论
tableLayout prop 优先级最高(显式传入即使用)。fixed:
fixed 列 + 横向滚动)scroll.y)sticky 启用ellipsisscroll.x === 'max-content' 时,会回落为 auto。源码依据
node_modules/ant-design-vue/es/vc-table/Table.js 的 mergedTableLayout。工程含义
auto,但在“固定列/固定表头/ellipsis/sticky”场景下自动转 fixed。tableLayout="fixed"。为什么这些条件会切换为 fixed
fixed 避免列宽因内容变化而抖动。scroll.y):表头与表体分离渲染,必须共享稳定列宽。sticky:同样是分离定位,需要稳定列宽避免错位。ellipsis:省略号依赖固定列宽,否则内容会撑开导致省略失效。结论
table-layout: fixed。tableLayout 相关 props 可覆盖该行为(当前依赖版本)。table-layout: fixed(非 print 场景)。源码依据
node_modules/vxe-table/es/vxe-table/style.cssnode_modules/vxe-table/es/table/module/export/util.js工程含义
| 方案 | 默认布局策略 | 自动切换为 fixed 的条件 | 备注 |
|---|---|---|---|
| Element Plus | fixed | maxHeight 等内部逻辑强制固定 | tableLayout prop 可显式改 |
| Ant Design Vue | auto | 固定列 / 固定表头 / sticky / ellipsis | tableLayout prop 优先级最高 |
| vxe-table | fixed | 默认固定(CSS 层) | 未发现可选 prop |
auto 更“顺手”,但不可控;fixed 更“工程化”,但更需要列宽策略。tableLayout 能避免“默认陷阱”。