只给table加border: none不够,因浏览器默认对th/td应用ua样式(如inset边框),且border-collapse: separate下相邻“不可见边框”像素错位会抖出细缝;必须同时设table/th/td的border为none或0,并加border-collapse: collapse。

只给 table 加 border: none 不够,必须同时处理 th 和 td,并强制 border-collapse: collapse,否则 Safari、iOS WebView 或缩放时仍可能漏出 1px 白线。
为什么 border: none 单独写没用?
浏览器默认对 th 和 td 应用了 UA 样式(比如 border-style: inset),即使 table 没边框,单元格之间仍会渲染逻辑边框。部分内核在 border-collapse: separate(默认值)下,把相邻单元格的“不可见边框”像素对齐错位,抖出细缝。
-
border: none只清除了 border-style,但某些 UA 会 fallback 到其他渲染逻辑 -
border: 0更稳妥——它同时置零 width + style + color,兼容旧 Android WebView - 漏掉任意一个选择器(
table/th/td),都可能看到残留线
正确写法:三要素缺一不可
必须同时满足以下三点,才算真正关掉表格边框:
-
table元素设border: none或border: 0 -
th, td也设border: none或border: 0 -
table上加border-collapse: collapse(不能写在div或单元格上)
推荐用类名统一控制:
.no-border {
border: 0;
border-collapse: collapse;
}
.no-border th,
.no-border td {
border: 0;
}
容易被忽略的干扰项
即使上面三步全做了,还可能看到线,常见干扰源有:
-
outline:某些框架或自定义 focus 样式会加 outline,检查:focus状态 -
box-shadow:特别是带 inset 的阴影,视觉上像边框 - 第三方 CSS 框架类名(如 Bootstrap 的
table-bordered)会覆盖你的规则,优先级不够就得加!important或调整选择器 - iOS Safari sub-pixel 渲染:100% 缩放下也可能出现 0.5px 白线,此时建议改用
display: grid或flex布局替代表格语义
最麻烦的不是写法本身,而是排查哪一层样式偷偷加了 border——用浏览器开发者工具逐层检查 computed styles 中的 border、border-top 等属性,比猜更可靠。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











