HTML5已废弃table的cellspacing(控制单元格外边距)和cellpadding(控制单元格内边距),应改用CSS的border-spacing和padding属性替代。

HTML <table> 的 cellspacing 和 cellpadding 是两个极易混淆、但作用完全不同的旧属性,它们在 HTML5 中已被废弃,**浏览器仍支持,但不应再用于新项目**。
cellspacing 控制的是单元格“外边距”
cellspacing 指的是相邻单元格(<td> 或 <th>)边框之间的距离,也就是“格子与格子之间的空隙”。它作用于整个表格,不是单个单元格。
- 默认值为
2(像素),所以不设时总能看到微小缝隙 - 设为
0后,若同时设border-collapse: collapse,才能真正实现无缝网格;仅靠cellspacing="0"在某些渲染模式下仍可能残留 1px 间隙 - HTML5 已移除该属性,等价的 CSS 是
border-spacing: 0(需配合border-collapse: separate)或直接用border-collapse: collapse - 错误写法:
<td cellspacing="5">——cellspacing只能出现在<table>标签上,加在<td>上无效
cellpadding 控制的是单元格“内边距”
cellpadding 指的是单元格内容(文字、图片等)到其自身边框的距离,即“格子内部留白”。它也作用于整张表,所有单元格统一生效。
- 默认值通常为
1或2(取决于浏览器),所以不设时内容会紧贴边框 - 设为
0后,文字会直接顶到单元格边界,常用于图标对齐或紧凑布局 - 等价 CSS 是
td, th { padding: Xpx },且可单独控制上下左右(如padding: 4px 8px),比cellpadding灵活得多 - 注意:即使某列内容高度不同,
cellpadding仍会应用到整行最高单元格的上下两侧,不会导致行高塌陷
为什么现在必须用 CSS 替代这两个属性
根本原因不是“过时”,而是它们无法满足现代布局需求:
-
cellspacing只能设一个值,无法实现“横向间距 8px、纵向间距 4px”这种差异化控制;border-spacing支持两个参数:border-spacing: 8px 4px -
cellpadding无法按单元格类型区分设置 —— 表头<th>常需更大内边距,而cellpadding对<th>和<td>一视同仁 - 响应式场景下,
cellpadding="10"在小屏上会撑破容器,而 CSS 的padding: 0.5rem可随rem缩放 - 使用
border-collapse: collapse后,cellspacing完全失效,此时只能靠 CSS 控制边框合并行为
兼容旧代码时的典型陷阱
维护老系统时,容易忽略这些细节:
- 混用
cellspacing和border-collapse: collapse:前者会被忽略,但开发者可能误以为“没生效是代码错了”,反复调试 - 把
cellpadding当成margin用:比如想让某列内容右偏移,错误地给整列加cellpadding,结果所有行都变宽 - 在
<table>上设了cellpadding="5",又在 CSS 里写了td { padding: 10px }—— 实际生效的是后者,但容易误判样式来源 - 用 JS 动态修改
table.cellPadding属性(如table.cellPadding = "8")时,值必须是字符串,传数字会失败
真正要动手改,优先替换为 border-spacing 和 padding;如果只是快速修复显示问题,记住:间隙大 → 查 cellspacing 或 border-spacing;内容贴边 → 查 cellpadding 或 td, th 的 padding。两者从不交叉影响,但共存时 CSS 一定赢。

















