- From: François REMY <francois.remy.dev@outlook.com>
- Date: Thu, 20 Jun 2013 10:37:49 +0200
- To: "Tab Atkins Jr." <jackalmage@gmail.com>, "www-style list" <www-style@w3.org>
- Cc: "Lea Verou" <lea@w3.org>
> Based on this thread, I think my conclusions are: > > 1. Disallow custom properties from being animated at this level. When > we add type annotations to custom properties, allow them to be > animated at that point. (We'll have to solve the "var-* in > 'animation'" problem eventually, so this is just punting that for > now.) > > Reasoning: Since we can't infer anything about the type of custom > properties, we can't transition them smoothly, and I don't think that > animating them with the "flip at 50%" behavior is very useful. This > also lets us have a solution now, so we have more time to think about > how we want to solve the 'animation' loop issue. I still disagree with this conclusion, and I think your reasoning has a few imprecisions that lead you to a suboptimal solution: (1) The "flip at 50%" behavior is useful. (1.1) Even when you'll introduce typing, there will be cases where you'll want a 50% flipping. (1.2) Even if the transtion behavior isn't defined in level 1, flipping at key points does already provide a graceful degradation to browsers which do not support full transitioning on custom properties. (1.2) With 50% flipping, I can basically use a preprocessor to generate as many frames as deemed necessary to get a smooth transition using my own formulas for the interpolation instead of relying on the ua one. Given the principle of progressive enhancement, I think we should - stick with animatable custom properties - keep the transition behavior undefined (only (t=0) and (t=1) are defined as the initial and specified values) - recommend flipping at 50% behavior if this transition is not ruled out by another spec This garantees that CP-L1 browsers will not be completely unable to read animations using custom properties (graceful degradation, as in the case of red to green bouncing), and it also guarantees that we can use preprocessors/polyfills to generate the missing frames and therefore get an interoperable behavior across CP-L1 and CP-L2 browsers (the author has full control over the final quality). (2) I disagree with the fact you can't infer anything about the type of CP from their value. (2.1) Most CSS values have a type which is uniquely decidable given their representation (100%, 50px, left, ...) or at least whose optimal transition behavior can be guessed, even if they are a few exceptions (red, 5 vs 5.0, ...) (2.2) The current programming language trend is clearly towards type inference and automatic typing (OCaml/F# type system, 'var' in C#/TypeScript and even 'auto' in C++) (2.3) Preprocessors like SASS use variables for a long time, are very expressive, yet do no have explicit variable typing as far as I know. Static typing of custom properties should stay a trick only used when everything else failled. Don't forget that CP-L1 browsers will ignore type-annotated CP so we will need clever mechanisms to make sure CP-L1 get a graceful degradation once we start using typing. I'd better resort on this kind of hacks only when it's really necessary, and I think those edge cases will have a very low probability. BTW, I take this opportunity to note that I think we should mention that, since 'all: xxxx' does not cover custom properties, 'transition: all xxx' doesn't either.
Received on Thursday, 20 June 2013 08:38:17 UTC