border="0"不可靠,因其仅作用于table元素、不控制th/td边框,易被CSS覆盖且HTML5已弃用;真正无边框需同时设置table、th、td的border:none并配合border-collapse:collapse。

直接给 table 加 border="0" 不可靠,尤其在现代项目里,它既不能覆盖单元格边框,又容易被 CSS 覆盖或校验器警告。
为什么 border="0" 经常失效
这个属性只作用于 <table> 元素本身,对 <th> 和 <td> 完全无效;一旦页面加载了任何 CSS(哪怕只是重置 margin/padding),它的效果就立即消失。更关键的是:border="0" 是 HTML4 遗留写法,HTML5 中已不推荐,部分构建工具或 CMS 会自动过滤或替换它。
- DevTools 显示
border: none但仍有细线?大概率是 iOS Safari 的 sub-pixel 渲染抖动,不是样式没生效 - 富文本编辑器(如 TinyMCE、CKEditor)常自动注入
class或内联style,直接覆盖该属性 - 即使生效,也是一刀切——无法单独控制顶部/底部/左右边框
真正无边框:必须同时重置三处
表格边框由三层叠加构成:<table> 自身边框、<th> 边框、<td> 边框。任一遗漏都会残留线条。最简可靠的写法是:
.no-border {
border-collapse: collapse;
}
.no-border,
.no-border th,
.no-border td {
border: none;
}
-
border-collapse: collapse必须设在table上,否则即使都设了none,某些浏览器仍可能渲染出微弱分隔线 - 不要只写
table, th, td { border: none }—— 若全局生效,会污染其他表格 - 如果用内联 style,务必三者都写:
<table style="border:none"><tr><th style="border:none">...</th></tr></table>
底部无边框这种“半无边框”需求怎么搞
想保留上、左、右边框,只去掉最后一行下方的线?靠 border="0" 完全做不到。得用 CSS 精确控制:
立即学习“前端免费学习笔记(深入)”;
- 给
<tbody>最后一个<tr>加border-bottom: none - 或者更稳妥:用伪类
tr:last-child td { border-bottom: none } - 注意:若表格有
<tfoot>,需额外处理tfoot tr:first-child,否则脚部第一行上方可能多出一条线
真正的难点不在写法,而在排查——浏览器渲染层、CMS 注入、sub-pixel 抖动、伪类选择器作用域,这些地方漏掉一个,就会出现“明明写了 none 还有线”的情况。



















