- From: Bert Bos <bert@w3.org>
- Date: Tue, 1 Sep 2009 18:12:00 +0200
- To: www-style@w3.org
On Monday 31 August 2009, Boris Zbarsky wrote:
> Bert Bos wrote:
> 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...
If the OBJECT has a child then it is not replaced, and conversely when
it is replaced it has no child. Currently, CSS doesn't define or
control when an OBJECT is a replaced element. It assumes an oracle that
knows the nature of the element.
In this case the author used DIV as fallback, not SPAN, which rather
suggests that he wants the fallback to be a paragraph or more. That
doesn't seem wrong at all. Especially as he also had the option to
use 'inline-block'. Clearly, he wants the OBJECT to be inline *only*
when it is actually replaced, not when the fallback text is displayed
instead.
>
> > 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).
[...]
> I like this, if we add 'run-in' to the list in part (a) and deal with
> the replaced element issue....
Agreed.
I was thinking that a run-in inside a run-in would be somehow ignored,
because it was part of a run-in already. But that is indeed not
consistent and would need additional rules. So that last definition
then becomes:
---------------------------------------------------------------------------
[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',
'table', or 'run-in'.
b. C has a computed value for 'display' of 'inline' and it has one or
more children that inhibit run-in behavior. (Where "children"
includes both normal elements and :before/:after pseudo-elements.)
---------------------------------------------------------------------------
On the other hand, what to do with :before/:after on replaced elements
is trickier. It's not for nothing that the WG decided to postpone the
issue. :-)
We need to define it for CSS3, but I'd rather not hold up CSS 2.1. Maybe
somebody finds *the* solution and we all agree immediately, but it
rather looks like it will be a long and complex definition with lots of
if-then clauses...
Just to give some examples, I'd like both of the following to
automatically set the height in proportion to the width:
img {width: 6em}
p:before {content: url(foo.png); width: 6em}
but I'm not sure what I want 'width' to do in the following two...
img:before {content: attr(title) "-"}
img {width: 6em}
p:before {content: "[" url(foo.png) "]"; width: 6em}
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:12:41 UTC