必须同时设置table、th、td的border为0或none,并在table上声明border-collapse: collapse,否则因UA默认样式和separate模型像素错位,Safari等环境下仍会显示1px白线。

只给 <table> 加 border: none 没用,必须同时处理 <th>、<td> 和 border-collapse 状态,否则 Safari、iOS WebView 或缩放时大概率漏出 1px 白线。
为什么 border: none 单独写没效果?
浏览器 UA 样式默认给 <th> 和 <td> 设了 border-style: inset(哪怕你没显式声明),而 border: none 只清 style,不碰 width 和 color;在 border-collapse: separate(默认值)下,相邻单元格的“不可见边框”像素对齐错位,抖出细缝。
-
border: 0更稳妥——它同时置零 width / style / color,兼容旧 Android WebView - 即使所有元素都写了
border: none,若没设border-collapse: collapse,仍可能有间隙 - 第三方框架(如 Bootstrap 的
table-bordered)会覆盖你的规则,得检查 CSS 优先级
真正生效的三要素写法
缺一不可,且必须全部作用在对应元素上:
-
<table>上设border: 0或border: none -
<th>和<td>都要单独设border: 0 -
border-collapse: collapse必须写在<table>上(写在<div>或单元格里无效)
推荐统一用类名控制:
立即学习“前端免费学习笔记(深入)”;
.no-border {
border: 0;
border-collapse: collapse;
}
.no-border th,
.no-border td {
border: 0;
}
小程序或富文本环境(如 mp-html)怎么写?
这类环境不支持全局 class 或外部 CSS,必须用 tagStyle 逐元素注入,且顺序不能错:
-
tagStyle是对象,键名严格为"table"、"th"、"td"(大小写敏感) -
table项里必须包含"border-collapse": "collapse",否则th/td的border: 0会被忽略 - 禁用
border="0"属性——HTML5 已废弃,mp-html 不解析,也无法覆盖单元格边框
反复调试仍有白线?绕开表格渲染更实际
当目标只是视觉无边框排版(而非语义化数据表),真没必要死磕表格模型:
- 用
display: grid模拟行列结构,完全脱离 UA 边框逻辑 - 纯布局场景优先选
div + flex,无默认边框、padding、vertical-align 干扰 - 若必须保留
<table>语义(比如屏幕阅读器需求),加transform: translateZ(0)强制硬件加速,可缓解 iOS sub-pixel 渲染抖动
无边框 ≠ 无结构。哪怕边框消失了,padding、line-height、vertical-align 这些才是决定内容是否整齐的关键,别只盯着 border。



















