要让td和th只显示下边框,必须先设置table{border-collapse:collapse}合并边框,再清除所有边框后仅保留border-bottom;若最后一行无需底边,需用tr:last-child td,th{border-bottom:none}剔除。

只让 td 和 th 显示下边框,不靠 frame
直接用 table 的 frame 属性(比如 frame="below")只能控制表格外框,对单元格内部线条无效。真正要实现“每行底下一条线”,得操作单元格本身。
常见错误是只给 td 加 border-bottom,但忘了清掉其他三边——结果默认的 border-collapse: separate 下,相邻单元格的右/下边框会叠加,线条变粗或错位。
- 先设置
table { border-collapse: collapse; },让边框合并,避免双线 - 再统一清除所有边框:
td, th { border: none; } - 最后只开底部:
td, th { border-bottom: 1px solid #ccc; } - 如果最后一行不需要底边,加个选择器:
tr:last-child td, tr:last-child th { border-bottom: none; }
border-collapse: collapse 必须开,否则边框会“打架”
默认 border-collapse: separate 时,td 各自画边框,cellspacing 还会留白——这时哪怕你只设 border-bottom,上下行之间的间距仍会让线条看起来断开、不齐,甚至出现两根线(上一行的 bottom + 下一行的 top)。
开 collapse 后,相邻边框自动合并成一条,border-bottom 才真正在视觉上“只出现在底部”。这个开关不是可选项,是必要前提。
- 不开
collapse,border-bottom效果不可控,尤其在不同浏览器里表现不一致 - 开了之后,
padding依然有效,不用担心内容贴边 - 如果表格需要隔行背景色,
collapse不影响:nth-child(even)的使用
用 frame 属性的局限性:它只管外框
frame="below" 确实能让整个表格只显示底边框,但它完全不管内部单元格——td 之间还是默认有分隔线(除非额外用 rules="none"),而且你无法单独控制某几行有没有底边。
实际场景中,多数人想要的是“每行下面一条线”,不是“整个表格底下一条线”。这时候 frame 就没用了,甚至会造成误解:
-
frame="below"+rules="all":外框底边 + 所有内部线,反而更乱 -
frame="below"+rules="none":外框底边还在,但内部全无分隔,变成一块大色块 - 想让表头
th有底边、普通行td没有?frame做不到
最后一行要不要底边,得手动关
多数设计稿里,表格最后一行底下是不留线的——但 border-bottom 是批量加给所有 td 的,不处理就会多出一根多余线条。
最稳妥的做法不是靠 JS 判断,而是用 CSS 选择器精准剔除:
-
tr:last-child td { border-bottom: none; }—— 适用于标准结构 - 如果表格有
tfoot,得单独处理:tfoot td { border-bottom: none; } - 避免用
:last-of-type,因为tr可能被thead/tbody分组,导致失效
这个细节容易被跳过,上线后才发现底部多了一条线,返工成本比写时多花十秒还高。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











