Re: [CSS21] Issue 142: the term "ancestor box"

On 4/1/11 5:43 PM, fantasai wrote:
> So the final text we have right now is a little different than the above.
> Given that we've removed run-ins, it seems pretty solid to me. Can you
> take a look and let me know whether there's anything remaining ambiguous?

So the key part is that the definition of "block container box" is "a 
box that either contains only block-level boxes or establishes an inline 
formatting context and thus contains only inline-level boxes", yes?

That definition is correct as far as it goes, I think, given the 
understanding that the table wrapper and caption boxes are actually 
block boxes and hence block containers.  The enumeration after the 
definition could use rephrasing to make it clear that it's an 
_exhaustive_ list of non-block-box block containers.

However defining the containing _block_ (which is a rectangle, not a 
box!) to be the content edge of the nearest block container ancestor 
_box_ leads to a self-contradiction in the spec.  Specifically, per the 
new item 2 of section 10.1, the containing block for a child of an 
anonymous block is the rectangle formed by the content edge of the 
anonymous block.  Percentage values are defined throughout in terms of 
the size of the containing block.  But section 9.2.1.1 says:

   Anonymous block boxes are ignored when resolving percentage values
   that would refer to it: the closest non-anonymous ancestor box is
   used instead.

whatever that means.  It's not clear, because percentages are defined as 
percentages of a _rectangle_, not of anything to do with a particular box.

I think we all know what we mean here, but we're not actually putting it 
into the spec.  If I had to implement the current text without the 
various background I know, I'd at best get it wrong and at worst be very 
very confused and then get it even more wrong.

The clean solution is probably to split the concepts of "containing 
block" and "the rectangle percentages are based on", give the latter a 
new name, and change all the places that should reference it to do so. 
This sounds like a lot of editorial risk.

The "just hack it in" solution is probably to change the text in 10.1 
step 2 as follows:

  2.  For other elements, if the element's position is 'relative' or
      'static':
      a.  If the containing block is being determined for the purpose
          of resolving a percentage value, it is formed by the content
          edge of the nearest block container ancestor box that is not
          an anonymous block.
      b.  Otherwise the containing block is formed by the content edge
          of the nearest block container ancestor box.

Thoughts?

-Boris

Received on Saturday, 2 April 2011 02:43:49 UTC