Menu

HTML 表格边框:合并边框、线条与圆角

如何用 CSS 给 HTML 表格添加边框:用 border-collapse 得到单线边框、border-spacing、只显示行线、只显示内边框、圆角,以及为什么 border 属性已经过时。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

如何给表格添加边框

表格默认没有边框。用 CSS 添加:每个单元格上的 border 画出网格,表格上的 border-collapse: collapse 把每对相邻的边框合并成一条线。

border 简写属性接收宽度、样式和颜色,顺序不限:1px solid #6b7280。把它设在 th, td 上,而不是只设在 table 上:表格上的边框只会画出外框。

border-collapse:separate 与 collapse

border-collapse 决定单元格之间是否共用边框。

值效果
separate(默认)每个单元格都有自己的边框,单元格之间的间隙由 border-spacing 设置
collapse相邻的单元格共用一条边框;border-spacing 被忽略

在 separate 表格中,你能看到两层:蓝色的表格外框,以及每个单元格周围各自独立的琥珀色框,两者之间隔着 border-spacing。把 6px 改成 0,单元格会贴在一起,但线条仍然是双线。只有 collapse 才能把它们合并。

当两条合并的边框相遇且不相同时,较宽的那条胜出。宽度相同时,由样式决定(double 胜过 solid,solid 又胜过 dashed 和 dotted);如果还是平局,单元格的边框胜过行的边框,行的又胜过表格的。这就是为什么合并后的表格外边缘是琥珀色而不是蓝色:在那里,单元格和表格都有 2px 的实线边框,单元格胜出。

只显示横线,或只显示内部线条

大多数现代表格并不会画出每一条线。两种常见的做法:

第二个表格去掉了每个边缘单元格外侧的边框。border-inline-start 和 border-inline-end 指的是行的开头和结尾,所以在从右到左书写的语言中,同样的 CSS 依然正确,因为在这些语言里第一个单元格位于另一侧。

表格圆角

在设置了 border-collapse: collapse 的表格上,border-radius 不起任何作用。圆角表格使用 separate 模型并且不留间距,同时只给单元格设置底边框和结尾边框,让每条线只画一次:

表头的两个角单元格有各自的圆角,这样灰色背景才会顺着弧线走。如果不设置,它们的直角就会从圆角边框外面露出来。圆角半径是 9px,即表格的 10px 减去它 1px 的边框,这样两条弧线才能对齐。

按部分设置边框颜色和粗细

表格的不同部分可以有不同的边框。针对 thead、tfoot 和单独某些行的选择器,可以在表头下方或合计行上方设置更粗的线:

在相遇的地方,3px 的线胜过 1px 的灰线,遵循的正是上面的合并规则。表格结构的其余部分(thead、tfoot、th),参见 HTML 表格。

border 属性

老教程会在 <table> 标签上使用属性:

<table border="1" cellspacing="0" cellpadding="6">

浏览器仍然支持 border="1":它会在 separate 模型下给表格和每个单元格画上边框,于是出现双线的效果。这三个属性在 HTML5 中都已过时。对应的 CSS 写法是:单元格上的 border,表格上的 border-spacing(或 border-collapse: collapse),以及单元格上的 padding。

常见错误

  • 只在 table 上设置边框。你会得到一个外框,里面却没有线。把边框加到 th, td 上。
  • 忘了写 border-collapse: collapse,结果看到双线。
  • border-radius 搭配 border-collapse: collapse。圆角会被忽略。
  • border-spacing 搭配 border-collapse: collapse。间距只在 separate 模型中有效。
  • 在 separate 模型中给 <tr> 设置边框。除非表格是合并边框的,否则行不会画出边框;请改为设置单元格的样式。
  • 在新代码中使用 border="1"。它仍然有效,但无法设置颜色,而且已经过时。

常见问题

如何在 HTML 中给表格添加边框?

给表格和单元格设置 CSS:table { border-collapse: collapse; } th, td { border: 1px solid #999; }。单元格上的边框画出网格,border-collapse: collapse 把相邻的边框合并成单条线。

为什么我的表格是双线边框?

默认情况下,每个单元格都会画出自己的边框,单元格之间还有间隙(border-collapse: separate),所以相邻的单元格会显示两条线。在 <table> 上设置 border-collapse: collapse,就能把它们合并成一条。

表格的 border 属性还有效吗?

<table border="1"> 在所有浏览器中仍然能画出边框,但它在 HTML5 中已经过时,而且无法控制颜色或样式。请改用 CSS 的 border 属性。

如何让表格的角变成圆角?

在设置了 border-collapse: collapse 的表格上,border-radius 不起作用。请使用 border-collapse: separate 加 border-spacing: 0,把圆角设在表格上,并给角上的单元格设置相应的圆角(border-start-start-radius 等属性),这样它们的背景就不会从角上露出来。

如何去掉表格的边框?

除非有东西给表格加了边框,否则表格本来就没有边框。去掉 <table> 标签上的 border 属性,或者在 table, th, td 上设置 border: none,覆盖添加边框的样式表。

Coddy 编程语言插图

和 Coddy 一起学编程

开始