- From: Antoine Quint via GitHub <sysbot+gh@w3.org>
- Date: Tue, 11 Apr 2023 14:39:24 +0000
- To: public-css-archive@w3.org
graouts has just created a new issue for https://github.com/w3c/csswg-drafts: == [css-transitions] starting an animation and a transition with equal values yields some incompatible behavior between Safari, Chrome and Firefox == If I have an element specified as follows: ```css div { width: 0; height: 100px; background-color: black; transition: width 250ms linear; } ``` … and later on set the following styles: ```css div.animated { width: 1000px; animation: grow 1s forwards linear; } @keyframes grow { from { width: 0 } to { width: 1000px } } ``` … then what is the expected behavior with regards to transition during the lifetime of the explicit CSS Animation started when the `animated` class is applied? I'm observing a different behavior in each of Chrome Canary, Firefox Nightly and Safari Technology Preview. In all three browsers a `CSSAnimation` is yielded going from `width: 0px` to `width: 1000px` as expected. However, the behavior differs greatly for the transition: 1. **Chrome Canary** (114.0.5708.0): no transition is ever started (no `transitionstart` event and no `CSSTransition` object visible when calling `getAnimations()` right after applying the `animated` class). 2. **Firefox Nightly** (114.0a1 (2023-04-11)): a transition going from `width: 0px` to `width: 1000px` is started as the `animated` class is applied and runs for 400ms until its natural completion. 3. **Safari Technology Preview** (167): same behavior as Firefox when the `animated` class is applied, however the transition is canceled and restarted on each frame. While this does not yield a visible difference because the CSS Animation overrides the CSS Transition, this is still an observable difference through events and `getAnimations()`. Here's the complete test (sadly GitHub does not allow attaching an HTML file): ```html <!DOCTYPE html> <style> div { width: 0; height: 100px; background-color: black; transition: width 250ms linear; } div.animated { width: 1000px; animation: grow 1s forwards linear; } @keyframes grow { from { width: 0 } to { width: 1000px } } </style> <div></div> <script> const div = document.querySelector("div"); const currentWidth = () => getComputedStyle(div).width; const dumpAnimations = label → { const animations = document.getAnimations().map(animation → { const keyframes = animation.effect.getKeyframes(); return `${animation.constructor.name} from ${keyframes[0].width} to ${keyframes[1].width}`; }); console.log(`${label} width is ${currentWidth()} and getAnimations() yields [${animations.join(', ')}]`); } const dumpTransitionEvent = event => dumpAnimations(`After ${event.type} fired`); div.addEventListener("transitionstart", dumpTransitionEvent); div.addEventListener("transitioncancel", dumpTransitionEvent); div.addEventListener("transitionend", dumpTransitionEvent); requestAnimationFrame(() → { div.classList.add("animated"); dumpAnimations("After starting animations"); requestAnimationFrame(() => dumpAnimations("One frame after starting animations")); setTimeout(() => dumpAnimations("100ms after starting animations"), 100); setTimeout(() => dumpAnimations("500ms after starting animations"), 500); }, 1000); </script> ``` Cc people I know to have worked or are working on animations in the affected browsers: @flackr, @BorisChiou and @birtles. Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/8701 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Tuesday, 11 April 2023 14:39:26 UTC