- From: Sylvain Galineau <sylvaing@microsoft.com>
- Date: Mon, 14 Jan 2013 21:56:40 +0000
- To: Øyvind Stenhaug <oyvinds@opera.com>, "www-style@w3.org" <www-style@w3.org>
- CC: "L. David Baron (dbaron@dbaron.org)" <dbaron@dbaron.org>
[Øyvind Stenhaug:] > > On Fri, 11 Jan 2013 19:54:23 +0100, Sylvain Galineau > <sylvaing@microsoft.com> wrote: > > > # If at one point in time there are multiple animations specifying > > # behavior for the same property, the animation whose name occurs > > # last in the value of 'animation-name' will override the other > > # animations at that point. [3] > > > > # If multiple animations are attempting to modify the same property, > > # then the animation closest to the end of the list of names wins. > > [4] > > > > It seems there are at least two possible interpretations of these > > statements: > > (For some reason these talk about the shorthand. The issue is not specific > to that, of course.) > > > 1. If the animation shorthand runs multiple animations against the > > same property, use 'last one wins' to decide which @keyframes rule > > animates that property. Then only allow this one animation to update > > the property *regardless of the respective durations of the > > winning/losing animations*. > > > > 2. If the animation shorthand runs multiple animations against the > > same property, use 'last one wins' to decide which @keyframes rule > > animates the property *first*. Once this animation has completed, use > > last-one-wins to pick the next @keyframes rule to animate the property > > *among the losing animations that are still running*. > > This representation of alternative 2 seems to make sense only for a subset > of the possible cases. Note that the "winning" animation could have a > delay. This wording doesn't explain what happens during that delay. > > Another way of looking at option 2 is that for each frame of animation, > each animation in the list is given the chance to specify a value, and > they are checked from left to right so that the ones at the end are able > to override the previous ones. As long as the conflicting animations have > different names, WebKit and Gecko appear to be consistent with this. > > (If you have "foo 10s, bar 4s 2s", 'foo' applies during the first two > seconds, then 'bar' takes over during the next 4s, then it's back to 'foo' > for the remaining 4s. But note that animation-fill would change this - if > 'bar' fills backwards, it overrides 'foo' also during the first two > seconds.) Yes, that makes sense. > > > <!doctype html> > > <style> > > @keyframes rightward { > > to { margin-left: 600px;} > > } > > #test { > > animation: rightward 10s, rightward 4s; > > } > > </style> > > <p id="test">Moving > > right</p>https://www.w3.org/Bugs/Public/show_bug.cgi?id=14658 > > > > Interpretation #1 would run rightward for 4s. IE and WebKit do this. > > Interpretation #2 would first run rightward for 4s, then run the last > > 6s of the 10s rightward animation. Firefox does this. > > OK, so here we get to the repeated animation names. (I raised this at > <http://lists.w3.org/Archives/Public/www-style/2011Nov/0020.html>, by the > way, but although <https://www.w3.org/Bugs/Public/show_bug.cgi?id=14658> > is apparently marked as fixed I don't think it's addressed by the current > wording.) > > I think this is really a separate issue from the general conflict > resolution. Then there are basically two alternatives: > > A) For a given element, an animation-name ident uniquely identifies an > animation. (Behavior would need to be specified; does the above example > behave the same as with "animation: none 10s, rightward 4s", for instance) > > B) An element can have multiple animations with the same name (pointing to > the same @keyframes). The question of which animation takes precedence > should be resolved in the same manner as if the names were different. I.e. > the stylesheet in the example above would behave exactly the same as > > @keyframes rightward-1 { > to { margin-left: 600px;} > } > @keyframes rightward-2 { > to { margin-left: 600px;} > } > #test { > animation: rightward-1 10s, rightward-2 4s; > } > You're right. This is a much better framing of the issue. > > While #1 is much simpler, I'm not sure this reflects author intent well. > > It may > > not even reflect the spec's original intent either; the first prose > > excerpt above specifically says the last animation wins *at that point > > in time*. > > For what it's worth, that wording is not the *original* one (it was > changed for <https://www.w3.org/Bugs/Public/show_bug.cgi?id=14778>). Yes; I really meant 'the original intent of the current prose'; but since you wrote it I'm comfortable taking your word as to what it meant :) > > > I strongly suspect #2 is what we want; from a syntactic standpoint I > > do find it awkward that animations 'run' a property from last to first > > but this is the compatible behavior today. > > As mentioned above I don't think "'run' a property last to first" sounds > like an accurate description. I think of it more like each entry in the > 'animation-name' list giving a special kind of declaration block whose > existence and contents change with time. And in case of conflicts the one > specified last takes precedence, just like with regular declaration blocks > with equal specificity and origin. Yes, that is what happens. I think it looks weird because this particular last-one-wins behavior has a temporal dimension whereby the last things on the list appears to run first, then the next to last etc. I don't think it's a big issue though. > > Going with #2 / B) seems fine. I do prefer being consistent whether the same name repeats or not. > Though B) might require clarifying what > happens if 'animation-name' is changed. For instance, what happens if you > go from 'foo 10s foo 20s' to 'foo 30s' and then to 'foo 10s foo 20s' > again? Does the 20-second 'foo' get restarted? ("In order to restart an > animation, it must be removed then reapplied.") I'm not sure I follow this point? > > -- > Øyvind Stenhaug > Opera Software ASA
Received on Monday, 14 January 2013 21:57:57 UTC