- From: Dirk Schulze <dschulze@adobe.com>
- Date: Mon, 14 Oct 2013 23:05:02 -0700
- To: Brian Birtles <bbirtles@mozilla.com>
- CC: "public-fx@w3.org" <public-fx@w3.org>, Shane Stephens <shans@google.com>
On Oct 15, 2013, at 3:30 AM, Brian Birtles <bbirtles@mozilla.com> wrote: > (2013/10/15 10:17), Shane Stephens wrote: >> Some animatable values have closed bounds (e.g. SVG and CSS width and >> height values can't be less than 0). When animating these, we have a >> choice to either: >> * enforce the boundedness within our animations; or >> * enforce the boundedness when applying the result back into CSS or SVG >> >> I propose we choose the latter, so that things like: >> new Animation(target, [{width: -50px, composite: add}, {width: 50px, >> composite: add}], 1); >> modify the element from 50px smaller than current size to 50px larger >> than current size. > > In terms of compatibility, for SVG the latter behaviour is "recommended" > in SMIL: > > "Some attributes that support additive animation have a defined legal > range for values (e.g., an opacity attribute may allow values between 0 > and 1). In some cases, an animation function may yield out of range > values. It is recommended that implementations clamp the results to the > legal range as late as possible, before applying them to the > presentation value. Ideally, the effect of all the animations active or > frozen at a given point should be combined, before any clamping is > performed. Although individual animation functions may yield out of > range values, the combination of additive animations may still be legal. > Clamping only the final result and not the effect of the individual > animation functions provides support for these cases. Intermediate > results may be clamped when necessary although this is not optimal. The > host language must define the clamping semantics for each attribute that > can be animated."[1] > >> Some animatable values have open bounds (e.g. CSS column-width values >> must be larger than 0). >> What should we do when an animation results in a value outside these >> open bounds? Currently we're thinking that we should set the value to >> the smallest representable value larger than the boundary edge, but this >> seems somewhat hacky. > > Let me check I understand the issue. In light of these open bounds its > tempting to say that for both open and closed bounds, "don't do any > clamping, treat out of range values as invalid (and do whatever is > defined in that case)." But that's bad because in some cases it's > visually jarring and it puts the burden on authors to keep values in > range to avoid those effects. > > Does that sound right? > > (For rectangles it doesn't actually make a difference--SVG2 says that a > rect with width/height=0 is not rendered and the lacuna value for both > is 0 so whether we clamp to 0 or treat negative values as invalid and > fall back to the lacuna value of 0, you still get a discontinuity where > the rectangle disappears--something that is noticeable, for example, if > you have a stroke.) > > Perhaps we should just define clamping behaviour per-property or > per-property type (similar to how SMIL says, "the clamping semantics for > each attribute that can be animated")? > > For example, what is the most natural behaviour when shrinking a > column-width? Does clamping it to 0.00001 make sense? Or should it > disappear altogether? (And can be actually achieve that without tweaking > other properties?) The shrinking should be after the animation step. If the user defines and animation of 'width' from 300 to -300, the -300 should not be fixed to 0 during the animation and animate from 300 to 0. This seems unexpected. So the property itself should handle the shrinking after the animation process. Means I am in favor for "enforce the boundedness when applying the result back into CSS or SVG". Greetings, Dirk > > Thanks, > > Brian > > > [1] http://www.w3.org/TR/smil-animation/#AnimationSandwichModel >
Received on Tuesday, 15 October 2013 06:05:30 UTC