Re: [CSS21] display:run-in clarifications

Bert Bos wrote:
> In the above, "siblings" and "children" include both normal elements
> and :before/:after pseudo-elements.

Makes the [1] reference a little confusing, but other than that, looks good.

> We haven't defined yet what :before/:after on a replaced element means 
> (according to the note in 12.1). Do we expect
> 
>     IMG:before {content: "Boo!"; display: block}
> 
> to show a block element above the image?

You're right; this is currently undefined.  We could define it both ways 
here, or try to define the whole thing on boxes instead of elements, I 
guess...  The latter seems like it might be simpler in this case.  :(

> In that case, rule c is correct 
> as it is, because that block inhibits its parent from being run-in. If 
> we expect ':before' to simply not apply to replaced elements, then rule 
> c is correct as well.

Doesn't look like that to me.  Consider the following HTML markup:

   <object>
     <div>Some fallback content</div>
   </object>

Since this is all being defined on _elements_, not boxes, the <object> 
in fact has a display:block child and so would inhibit its parent from 
being run in per the existing rule c, even if the <object> is 
display:inline.  That seems wrong to me...

> The added condition is "inline or run-in" instead of just "inline" 

Oh, good catch.

Though this brings up another issue.  A "display:run-in" child should 
inhibit run-in behavior in all cases (so should be added to part (a) 
here).  Indeed, either it doesn't run in (and then is a block and should 
inhibit run-in behavior) or it does run in (and then is followed by a 
block or list-item which would inhibit run-in behavior anyway).

> ---------------------------------------------------------------------------
> [Definition:] An element or pseudo-element C inhibits run-in behavior if 
> one of the following is true. (Note that the definition is 
> recursive.)
> 
>    a. C is not floating and not absolutely positioned[3] and the
>       computed value of its 'display' is one of 'block', 'list-item'
>       or 'table'.
> 
>    b. C has a computed value for 'display' of 'inline' or 'run-in' and
>       it has one or more children that inhibit run-in behavior.
>       (Where "children" includes both normal elements and :before/:after
>       pseudo-elements.)
> ---------------------------------------------------------------------------

I like this, if we add 'run-in' to the list in part (a) and deal with 
the replaced element issue....

-Boris

Received on Monday, 31 August 2009 15:46:14 UTC