- From: Troy Rollo <troy@rollo.com>
- Date: Thu, 22 Nov 2001 20:34:37 -0500 (EST)
- To: www-style@w3.org
I had occasion to use this feature today, only to find that it is either
unimplemented or inconsistently implemented in the various browsers. Then
searching google (both web and groups) I found there was a great deal of
confusion as to what this feature was supposed to do, and many inconsistent
answers regarding the question.
I thought this odd since I thought the description of the feature was not
technically ambiguous at all. The CSS2 spec defines it as follows:
===
This value causes the entire row or column to be removed from the display,
and the space normally taken up by the row or column to be made available
for other content. The suppression of the row or column, however, does not
otherwise affect the layout of the table. This allows dynamic effects to
remove table rows or columns without forcing a re-layout of the table in
order to account for the potential change in column constraints.
===
The first point is that the "row or column" is "removed from the display"
and the space is "made available for other content". So if we have the
following:
<TABLE BORDER=1>
<TR><TD>R1C1</TD><TD>R1C2</TD></TR>
<TR style="visibility:collapse"><TD>R2C1</TD><TD>R2C2</TD></TR>
<TR><TD>R3C1</TD><TD>R3C2</TD></TR>
</TABLE>
removing the row and making the space available would make the appearance
would be equivalent to:
<TABLE BORDER=1>
<TR><TD>R1C1</TD><TD>R1C2</TD></TR>
<TR><TD>R3C1</TD><TD>R3C2</TD></TR>
</TABLE>
So far, so good. Now the next point is that this does not "otherwise affect
the layout of the table". When removing rows, this implies that the browser
should not need to recalculate the widths of columns. The obvious
consequence of this is that if the row removed contained wider data in one
column than in other rows, the column does not get narrower, but there is a
second consequence of this to do with row spans. The specification
emphasises this with the indication that this can be used to remove rows
"without forcing a re-layout of the table in order to account for the
potential change in column constraints".
Take the following HTML, with a row spanning cell in the first row, and the
second row collapsed:
<TABLE BORDER=1>
<TR><TD ROWSPAN=2>R1C1</TD><TD>R1C2</TD></TR>
<TR style="visibility:collapse"><TD>R2C2</TD></TR>
<TR><TD>R3C1</TD><TD>R3C2</TD></TR>
</TABLE>
This should also appear the same as the output example above. The spanning
cell should not span into the third row (that is, the second visible row),
because this would shift its cells right, thus causing data from column 1
to go into column 2 and suggesting that a recalculation of the column width
would be necessary. The alternative would also create a new column 3, which
would be inconsistent with avoiding changes in the column constraints.
Similarly, the following HTML:
<TABLE BORDER=1>
<TR style="visibility:collapse"><TD ROWSPAN=2>R1C1</TD><TD>R1C2</TD></TR>
<TR><TD>R2C2</TD></TR>
<TR><TD>R3C1</TD><TD>R3C2</TD></TR>
</TABLE>
should result in output equivalent to:
<TABLE BORDER=1>
<TR><TD>R1C1</TD><TD>R2C2</TD></TR>
<TR><TD>R3C1</TD><TD>R3C2</TD></TR>
</TABLE>
Note that the spanning cell from the first row appears opposite the data
from the second row. There were two possible interpretations here of course
- one being that the second row should have an empty first column and data
in the second, and the other being the one I have given, however common
sense suggests that in situations where row spanning is most likely to be
used, there is no reason why collapsing the row where the spanning cell is
introduced should result in the spanning cell ceasing to have relevance to
the other rows it spans.
The behaviour in the case of columns and column groups would be directly
analogous.
In the real world, you might have multiple levels of row spanning cells, as in:
<TABLE BORDER=1>
<TR><TD ROWSPAN=3>R1C1</TD><TD>R1C2</TD><TD>R1C3</TD></TR>
<TR><TD ROWSPAN=2>R2C2</TD><TD>R2C3</TR>
<TR><TD>R3C3</TD></TR>
<TR><TD>R4C1</TD><TD>R4C2</TD><TD>R4C3</TD></TR>
</TABLE>
In such a case, it is likely that an author might want to collapse both
rows 2 and 3, which might be logically treated as one and might reasonably
be done in one operation. This suggests the need for a ROWGROUP tag which
could be used to collapse such rows as a group. This would differ from the
TBODY tag in that row spanning cells could span ROWGROUPs, whereas they
cannot span TBODYs and ROWGROUPs could be nested. For example:
<TABLE BORDER=1>
<ROWGROUP>
<ROWGROUP>
<TR><TD ROWSPAN=3>R1C1</TD><TD>R1C2</TD><TD>R1C3</TD></TR>
</ROWGROUP>
<ROWGROUP style="visibility:collapse">
<ROWGROUP>
<TR><TD ROWSPAN=2>R2C2</TD><TD>R2C3</TR>
</ROWGROUP>
<ROWGROUP>
<TR><TD>R3C3</TD></TR>
</ROWGROUP>
</ROWGROUP>
</ROWGROUP>
<ROWGROUP>
<TR><TD>R4C1</TD><TD>R4C2</TD><TD>R4C3</TD></TR>
</ROWGROUP>
</TABLE>
__________________________________________________________________________
Troy Rollo, Sydney, Australasia troy@rollo.com
Fight spam in Australia - Join CAUBE.AU - http://www.caube.org.au/
Received on Friday, 23 November 2001 11:11:02 UTC