W3C home > Mailing lists > Public > public-html@w3.org > March 2010

Re: HTML's table model vs @hidden & display:none

From: Tab Atkins Jr. <jackalmage@gmail.com>
Date: Tue, 23 Mar 2010 10:50:19 -0700
Message-ID: <dd0fbad1003231050p2fb0e677p42e0f960266ece25@mail.gmail.com>
To: Leif Halvard Silli <xn--mlform-iua@xn--mlform-iua.no>
Cc: HTMLwg <public-html@w3.org>
On Mon, Mar 22, 2010 at 9:23 PM, Leif Halvard Silli
<xn--mlform-iua@xn--mlform-iua.no> wrote:
> http://dev.w3.org/html5/spec/tabular-data.html#table-model
>
> I cannot see that it is said that CSS (e.g. td{display:none}) affects
> the table model.

This is implicit in the fact that the <td> no longer has display:table-cell.

> And I suspect that the @hidden attribute also has the
> same effect.

Actually, I'd prefer if <td hidden> acted like it was
visibility:hidden.  The cell is currently irrelevant, but is still a
cell in the table.

Ian, any chance we could get this in the default UA stylesheet?

> But there is nothing said about that either. I suggest
> changing the spec to say that CSS td{display:none} or - better - <td
> hidden > (or some equivalent attribute aimed at this particular
> purpose) takes part in the table model.
>
> Problem: The HTML table model has a problem with its logics. Good news:
> the logical problem seems to be solvable via either CSS and/or the
> @hidden attribute.
>
> Example of the problems: This CSS selector,
>
>        td:first-child+td {background:red}
>
> will in the following table,
>
>  <table>
>  <tr id="row1"><td            >1<td>2<td>3</tr>
>  <tr id="row2"><td colspan="2">1<td     >3</tr></table>
>
> select different columns in each row. (Second column in #row1, and
> third column in #row2.) This may or may not be what the author wants.
> But at any rate, it often comes as a surprise. ;-)

Indeed, but that's not a problem with the table model, it's a problem
with the interaction between the table model and the operation of
Selectors.  Selectors are tree-agnostic; you just hand it some type of
document tree, and it goes to town.  Tables are *not* trees, though we
represent them as such in HTML because it's just easier, and generally
the mismatch isn't significant.

The correct way to select cells in a column, paying attention to
row/colspans, is to use a CSS pseudoclass that can pay attention to
the special rules of tables, rather than just the structure of the
tree.  We discussed this some time ago on the www-style list, and the
solution is very simple.  We will add, either in the current Table
Layout module or in the next version of it, a :col() pseudoclass
(takes a selector, and matches any cells which correspond to the <col>
matched by the selector) and a :nth-col() pseudoclass (takes a number
or numerical expression, and matches any cells in the columns
corresponds to those numbers).

For your particular case, where you wanted to select the cells in the
second column, you'd just do "td:nth-col(2)".  No need to do hacky
tricks in your markup with adding phantom cells to your HTML to allow
more predictable CSS.

~TJ
Received on Tuesday, 23 March 2010 17:51:14 UTC

This archive was generated by hypermail 2.3.1 : Thursday, 29 October 2015 10:16:00 UTC