- From: David Hyatt <hyatt@apple.com>
- Date: Thu, 19 Mar 2009 14:39:34 -0500
- To: Brad Kemper <brad.kemper@gmail.com>
- Cc: "Tab Atkins Jr." <jackalmage@gmail.com>, Jonathan Snook <jonathan.snook@gmail.com>, "www-style@w3.org" <www-style@w3.org>
On Mar 19, 2009, at 12:39 PM, Brad Kemper wrote:
>
> On Mar 19, 2009, at 8:21 AM, Tab Atkins Jr. wrote:
>
>> On Thu, Mar 19, 2009 at 1:01 AM, Brad Kemper
>> <brad.kemper@gmail.com> wrote:
>>> I think 'row#' and 'col#' would be very easy to understand. The
>>> author could
>>> specify one or both, and other cells would move to get out of the
>>> way or
>>> close holes left by the movement.
>>
>> Ah, no, I was talking about out-of-flow alignment.
>
> I do not think moving a cell or row should put it out of flow, and I
> did not interpret what David Hyatt said to mean that either. He did
> mention extending position:absolute to align __content__ of a cell
> to particular cell boundaries.
>
That's correct. table-position was intended for in-flow placement
into the grid. position:absolute with grid units would be for out-of-
flow placement.
>> In out-of-flow,
>> grid units are ideal, as they provide a simple and useful abstraction
>> that trivially generalizes to allow intuitive out-of-flow alignment
>> on
>> other flow models as well, such as multicol.
>
> I disagree. I do not think taking a table cell (or table cell-like
> structure) out of flow is simple or trivial. Most layouts are based
> on a grid, and it is much simpler to maintain a grid when things are
> in flow. Out of flow, by definition, means that the item is no
> longer there to affect the height of its neighbors, and there is
> nothing to prevent important content from being covered. Most
> layouts would not want that. If you do want to take something out of
> flow and position it in a place where it can cover up important
> content, you can position DIVs etc that are contents of a cell.
>
>> In-flow positioning is a bit more difficult. What happens in the
>> following?:
>>
>> #foo {
>> row#: 2;
>> col#: 2;
>> }
>>
>> #bar {
>> row#: 2;
>> col#: 2;
>> }
>>
>> Do they overlap? Does one slide into place, and then bump the other
>> one out? If so, which? And in which direction? (Presumably to the
>> right.) Is one of the declarations invalid?
>
> How many columns have you set on the element acting as the table?
> Let's assume that you set it to have 2 columns. The first rule would
> put #foo into the bottom right corner, with the other cells
> currently empty. The second rule overrides that and says, "no, #bar
> should go there. So #foo moves to the next available slot, which
> would be row 3, column 1 (I would not put it into the empty slots,
> as they were not created as the result of #bar bumping #foo out of
> its way). If you did not have column counts set on the table, then
> #foo would either move to column 3 or row 2, or we could say that
> new columns cannot be created that way, and it would move to row 3
> column 1.
>
> I find this very simple and consistent, with much fewer issues to be
> resolved than with out-of-flow cells.
>
Yeah, we'll have to work out what to do with conflicts... i.e., where
the new cell goes.
>>>
>
> A little off-topic, but if I turned a large paragraph into table-
> row, I would hope for it to fill the row, not just some small square
> at the beginning of the row. But ayway, I think having something
> like 'table-col-span: remaining' could take care of that and provide
> the option for current behavior. Maybe 'max' would be a better word
> than 'remaining'?
>
table-col-span: *
would be my preference to just say something spans to the end of the
table.
>>
>> Well, we've got two different ways of pushing content around in table
>> flow, which David touched on. We can move a block around as a
>> first-class table flow entity, or we can flow contents *into*
>> table-cells, where they then take place in whatever flow model the
>> table-cell has set for itself.
>
> No. We don't flow contents *into* cells. We *absolutely position*
> contents to align with edges of particular cells.
>
Three kinds of positioning:
(1) table-position on a display:table-cell. The object actually
becomes the cell at that position. A pseudo-element can't refer to
this cell position when this is done.
(2) table-position on a normal flow object like a block. The object
is placed *into* the cell at that position. If no cell exists at that
position, then an anonymous one gets made. A pseudo element can be
used to style this cell.
(3) position:absolute with grid units. Provides out of flow alignment
to cells in tables.
Received on Thursday, 19 March 2009 19:40:17 UTC