- From: Jordan OSETE <jordan.osete@laposte.net>
- Date: Tue, 09 May 2006 18:05:07 +0200
- To: Martijn <martijn.martijn@gmail.com>, www-style@w3.org
Martijn wrote : > > On 5/8/06, Laurens Holst <lholst@students.cs.uu.nl> wrote: > >> Example: >> >> a { >> background-color: yellow; >> animate-properties: background-color; >> animate-duration: 2s; >> animate-motion: logarithmic; >> } >> a:hover { >> background-color: orange; >> } >> >> Thank you for your attention. >> > > I like the idea. Not sure whether the properties are all a good idea > (especially I have a problem with animate-motion ), but I haven't > really thought about it. > I would also like to have a delay option, something like animate-delay: 2s; > >> From your example, it is not clear when the animation should begin. Transitions effects are indeed a good idea. But the proposed syntax is not really clear (sorry). I would propose something like: selector { transition-enter: sometransition; transition-leave: sometransition; } Now when any element starts to validate the selector, the transition-enter transition is used. If later this element doesn't validate the selector anymore, the transition-leave is used. Let's take or usual css-driven menu example. Instead of: li>ul { display: none;} li:hover>ul{ display: block;} We would have: li>ul { display: none;} li:hover>ul{ transition-enter: slide-in(top-to-bottom, 0.5s); display: block; transition-leave: slide-out(bottom-to-top, 0.5s); } We could even put more than one transitions at once: li>ul{ display: none;} li.opened>ul{ transition-enter: slide-in(center-to-sides, 0.5s), animate(opacity, from(0) to (1), 0.3s); transition-leave: slide-out(sides-to-center, 0.5s), animate(opacity, from(1) to (0), from(0.2s) to(0.5s)); display: block; } Obviously, the syntax of the core transition is messy here, but you get the important point: the transition-leave and transition-enter. They trigger something when the element matches the selector for the first time, or stops matching the selector. Note that the effect for the last example i gave was that, when an li's class change to something that contains "opened", it will: 1-a) set display to block 1-b) put the object in the state needed for the transition-enter animation. That means it will start fully transparent, and the visible area of the item will be a rectangle of 0*0px positionned in its (computed) center. Note that since it will be done _exactly_ at the same time as 1-a, the intended effect will happen, and the element will not be displayed even for a blink. 2) then the transition-enter animation starts and complete. In this case, it will make the item's coputed opacity move from 0 to 1 in 0.3 seconds, and make the visible area of the item will be a growing rectangle, from 0*0 at 0s, to 100%*100% at 0.5s (percentage of the item's computed width and heigth, respectively). 3) then, since the transition has ended, the style will continue to apply. When the class "opened" is deleted from the class attribute of the li, it basically goes the reverse way: the visible area of the item gradually reduces from a rectangle of 100%*100% to a rectangle of 0*0 in its center (in 0.5s), and in the meantime opacity goes from 1 to 0 in the last 0.3 seconds of the animation. I still see some limitations to that: -it implies defining a whole new syntax for transitions. Implementing it would not be an easy task either. -it somehow duplicates some of the smil animation syntax, i believe, in a messy way. It would be better if we could specify those animations in a smil-compatible way. -Then, again, you won't ever be able to create a syntax for every effect that people designing websites will want. That is simply not possible. So people will still need scripts. Actually, script is needed for animation, except the most common cases (like in the example above). I know i will be scolded at, but I'm still sticking to scripts. I think there should be, at least, a way to specify original transitions in script, so that if the proposed transitions are not enough, webdesigners can create their own. The syntax I am thinking about right now is just some extension of the onevent: syntax i was talking about in the other topic: putting some script as the value of the transition-... properties. The main problem with that is that it (besides putting script in CSS, wich is evil) creates a risk of infinite loops: .myclass { transition-enter: "this.className='';"; //leaves immediately transition-leave: "this.className='myclass';"; //re-enters immediately } Now it makes a deadloop if any item ever happens to have 'myclass' in its classname. This is the main drawback of scripts as transitions in CSS. Besides their power, scripts allow deadloops. Then, it's not worse than any deadloop that can occur in a normal script, and if CSS and scripts are put together in a separate thread (wich should already be the case for scripts anyway, since scripts can create deadloops), the worse will be avoided. Jordan Osete
Received on Tuesday, 9 May 2006 16:05:20 UTC