Re: [css3-transitions] transitions and rendering objects vs. DOM nodes

2009/6/27 L. David Baron <dbaron@dbaron.org>:
> I have another question about transitions that I think ought to be
> addressed in the spec ( http://dev.w3.org/csswg/css3-transitions/ ),
> though in this case I'm not exactly sure how it should be addressed
> in the spec.
>
> This is the question of whether transition should be associated with
> a change in style on a content node, or a change in style on a
> rendering object (a box).  Either solution poses a bunch of
> problems.

First of all, "transition" does not apply to pseudo-elements, at least
currently. So only boxes that are directly connected to DOM elements
can have their properties transitioned.

> If transitions are associated with the style on an element (DOM
> node), then we have problems in any case where a content node has
> more than one style.  The main case of this I can think of is
> pseudo-elements.  For example, I think it's hard to do something
> sensible with:
>  p { color: gray; }
>  p::first-line { color: black; }
>  p:hover { color: blue; }
>  p:hover::first-line { color: aqua; }
>  a { transition: 3s color; }
> then it's really not clear what the transition on the anchor should
> be when the p goes into the :hover state (either when the anchor is
> split between the first line and the second, or when the anchor is
> entirely in the first line).

This is not a css3-transition issue, but rather a css2 issue, namely:
what is the Computed Value for color for "a"?
In fact, a lot of places in css2 and css3 modules assumes a mapping
like (element, property) => (computed value), which is generally true,
as long as you don't use line level pseudo-elements (currently only
::first-line, in the future, who knows?)
Other pseudo-elements also cause similar problems (in particular
::selection and ::first-letter), although they're either unspecified
or undefined when problematic.

This means that neither css3-selectors nor css2 can advance to cr / pr
without resolving this issue. I guess the best place to solve it would
be css3-cascade, since it involves finding inherited and specified
values for splitted elements.

Given one or more Computed Values for "color", transitioning does not
require any other knowledge of parent element / pseudo-element.

> On the other hand, if transitions are associated with the style on a
> rendering object, you end up with transitions not occurring when
> there's also a change in 'display' or some other property that
> changes what rendering objects are present.

Do you mean like
p {
color:red;
transition: 3s color;
display:block;

p:active {
display:none;
color:blue;
}

In this case, the transition of color is not needed. Problems can
arise if display goes to block again while the transition should be in
progress.

> I think the specification should define more precisely how
> transitions interact with pseudo-elements and when they should occur
> so that this distinction is clear.

It is not just a css3-transitions problem, it affects most of css, from 1 to 4.

> -David
>
> --
> L. David Baron                                 http://dbaron.org/
> Mozilla Corporation                       http://www.mozilla.com/
>
>

Giovanni

Received on Saturday, 27 June 2009 14:25:54 UTC