不合适。<table>语义是展示二维数据,非布局工具;强行用于九宫格会导致结构僵硬、响应式差、可访问性弱,现代项目应优先使用CSS Grid或Flexbox实现。

用 <table> 做九宫格,真的合适吗
不推荐。HTML 表格语义是展示二维数据(如成绩单、价格表),不是做页面布局的工具。强行用 <table> 实现九宫格,会导致结构僵硬、响应式困难、可访问性差,且现代 CSS(grid 或 flex)几行代码就能搞定。
<table> 九宫格的最小可行写法
如果必须用表格(比如老系统兼容、邮件模板限制),核心就是 3 行 × 3 列,所有 <td> 宽高需显式控制,否则会塌缩或拉伸不均:
<table style="width: 300px; height: 300px; table-layout: fixed;">
<tr>
<td style="width: 33.33%; height: 33.33%; border: 1px solid #ccc;">1</td>
<td style="width: 33.33%; height: 33.33%; border: 1px solid #ccc;">2</td>
<td style="width: 33.33%; height: 33.33%; border: 1px solid #ccc;">3</td>
</tr>
<tr>
<td style="width: 33.33%; height: 33.33%; border: 1px solid #ccc;">4</td>
<td style="width: 33.33%; height: 33.33%; border: 1px solid #ccc;">5</td>
<td style="width: 33.33%; height: 33.33%; border: 1px solid #ccc;">6</td>
</tr>
<tr>
<td style="width: 33.33%; height: 33.33%; border: 1px solid #ccc;">7</td>
<td style="width: 33.33%; height: 33.33%; border: 1px solid #ccc;">8</td>
<td style="width: 33.33%; height: 33.33%; border: 1px solid #ccc;">9</td>
</tr>
</table>
-
table-layout: fixed是关键:防止内容撑开单元格,确保等分 - 所有
<td>必须设width和height,仅靠colspan/rowspan无法保证正方形网格 - 不要依赖
<col>或<colgroup>控制高度——它们只影响宽度 - 移动端下,固定像素宽高会直接失效,没有媒体查询兜底就必然错位
替代方案:用 display: grid 真正解决问题
九宫格本质是 3×3 网格布局,CSS Grid 天然匹配:
<div class="grid-3x3">
<div>1</div><div>2</div><div>3</div>
<div>4</div><div>5</div><div>6</div>
<div>7</div><div>8</div><div>9</div>
</div>
<style>
.grid-3x3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
width: 300px; height: 300px;
}
.grid-3x3 > div {
border: 1px solid #ccc;
}
</style>
- 自动等分,无需计算百分比或像素值
- 支持
aspect-ratio: 1让每个格子保持正方形(即使容器宽高不等) - 响应式只需改容器宽高或用
minmax()+auto-fit - 语义清晰:
<div>是容器/项目,不是表格数据
容易被忽略的细节
哪怕你坚持用 <table>,以下三点常被跳过,导致在 Safari、Outlook 或屏幕阅读器中出问题:
立即学习“前端免费学习笔记(深入)”;
- 缺失
role="presentation":会让屏幕阅读器误读为数据表,加在<table>上可关闭语义 - 没设
border-collapse: collapse:默认separate会让边框间距不可控 - 单元格内内容未限制溢出:
overflow: hidden和text-overflow: ellipsis得手动加,否则长文本破坏网格
真正要做的不是“怎么用表格画九宫格”,而是判断场景是否真需要表格——大多数时候,答案是否定的。



















