只给table设border: none没用,因为浏览器默认对th和td应用ua样式(如border-style: inset),且border-collapse: separate下相邻“不可见边框”错位可能抖出1px白线;必须同时对table、th、td设border: 0并启用border-collapse: collapse,再排查box-shadow、outline及框架类名干扰。

只给 table 设 border: none 为什么没用?
因为浏览器默认对 th 和 td 应用了 UA 样式(比如 border-style: inset),即使 table 没边框,单元格之间仍会渲染逻辑边框。更麻烦的是,在 border-collapse: separate(默认值)下,相邻“不可见边框”的像素对齐错位,缩放或 Safari/iOS WebView 中常抖出 1px 白线。
border: 0 比 border: none 更稳妥
border: none 只清除了样式,但某些旧内核(如 Android WebView)可能 fallback 渲染;border: 0 同时置零 width、style、color,兼容性更强。
- 必须同时作用于
table、th、td三个选择器 - 漏掉任意一个,都可能残留细线
- 推荐统一用类名控制,避免遗漏:
.no-border { border: 0; border-collapse: collapse; }<br>.no-border th,<br>.no-border td { border: 0; }
border-collapse: collapse 不是可选项,是必选项
它让相邻边框合并为一条线,彻底消灭分离模型下的间隙感。这个属性只对 table 元素生效,写在 div 或单元格上无效。
- 不加它,就算所有
border都设为0,border-spacing或 UA 默认间距仍可能撑开视觉缝隙 - 加了它之后,
border-spacing自动失效,无需再写 - 如果表格用了
box-shadow(尤其是inset)或outline,也会看起来像边框——得一并检查
第三方框架(比如 Bootstrap)覆盖了你的样式怎么办?
像 table-bordered 这类类名,优先级往往高于你写的普通选择器。光写 table { border: 0 } 没用。
- 用更具体的选择器,例如
.my-table, .my-table th, .my-table td - 必要时加
!important,但只用于兜底,别滥用 - 用 DevTools 的 Computed Styles 面板,逐个确认
border的最终计算值,比猜更有用
真正干净的无边框效果,不是靠删一个属性,而是三件事同步做:清边框、合模型、查干扰。少一步,就可能在某个设备上突然冒出一根白线。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











