table 行可以没有单元格吗?

Can a table row have no cells?

我正在使用 HTML 表来创建时间表。每行代表半小时,单元格可以使用 rowspan.

跨越多行

有时我有空的 tr 元素,因为所有的槽都被前几行的单元格占用了。

在这种情况下,HTML validator 抱怨:

Row [N] of a row group established by a tbody element has no cells beginning on it.

当然,我可以删除那些空 tr 并减少展开单元格的 rowspan 值。但是 rowspan 值将不再明确对应于单元格的持续时间。

因此,空的tr真的无效吗?为什么?

根据当前 HTML 规范,在有效 HTML 文档的 table 中不能有空行。

也许你理所当然应该可以,但规范目前明确表示你不能。因此,如果有人认为规范应该允许它,那么正确的做法是 file an issue against the HTML Standard in its github tracker or even write a patch and open a PR for it.

规范具体定义了以下错误情况:

https://html.spec.whatwg.org/multipage/tables.html#the-table-element

If there exists a row or column in the table containing only slots that do not have a cell anchored to them, then this is a table model error.

在 Internet 规范术语中,这是一个“规范”的权威声明,不能被任何其他内容忽略或覆盖。它提出了一个硬性要求

其他地方的规范是这样说的:

The tr element: Content model

https://html.spec.whatwg.org/multipage/tables.html#the-tr-element Zero or more td, th, and script-supporting elements

但这实际上并不矛盾,与上面引用的“table 模型错误”要求不冲突,也不取代或覆盖。事实上,恰恰相反——“table 模型错误”要求取代了另一部分(上面引用的)更自由的要求,即有效的 tr元素可以有零个或多个子元素。

规范中任何更严格的要求总是取代或覆盖任何更自由的要求。

在 HTML 规范的 table model section 中,您可以找到以下语句:

Rows usually correspond to tr elements, though a row group can have some implied rows at the end in some cases involving cells spanning multiple rows.

但是,这不适用于 table 中间的空行,因为隐含的行只能出现在末尾。

另一种可能性是在左侧添加一个包含 <th> 元素的列,作为该行的标题。毕竟,用户可能想知道 table 行代表什么 - 正如您在此处告诉我们的那样。