- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Sun, 11 Apr 2010 13:48:11 -0700
- To: HåkonWium Lie <howcome@opera.com>
- Cc: <www-style@w3.org>
-------------------------------------------------- From: "HåkonWium Lie" <howcome@opera.com> Sent: Sunday, April 11, 2010 4:16 AM To: "Andrew Fedoniouk" <news@terrainformatica.com> Cc: <www-style@w3.org> Subject: Re: transitions vs. animations > Also sprach Andrew Fedoniouk: > > > > I think the syntax looks simple and doable. Are there use cases that > > > would require more than one property to be changed, which couldn't be > > > specified with multiple profiles? > > > > Yep, and yet it removes that problem with transitions overriding > > animations and vice versa. Everything is just an animation. Repeatable > > or > > not. > > Yes, I like the simplicity. However, the question still lingers: are > there use cases that can be express in the current @keyframes proposal > that can't be expressed in multiple profiles? @keyframes define function that ties progress axis (given by percentage) with one or more value sets. For example you can define @keyframes function that defines progress of top and left attributes at the same time: progress -> top, left; Such functions can always be split into two functions: progress -> top; progress -> left; So @profile and @keyframes are equivalent in this respect. > > You have used three properties: > > animate > animate-in > animate-out > > What indivitual properties lie behind these? For example, does > 'animate' expand into; > > animate-delay > animate-duration > animate-timing-function > > And, if so, are there similar expansions for 'animate-in' and > 'animate-out'? > > Or, is 'animate' just a shorthand for setting 'animate-in' and > 'animate-out'? Correct, 'animate' is just a shorthand for setting 'animate-in' and 'animate-out'. > > Potentially, one could reduce the number of properties by having three > keywords, e.g.: > > animate: in left, during right, out top; > (I don't think that 'during' is required) animate-in/out is a property defined by white-space-value-list [, white-space-value-list]* To be able to define both 'in' and 'out' parts in animate we should have one more type of list in CSS grammar. Sort of: animate: left | top; Prepending lists with 'in' and 'out' as you did may not work if you need define multiple animated properties. > Or something. At the moment I am using "function notation with named arguments". animate: left(duration-in : 1s, duration-out : 0 ) top(duration-in : 0, duration-out : 1s ); I am not using animate-duration, animate-timing-function, etc. at all. I think that 'animate' is an atomic property - it has to be applied on either-all-or-none basis. That works but is not perfect in cases when multiple animated properties need to be defined - redundant declarations, e.g. animate: left(duration-in : 1s, duration-out : 0 ) top(duration-in : 1s, duration-out : 0 ) bottom(duration-in : 0, duration-out : 1s ) right(duration-in : 0, duration-out : 1s ); > > > > Now that I think about it, "@profile" doesn't seem intuitive. Would > > > @pattern or @shape be better? Hmm. > > > > My hope is that @profile could be useful in other places - not only > > in animations. As I said, gradients can be expressed better with them. > > Could you give us some examples? Here it is: @profile "my-color-profile" 0% black, 25% gray, 50% orange, 100% red; Simple gradient: background: gradient( linear black red, top bottom); Gradient with custom color profile: background: gradient( linear "my-color-profile", top bottom); background: gradient( radial "my-color-profile", 50% 50%); background: gradient( conic "my-color-profile", right bottom); > > > @profile is an ordered table that defines strong points for > > interpolation - function defined by table. And yet default > > interpolation method should be mentioned, e.g. Hermite, Akima > > splines or just linear. > > You suggest these as keywords? How does the interpolation method > interact with the timing function? Or, are they separate? In principle @profile could have some parameter that will define interpolation method but I think it is just enough to pickup some common method that all UA will implement. At the moment 'css3-animations' module allows to define interpolation method for each step only: http://www.w3.org/TR/css3-animations/#timing-functions-for-keyframes- that is quite redundant and hard to make it right by human. > > > 3c) "Same as 3b, but play the 'sway' animation (which takes 2s to run) > > continously between the two 'bounce' animations." > > > > .one > > { > > position: relative; > > left: 0px; > > } > > > > .two > > { > > position: relative; > > left: 500px; > > animate: "bounce" top 0.2s 5, > > linear left 1s once, > > "bounce" left 1s 1s infinite; > > The 'sway' animation hasn't been specified, so it's a bit unfair to > ask you to write out your example. However, assuming 'sway' animates > the 'left' property, the last line should be: > > "sway" left 1s 1s infinite; "sway" function that is defined in your doc in other column has the same profile values as "bounce" function. So ""bounce" top" is a "bounce" and ""bounce" left" is a "sway". I just wanted to show that the same profile can be applied to different properties. > > I presume? And that the keyword "infinite" indicates that the > animation should stop just as the 'out' animations are started? Correct, in animate-out phase keyword 'infinite' has computed value '0 iterations'. -- Andrew Fedoniouk. http://terrainformatica.com
Received on Sunday, 11 April 2010 20:49:05 UTC