- From: Cameron McCormack <cam-www-smil@aka.mcc.id.au>
- Date: Wed, 8 Feb 2006 12:52:16 +1100
- To: www-smil@w3.org
Hi. SMIL 2.1 says[1] this about animating CSS properties: When animation is applied to CSS properties of a particular element, the base value to be animated is read using the (readonly) getComputedStyle() method on that element. The values produced by the animation are written into an override stylesheet for that element, which may be obtained using the getOverrideStyle() method. [...] Although animation does not manipulate the OM values, the document display must reflect changes to the OM values. Host languages can support script languages that can manipulate attribute values directly in the OM. If an animation is active or frozen while a change to the OM value is made, the behavior is dependent upon whether the animation is defined to be additive or not, as follows: (see also the section Additive animation). There is a problem here in that animation does manipulate the OM values; the override style sheet is part of the CSS OM. Because: * CSS animations are effected by modifying the override style sheet, * the base value is obtained by calling getComputedStyle(), * getComputedStyle() takes into account the override style sheet, and * animations should take into account changes to the base value, additive CSS animations that use the base value are going to be somewhat counter-intuitive. For example, take this SVG snippet: <rect width="100" height="100" stroke-width="1"> <animate attributeName="stroke-width" attributeType="CSS" begin="0s" dur="5s" from="0" to="10" additive="sum"/> </rect> If the animation is sampled at 1s intervals, this would be the result: Time Base value Animation value Final animated value ---- ---------- --------------- -------------------- 0s 1 0 1 1s 1 2 3 2s 3 4 7 3s 7 6 13 4s 13 8 21 since the base value now (erroneously) reflects the animated value. Three solutions I can think of: * the animated values should not be written into the override style sheet, but instead into some "hidden" place that the cascade also takes into account, * the base value should not be derived from the result of getComputedStyle(), but rather what getComputedStyle() would have returned if there were no corresponding value in the override style sheet, or * do not allow animation of CSS properties to reflect changes to the base value while they are running. Thoughts? Thanks, Cameron [1] http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html#animationNS-AnimationSandwichModel -- Cameron McCormack ICQ: 26955922 cam (at) mcc.id.au MSN: cam (at) mcc.id.au http://mcc.id.au/ JBR: heycam (at) jabber.org
Received on Wednesday, 8 February 2006 01:52:23 UTC