cellSpacing 属性虽被所有主流浏览器支持,但 HTML5 已将其标记为废弃,不推荐使用;应改用 CSS 的 border-spacing 配合 border-collapse: separate。

cellSpacing 属性还能用吗?浏览器支持但 HTML5 已废弃
能用,但不推荐。所有主流浏览器(Chrome、Firefox、Safari、Edge)目前仍解析 cellspacing,但它在 HTML5 规范中已被明确标记为“过时(obsolete)”。W3C 文档指出:该属性不应再被使用,未来版本可能完全移除支持。
常见错误现象是:代码在本地测试正常,但接入 CI/CD 流程或某些严格校验工具(如 HTMLHint、axe)时直接报错 Attribute cellspacing is obsolete。
- 旧写法:
<table cellspacing="8"> - HTML5 校验器会警告,部分前端工程化配置(如 webpack + html-webpack-plugin 的 strict 模式)可能中断构建
- 服务端渲染框架(如 Next.js、Nuxt)若启用 SSR HTML 验证,也可能触发兼容性告警
border-spacing 替代 cellspacing:必须配 border-collapse: separate
border-spacing 是 CSS 中唯一语义等价的替代方案,但它有个硬性前提:父 <table> 的 border-collapse 值必须是 separate(默认值),而非 collapse。
容易踩的坑是:写了 border-spacing: 10px 却没生效——大概率是因为表格或全局 CSS 里有 border-collapse: collapse 覆盖了它。
- 正确写法:
<table style="border-collapse: separate; border-spacing: 10px;"> - 可分别设置水平/垂直间距:
border-spacing: 12px 6px(水平 12px,垂直 6px) - 若需响应式:支持媒体查询,例如
@media (max-width: 768px) { table { border-spacing: 4px; } } - 注意:
border-spacing只作用于<table>元素,不能通过后代选择器(如td)设置
JavaScript 动态修改 cellSpacing 会怎样?
用 JS 直接操作 tableObject.cellSpacing 仍可运行,但行为已不一致:
- 设置数值(如
table.cellSpacing = "5")会写入内联 HTML 属性,但现代 DOM 解析器可能忽略或转为字符串值 - 读取时返回字符串(如
"5"),不是数字,容易在计算逻辑中引发隐式类型转换问题 - 更可靠的做法是改用
table.style.borderSpacing = "5px",并确保table.style.borderCollapse = "separate" - 如果表格已设
border-collapse: collapse,JS 修改borderSpacing不会触发重绘,必须先改borderCollapse
为什么 padding 不能代替 cellspacing?
padding 控制的是单元格内容到边框的距离(即 cellpadding 的 CSS 等价物),它**完全不影响相邻单元格之间的空白**。很多人误以为给 td 加 padding 就能拉开单元格,结果只是内容“撑开”了自身,而边框依然紧贴。
真正拉开单元格之间距离的,只有两个机制:原生 cellspacing(已废弃)或 CSS 的 border-spacing(必须配合 separate)。
复杂点在于:当表格混合使用 border-collapse: collapse 和 border-spacing 时,后者会被静默丢弃,且 DevTools 的 computed 样式里甚至不显示 border-spacing 值——这个失效是无声的,调试时容易漏掉。


















