- From: Brad Kemper <brad.kemper@gmail.com>
- Date: Thu, 19 Mar 2009 09:24:51 -0700
- To: Jonathan Snook <jonathan.snook@gmail.com>
- Cc: www-style@w3.org
On Mar 19, 2009, at 8:15 AM, Jonathan Snook wrote:
>> TDs in HTML cannot be overflowed, as they automatically grow to
>> contain their contents. If table-cells don't already act the same
>> way, they really should (as Andrew also mentions).
>
> And if that's the way we want to define it, I'm fine with that.
I should have said that this is assuming the default 'table-
layout:auto', and not 'table-layout: fixed'.
> So, if you have two static or relative elements pointed to the same
> cell, do they stack or overlap? What if they have differing spans?
> HTML source order wins or CSS source order wins?
Assuming you are talking about to items that are display:table-cell,
for instance, there would be only one per cell position. When you give
a new cell position, you are changing the order, not putting two
things into the same position (and whether static or relative doesn't
matter). At least that is how I would do it. If you are not talking
about a table-cell (or table-row in some cases), then you must be
talking about absolutely positioned item, which is out of flow.
> Example:
> <div id="a"></div>
> <div id="b"></div>
>
> #b { table-position: cell(1,2); table-col-span: 2; height:50px; }
> #a { table-position: cell(1,1); height: 100px; }
>
> What's the height and width of either container and what goes where?
If #a and #b are both 'display:table-cell', and the numbers of cell()
are 'cell(<row-position>,<column-position>)' (which I don't think is
obvious), then here is how I think that would be handled:
1. #b { table-position: cell(1,2);} puts #b's position into the second
column of the first row, same as sort order.
2. #b { table-col-span: 2; } means that you are trying to span across
a column that is not there already, and you did not specify a number
of columns in the table, so it is debatable what should happen here.
But lets assume it creates a new column. So now #b is in columns 2 and
3, and the row-height is currently a minimum of 50px.
3. #a { table-position: cell(1,1); } didn't change anything, because
the sourse order would have given you that.
4. #a { height: 100px; } sets the minimum row height to 100px.
End result: You have one row with 3 columns, with #a in column 1, and
#b in columns 2 and 3. All cells are 100px (could grow taller if they
had content, but in this example they don't).
> Throw in a floated image that exceeds 50px in #b and then what do
> you get?
Same as if you float a 50px+ tall image inside a <TD height="50">
today that is next to a <TD height="100">.
> My opinion: #b would stretch to 100px (highest value wins). But I'm
> still not sure if you would stack these or overlap them, since
> they're both static.
Stack or overlap what? The cells? No, they would not occupy the same
spot. They are just reordered with every 'table-position' assignment.
And with every new 'table-position' assignment or rowspan or colspan
assignment, cells could be rewrapped to a new row. Without any
explicit row elements, the UA would:
1. do all the spans and re-ordering of column positions in order as
though there was just one row, then
2. if there is a column-count (or whatever its called) on the table
then it wrap the cells to new rows to honor that (limiting col-spans
to what would fit in the specified number of columns), then
3. if the is a row-count (or whatever its called) on the table then
add anonymous rows and cells if necessary to have that many rows as a
minimum.
> I flip-flop in which approach is better but I still feel that using
> "position: cell", while less flexible, removes plenty of edge cases,
> and could allow overflow.
>
> -js
>
>
Received on Thursday, 19 March 2009 16:25:32 UTC