Oriol
Oriol

Reputation: 288480

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 trs really invalid? Why?

Upvotes: 5

Views: 2492

Answers (2)

sideshowbarker
sideshowbarker

Reputation: 88235

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 supersedes or overrides any more-liberal requirements.

Upvotes: 6

Alexander Jank
Alexander Jank

Reputation: 2600

In the table model section of the HTML spec, you can find the following statement:

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.

However, that doesn't work for empty rows in the middle of your table, as the implied rows can only occur at the end.

Another possibility would be to add a column with <th> elements to the left that serve as a caption for the row. After all, the user may want to know what one table row represents - just as you have told us here.

Upvotes: 0

Related Questions