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

HTML <table> 的 <code>cellspacing 和 cellpadding 是两个极易混淆、但作用完全不同的旧属性,它们在 HTML5 中已被废弃,**浏览器仍支持,但不应再用于新项目**。
cellspacing 控制的是单元格“外边距”
cellspacing 指的是相邻单元格(<td> 或 <code><th>)边框之间的距离,也就是“格子与格子之间的空隙”。它作用于整个表格,不是单个单元格。
<ul>
<li>默认值为 <code>2(像素),所以不设时总能看到微小缝隙
0 后,若同时设 border-collapse: collapse,才能真正实现无缝网格;仅靠 cellspacing="0" 在某些渲染模式下仍可能残留 1px 间隙border-spacing: 0(需配合 border-collapse: separate)或直接用 border-collapse: collapse
<td cellspacing="5"> —— <code>cellspacing 只能出现在 <table> 标签上,加在 <code><td> 上无效
<h3>cellpadding 控制的是单元格“内边距”</h3>
<p><code>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> 常需更大内边距,而 <code>cellpadding对<th> 和 <code><td> 一视同仁 <li>响应式场景下,<code>cellpadding="10"在小屏上会撑破容器,而 CSS 的padding: 0.5rem可随rem缩放 - 使用
border-collapse: collapse后,cellspacing完全失效,此时只能靠 CSS 控制边框合并行为 - 混用
cellspacing和border-collapse: collapse:前者会被忽略,但开发者可能误以为“没生效是代码错了”,反复调试 - 把
cellpadding当成margin用:比如想让某列内容右偏移,错误地给整列加cellpadding,结果所有行都变宽 - 在
<table> 上设了 <code>cellpadding="5",又在 CSS 里写了td { padding: 10px }—— 实际生效的是后者,但容易误判样式来源 - 用 JS 动态修改
table.cellPadding属性(如table.cellPadding = "8")时,值必须是字符串,传数字会失败
兼容旧代码时的典型陷阱
维护老系统时,容易忽略这些细节:
真正要动手改,优先替换为 border-spacing 和 padding;如果只是快速修复显示问题,记住:间隙大 → 查 cellspacing 或 border-spacing;内容贴边 → 查 cellpadding 或 td, th 的 padding。两者从不交叉影响,但共存时 CSS 一定赢。











