cellspacing="0" 仍有1px缝隙是因border-collapse:separate下边框叠加、默认padding或块级元素margin溢出所致;需三步组合:设border-collapse:collapse、清除th/td的padding和border、重置td内块级元素margin。

cellspacing="0" 为什么还有 1px 缝隙?
不是浏览器 bug,是渲染机制叠加导致的视觉残留。cellspacing="0" 只控制单元格“框外空白”,但表格默认用 border-collapse: separate 渲染,此时每个 <td> 和 <code><th> 的边框独立绘制——哪怕没设 border,某些 UA 样式(如 Firefox 默认给 <code><table> 加 <code>border: 1px inset)或你写的 border: 1px solid #000 都会让相邻单元格的右/下边框与下一个单元格的左/上边框并列显示,在非整数缩放或亚像素渲染下就出现“双线感”或 1px 空白。
更隐蔽的是:<td> 自带默认 <code>padding(通常 8px),内容被撑开后,看起来像单元格之间有缝;或者 <td> 里塞了 <code><p></p>、<h3></h3> 这类自带 margin 的块级元素,它们的外边距会溢出到行高里,造成“行间空隙”。
真正起效的三步组合写法
只靠 cellspacing="0" 或单写 border-spacing: 0 都不够。必须同步处理三个层面:
-
table元素上显式设border-collapse: collapse(不是separate) - 所有
th、td上清除默认padding和border:th, td { padding: 0; border: none; } - 检查
td内部是否含块级元素,若有,加td > * { margin: 0; }(注意是直接子元素)
如果用了 Bootstrap、Tailwind 或 normalize.css,它们大概率已设了 table { border-collapse: collapse; },但可能同时写了 td { padding: 0.5rem; } —— 此时 cellspacing="0" 完全无效,且 DevTools 里能看到 padding 被划掉,说明 CSS 覆盖了 HTML 属性。
border-spacing 和 cellspacing 到底谁说了算?
CSS 的 border-spacing 永远覆盖 HTML 的 cellspacing 属性。哪怕你写:
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











