Re: [CSSWG] Minutes and Resolutions 2010-04-21

On Fri, May 21, 2010 at 8:23 PM, Boris Zbarsky <bzbarsky@mit.edu> wrote:
> On 5/21/10 7:25 PM, Tab Atkins Jr. wrote:
>>
>> <div display:table>
>>   <anon display:table-row>
>>     <div display:table-cell/>
>>   </anon>
>>   <div position:absolute/>
>>   <div display:table-row/>
>> </div>
>
> One other comment.  This is not quite right not matter what, as far as I can
> tell.  The actual box tree parent of the abs pos box, at least in Gecko, is
> its containing block.  Which is only the table if that's set to be
> position:relative, of course.

Ah, then that's a difference between my conception of the box-tree and
yours.  Which is why we need a spec detailing the construction of the
box-tree.  ^_^

Okay, so, what if I didn't pay attention to anonymous boxes, and
worked only on the element-tree?  In that case, given this markup
again:

<div style="display: table">
  <div style="display: table-cell"/>
  <div style="position: absolute"/>
  <div style="display: table-row"/>
</div>

The second clause of the auto-positioning rules would trigger, making
the position the top-right corner of the first div.


Looking over the rules again, they need to be slightly rewritten if
I'm basing it purely on the element-tree, so as to do the right thing
in situations like this:

<div display:table>
  <div display:block/>
  <div position:absolute/>
  <div display:block/>
</div>

After drawing some more diagrams, looks like these are the rules we need:


If an abspos element meets one of the following criteria:
  1. It has two immediate siblings, and both are display:table-* (not
display:table).
  2. It has one immediate sibling, that sibling is display:table-*
(not display:table), and its parent is display:table or
display:table-*.
  3. It has no siblings, and its parent is display:table or display:table-*.

...then use the first of the following rules that matches to determine
the auto position of the element:
  1. If its following sibling is display:table-cell, the auto position
is the upper right of the border box of the sibling.
  2. If its preceding sibling is display:table-cell, the auto position
is the upper left of the border box of the sibling.
  3. If its following sibling is display:table-row, the auto position
is the upper right of the border box of the sibling.
  4. If its preceding sibling is display:table-row, the auto position
is the upper left of the border box of the sibling.
  5. If its following sibling is
display:table-[row|header|footer]-group, the auto position is the
upper right of the border box of the sibling.
  6. If its preceding sibling is
display:table-[row|header|footer]-group, the auto position is the
upper left of the border box of the sibling.
  7. The auto position is the upper right of the content area of its parent.

These rules cover all cases (I made an exhaustive list), don't depend
on the behavior of the table-repair algorithm (as it operates only on
the element-tree), and should always give the most reasonable
behavior.

~TJ

Received on Monday, 24 May 2010 18:12:59 UTC