- From: Håkon Wium Lie <howcome@opera.com>
- Date: Mon, 5 Apr 2010 17:21:55 +0200
- To: Alex Mogilevsky <alexmog@microsoft.com>
- Cc: www-style@w3.org
Alex Mogilevsky wrote:
> One fundamental difference between transitions and animations is
> the definition of start and end state. Generally, it is like this:
>
> (known state A) --> animation --> (no end state)
> (known state A) --> transition --> (known state B)
>
> A transition is an animation that adapts to specific start and end
> state and transition time. An animation doesn't even have to have
> an end state, and if it has one it generally can't be predicted
> without running the animation.
>
> Furthermore, transitions are actually triggered by end state:
>
> (any state A) --> transition --> (desired state B)
>
> This is useful in particular for backwards compatibility with
> transition-unaware UA -- they will change the state, just no the
> fancy transition. Also, since this is triggered by end state, and
> declared at the same point with the end state, it doesn't need to
> change when start state changes. That adjustment is automatic.
This is a good analysis.
> For the above difference, I think it is important to have a simple
> way to declare a transition. It is probably possible to have
> generic animations adjust to transition inputs but it seems pretty
> complicated.
>
> There is however a large number of cases where start and end of
> transition is perfectly well known. Then specifying arbitrary
> animation in place of transition in/out of a state seems very
> desirable.
>
> In Hakon's examples, I do like approaches where both animation and
> transitions can apply. It could be something like this (slightly
> modified):
>
> /* start with a known static state - animations assume these start values */
> .button {
> position:relative;
> color:blue;
> left:0;
> }
>
> /* 1. transition */
> .button:hover {
> left: 10px;
> color:red;
> on-entry: transition(color, 1s), transition(left, 1s);
> on-exit: transition(color, 1s), transition(left, 1s);
> }
I like your functional notation. I suggest using a simpler function
name, though:
on-entry: change(color, 1s), change(left, 1s);
on-exit: change(color, 1s), change(left, 1s);
Having two properties ('on-entry', 'on-exit') instead of one (say,
'effect') is compelling. However, it will mean that the effects
triffer at different times. Consider this example:
:hover {
on-entry: play(bounce, 1s);
on-exit: play(sway, 1s);
}
:focus {
on-entry: play(bounce, 1s);
}
If a hoveree becomes a focusee, the value of 'on-exit' will not
change, so 'sway' will not play; 'sway' will only play when the
element is no longer hovered.
This may be exactly what we want, or not.
> /* 2. custom animation */
> .button:hover {
> left: 10px;
> color:red;
> on-entry: animation(button_normal_to_hover);
> on-exit: animation(button_hover_to_normal);
> }
Your example got me thinking. How about:
:hover {
on-entry: play(bounce, 1s);
on-exit: play(bounce, 1s, reverse);
}
Cool, eh?
-h&kon
Håkon Wium Lie CTO °þe®ª
howcome@opera.com http://people.opera.com/howcome
Received on Monday, 5 April 2010 15:54:50 UTC