Re: [CSS21] display:run-in clarifications

On Tuesday 01 September 2009, Boris Zbarsky wrote:
> Boris Zbarsky wrote:
> > Makes the [1] reference a little confusing, but other than that,
> > looks good.
>
> I was making notes to myself on implementing this stuff, and found
> another possible ambiguity.  If an element with display:run-in has an
> absolutely positioned or floated child, and gets run in, what is the
> right containing block for the child?  Is it the nearest block parent
> the run-in used to have?  Or the block the run-in ran into?

That is a separate issue from how the run-in element itself is 
displayed, but it indeed needs to be defined somewhere. The place where 
this belongs is probably 10.1 and I think one can argue that it is 
already defined:

If the child is floating, item 2 applies, which says: "[...] the 
containing block is formed by the content edge of the nearest 
block-level, table cell or inline-block ancestor box."

The term "block-level" is a link to its definition, which says: "Several 
values of the 'display' property make an element  
block-level: 'block', 'list-item', and 'run-in' (part of the time; see 
run-in boxes), and 'table'."

Although the text doesn't say so explicitly, it seems reasonable to 
assume that "part of the time" refers to the cases where the 'run-in' 
is displayed as a block and not to the cases where the run-in is 
displayed inline. In other words, an element that is displayed run-in 
is *not* the containing block for its floating child. The containing 
block must instead be found among the ancestors of the run-in element.

If the child is absolutely positioned, the definition is more direct. 
Item 4 in 10.1 applies and it says to look for an ancestor with a 
certain 'position' property and then defines the containing block both 
for inline ancestors and others.


Is it better that the containing block of a floating child is formed by 
the block after the run-in, or by that block's parent? I interpret 10.1 
as using the latter. There is a difference, of course, but is it an 
important difference? It has an influence on how much left/right margin 
a designer must give the float.


>
> Testcase:
>
> <!DOCTYPE html>
> <html>
> <body>
>    <div style="padding: 100px; border: 1px solid green; position:
> relative"> <span style="display:run-in; border: 1px solid red">
>        <div style="position: absolute; top: 0; left: 0">aaa</div>
>        bbb
>        <div style="float: left">ccc</div>
>      </span>
>      <div style="position: relative; border: 1px solid black">
>      </div>
>    </div>
> </body>
> </html>
>
> In Opera and IE8, the run-in just doesn't run in, as I recall.  I
> can't make sense of what webkit is doing; all the text except "aaa"
> disappears here.
>
> It would make the most sense to me to use the block the run-in ran
> into as the containing block.
>
> Is this already covered by the spec text in some way, or do we need
> to make it explicit?



Bert
-- 
  Bert Bos                                ( W 3 C ) http://www.w3.org/
  http://www.w3.org/people/bos                               W3C/ERCIM
  bert@w3.org                             2004 Rt des Lucioles / BP 93
  +33 (0)4 92 38 76 92            06902 Sophia Antipolis Cedex, France

Received on Tuesday, 1 September 2009 16:13:50 UTC