table单元格width较可靠而height常失效,因行高由最高单元格决定;正方形单元格需结合tr高度、line-height、vertical-align或aspect-ratio等综合实现。

table单元格的width和height不是对等控制的
HTML表格里,width 和 height 属性在 <td> 或 <code><th> 上表现不一致:前者通常能生效(尤其配合 <code>table-layout: fixed),后者却常被内容撑开、无视设定。这不是 bug,是表格渲染机制决定的——行高由行内最高单元格驱动,不是单个 height 能锁死的。
-
width在<td width="100"> 或 CSS <code>width: 100px下较可靠,尤其加了table { table-layout: fixed; } -
height写在<td height="100"> 是过时用法,现代浏览器基本忽略;CSS <code>height: 100px只在内容少、且父<tr> 没其他限制时“可能”生效 <li>真正能稳住单元格高度的是控制 <code><tr> 的 <code>height,或给<td> 加 <code>vertical-align: middle+line-height配合固定行高想让td变成正方形?别只设height
单纯给
<td> 同时设 <code>width: 80px和height: 80px很容易失败——文字换行、内边距、字体大小都会让实际高度突破 80px。正方形单元格本质是「宽高视觉一致」,得从布局逻辑入手。- 用
padding-bottom: 100%+position: relative做响应式正方形容器(需包裹一层<div>) <li>更直接:设 <code><tr>{ height: 80px; },再给 <code><td>{ height: 80px; line-height: 80px; vertical-align: middle; },并确保内容是单行内联元素 <li>如果内容是图标或图片,优先用 <code>img { display: block; width: 100%; height: 100%; object-fit: contain; } -
collapse下,边框合并,padding是唯一撑开内部空间的方式;width/height算的是含边框的总尺寸 -
separate下,每个单元格有独立边框和border-spacing,此时设width更容易“失准”,因为还要算上间隔 - 调试时先统一加
table { border-collapse: collapse; },避免边框干扰尺寸判断 - Grid 示例:
.grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; },每个子项设aspect-ratio: 1 / 1就是正方形 - Flex 示例:设
flex: 1+min-width+aspect-ratio,但需注意换行控制(flex-wrap) - 关键点:
aspect-ratio是目前最干净的正方形方案,IE 不支持,但 Chrome/Firefox/Edge 100% 可用
border-collapse影响单元格尺寸计算
当表格有边框时,
border-collapse: collapse和separate对单元格宽高的“归属感”完全不同——这直接影响你调尺寸时的参照系。flex或grid替代table做等宽高等距布局
如果目标只是「多个等尺寸格子排成网格」,硬套
<table> 反而增加复杂度。现代布局中,<code>display: grid或display: flex控制一致性更强、行为更可预测。立即学习“前端免费学习笔记(深入)”;
table-layout: fixed的表格,或者忘了line-height和height的关系。 - 用










