- From: Bramus! via GitHub <sysbot+gh@w3.org>
- Date: Wed, 29 Sep 2021 21:04:34 +0000
- To: public-css-archive@w3.org
As pointed out by @andruud and @flackr above I also think it's preferable to keep the JS and CSS interfaces tied to each other. Right now this is the case: if you know how one works you also know the other, as they share the same concept/approach. --- @fantasai Regarding those "element slides into view"-animations. Note that it can also be about a portion of that element, e.g. "only start when a quarter into view" or "be finished when 75% in view". I've done so in https://www.bram.us/2021/03/04/the-future-of-css-scroll-linked-animations-part-2/#demos--revealing-images for example where the animation runs from 50% into view to 100% into view. Above that several animations can be attached to several phases of a timeline. See https://www.bram.us/2021/03/04/the-future-of-css-scroll-linked-animations-part-2/#demos--contact-list-revisited for example, where there are different enter and exit animations on the same element. 💡 To implement this it looks like a good idea to me to have one shared `view-timeline` for an element, and then be able to tap into parts of that `view-timeline` (e.g. the enter and exit phases) to hook animations on. I'm thinking of two new properties here: - `animation-timeline-phase` to define which part of the `view-timeline` you want attach your animation on. - Values are `enter`, `exit` and `auto` (= for the entirety of the `view-timeline`, with respect to `view-timeline-fit`) - `animation-timeline-thresholds` to define the element-based thresholds for running the animations. - As an author you can opt to set two thresholds, e.g. `25% 80%`. - Both percentages indicate _"how much percent of the element should be in view"_. - The first one is the start threshold _(e.g. how much percentage does the element need to be in view before the animation can start)_ - The second one is the end threshold _(e.g. when the element in that much percentage in view the animation must be finished)_. - Default value is `auto`. - For `enter` phases that translates to `0% 100%` _(i.e. from element not in view and touching start edge to element entirely in view)_. - For `exit` phases that translates to `100% 0%` _(i.e. from element entirely in view and touch end edge to element entirely out of view)_. The adjusted syntax for the https://www.bram.us/2021/03/04/the-future-of-css-scroll-linked-animations-part-2/#demos--contact-list-revisited example would then become: ```css @keyframes animate-in { … } @keyframes animate-out { … } ul { overflow-y: scroll; } li { view-timeline: li-in-ul; view-timeline-fit: cover; } li > * { animation: animate-in 1s linear forwards, animate-out 1s linear forwards; animation-timeline: li-in-ul, li-in-ul; animation-timeline-phase: enter, exit; animation-timeline-thresholds: 25% 100%, 100% 25%; } ``` In this example: - The `animate-in` animation would run during the `enter` phase of the `li-in-ul` timeline. The animation will start when the watch element (the `li`) is 25% in view at the start edge and be finished when the watched element is entirely in view. - The `animate-out` animation would run during the `exit` phase of the `li-in-ul` timeline. The animation will start when the watch element (the `li`) is 100% in view at the exit edge (e.g. about to leave) and be finished when the watched element is 75% out of view. 🤔 Braintwist: If these new properties would exist, is `view-timeline-fit: cover;` still feasible as we're basically delegating that responsibility to `animation-timeline-phase`? `animation-timeline-phase` could in that case be extended to accept the values `cover` and `contain`, deprecating `view-timeline-fit`. 🤔 Braintwist on the braintwist: Say`animation-timeline-phase` would be extended as suggested in the braintwist above and a user wants to do something like "run the animation from the moment the element is entering the scrollport until it is halfway in the scrollport", then the `enter`/`exit`/`cover`/`contain` keywords won't do. In that case I'm sliding back to a syntax using an edge and a percentage, which is awfully similar to [`<element-offset>` from the current proposal](https://drafts.csswg.org/scroll-animations-1/#typedef-element-offset): ```css animation-timeline: some-element-in-a-scroll-container; animation-timeline-phase-start: end 0%; /* Start animation when the watched element is sitting at the end edge, with 0% in view*/ animation-timeline-phase-end: 50%; /* Have animation be finished by the time the watched element is in the middle of the scroll-container*/ ``` To combine these in the `animation-timeline-phase` shorthand a separator other than `,` would be needed. Thinking of `/` right now (e.g. `animation-timeline-phase: end 0% / 50%;`) as using a space (e.g. `animation-timeline-phase: end 0% 50%;`) makes it somewhat weird: the first percentage is a threshold but the second percentage is a progression of the `view-timeline`. _(Apologies for freewheeling here. My mind is playing ping-pong with itself when it comes to Scroll-Linked Animations 😅)_ --- Looking a bit broader, I think it's advised to also keep Scroll-Triggered Animations in mind while figuring out the syntax for Scroll-Linked Animations, so that we don't hit a wall when they are being considered. I'm seeing options with something like `animation-timeline-type: trigger` here, also being to leverage the proposed `animation-timeline-phase` if need be. -- GitHub Notification of comment by bramus Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/6674#issuecomment-930542414 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Wednesday, 29 September 2021 21:04:36 UTC