Oriol Oriol - 28 days ago 7
HTML Question

Can a table row have no cells?

I'm using HTML tables to create a timetable. Each row represents half hour, and the cells can span multiple rows by using

rowspan
.

Sometimes I have empty
tr
elements, because all the slots are taken by cells from previous rows.

In that case, the HTML validator complains:


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


Sure, I could remove those empty
tr
and reduce the
rowspan
value of the expanded cells. But then the
rowspan
value would no longer univocally correspond to the duration of the cell.

Therefore, are empty
tr
s really invalid? Why?

Answer

You can’t have empty rows in a table in a valid HTML document per the current HTML spec.

Maybe you rightly should be able to, but the spec currently clearly says that you can’t. So if anybody believes it should be allowed by the spec, the right thing to do is to file an issue against the HTML Standard in its github tracker or even write a patch and open a PR for it.

Specifically the spec defines the following error case:

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.

In Internet-spec terms, that is a “normative” authoritative statement that can’t be ignored or overridden by anything else. It is stating a hard requirement.

The spec elsewhere says this:

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

But that’s not actually a contradiction and does not conflict with or supersede or override the “table model error” requirement cited above. In fact, it’s the opposite—the “table model error” requirement supersedes the more-liberal requirement in the other section (cited above) that a valid tr element can have zero or more children.

Any stricter requirements in a spec always supersede or override any more-liberal requirements.