- From: Andy Earnshaw <andyearnshaw@gmail.com>
- Date: Tue, 29 May 2012 10:41:10 +0100
- To: Lea Verou <leaverou@gmail.com>
- Cc: www-style@w3.org
- Message-ID: <CAOrM_WNphSps0QEgYQSQX3-1RRBdBu7vZfoyTLQYzhmjOGJviQ@mail.gmail.com>
On Tue, May 29, 2012 at 2:28 AM, Lea Verou <leaverou@gmail.com> wrote:
> This will be solved easily once every value becomes animatable (through a
> discrete step, if nothing more elaborate is possible). Tab said this has
> been discussed in the WG and it will eventually be done, probably through
> the addition of a new timing function, to avoid breaking existing websites
> (which is unfortunate as it lacks consistency and elegance, but
> understandable). Then you could use `display` in keyframes to control when
> the change happens and simultaneously animate opacity, width, height or
> anything else. For example, a fade out:
>
> @keyframes fade {
> from { display: block; opacity: 1; }
> 99% { display: block; opacity: 0; }
> to { display: none }
> }
The only issue I have with that idea is that you still have the problem of
animating elements that aren't block elements in a smooth manner. For
instance, animating `opacity` with `display` will cause surrounding
elements to snap to a new position before the animation starts (or after it
finishes if you're fading out). That's why it makes more sense, or at least
I think it does, to slide out the rendering box because it's the most
natural way for an element to gradually display when affecting flow.
For the purposes of hunting a Gecko rendering bug, I put together a simple
demonstration (http://jsfiddle.net/NprYn/) that animates table rows. The
aforementioned hoops I had to jump through were; setting a border on the
TABLE element, setting top/left borders on each individual TD element and
then animating `border-width` and `font-size` for those TD elements to hide
them completely. I really don't think any of us would agree that a
theoretically simple animation should be this tricky (and buggy -- I'm
looking at you, Gecko). Naturally, we can't go back in time or make any
compatibility breaking changes to box rendering and the only other option I
could think of is having `render-height` and `render-width` properties,
which could solve the problem for this and other box types.
Received on Tuesday, 29 May 2012 09:41:42 UTC