表格制作九宫格需设置table-layout:fixed、col定义列宽、td设高度并配合border-collapse:collapse。此方法仅适合语义强、结构固定、兼容性要求高的场景,例如数独、表单模板。但灵活性差,现代响应式布局推荐使用grid方案,其支持网格自动排列与自适应调整,更适用于复杂多变的页面设计。
用表格做九宫格,听起来像是个老派但稳妥的方案——毕竟表格天生就是用来排格子嘛。可实操起来就会发现,这块“稳妥”只是表面现象。核心步骤确实简单:table-layout: fixed、用 col 定义列宽、给 td 设高度并配合 border-collapse: collapse。但问题是,浏览器对表格的默认行为和你想象的可能完全不同,稍不留神,格子就会撑歪、对不齐,更别提响应式了。一句话总结:表格能做九宫格,但只适合语义强、结构固定、兼容性要求极高的场合(比如数独、表单模板),现代响应式场景请绕道,grid 才是正解。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
浏览器默认会根据单元格内容撑开 td 的宽高,你写的百分比宽度多数情况下会被无视。没设 border-collapse: collapse,单元格之间会有双倍边框间隙,看着特别别扭。更头疼的是,不同浏览器对 table 的 width/height 解析方式差异很大,尤其在 IE 和旧版 Safari 上,同一个百分比可能呈现三种效果。
td 上写 width="33.33%" → 多数浏览器直接忽略,只认 table 或 col 上的设置。td 加上 style="width: 33.33%" → Chrome 可能乖乖听话,Firefox 可能会重新计算,Safari 则倾向于按内容优先。table-layout: fixed → 列宽全由内容决定,你写的百分比不过是摆设。要稳定实现 3×3 正方形格子,得走三步:固定布局 + 显式列宽 + 单元格尺寸约束。下面这段代码在 Chrome、Firefox、Safari、Edge 以及 IE11 上都能稳定呈现,前提是严格按照规则来:
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
table-layout: fixed 是绝对前提——没有它,col 的宽度就形同虚设。col 标签设列宽(千万别直接写在 td 上),三列总和必须 ≈ 100%,最后一列补上小数误差(比如 33.33% + 33.33% + 33.34%)。tr 不设高度,但每个 td 必须用 height 属性(推荐 vh 或固定 px,禁用百分比——百分比在 td 中大多数浏览器不解析为父 tr 高的百分比)。border-collapse: collapse 用来消除默认的 2px 间距,否则格子之间会留白,九宫格直接变八格。表格天生不支持 minmax()、auto-fit 或 flex 的响应逻辑。想做响应式九宫格?只有两条路可以妥协,但都不完美:
@media (max-width: 768px) 把 table 改成 display: block,再用 div 模拟格子——这已经脱离了表格的本质,等于换了一套布局方案。window.resize,计算容器宽高后重设 col 宽度和 td 高度——性能差、易抖动,移动端 touch 事件还可能失准。col),高度随内容自适应——严格来说已经不算九宫格,更像一个“三列列表”。真正需要响应式九宫格时,display: grid 的 repeat(auto-fit, minmax(250px, 1fr)) 是目前唯一兼顾语义、性能与行为一致性的方案。表格的正确归宿,还是数独、报表导出、邮件模板这些不可替代的场景。别把力气花在和浏览器的默认行为较劲上。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述