- From: Sebastian Zartner via GitHub <noreply@w3.org>
- Date: Thu, 07 Aug 2025 21:58:47 +0000
- To: public-css-archive@w3.org
> 2\. The suggested syntax: `event-trigger-actions: click(play) keypress(pause)`, is a bit problematic since it mixes different concerns together, the event and the action, which should probably be split into different sub-properties. Moreover, I think if we add this format of `<event>()` functions, IMO it makes sense that the arguments they take are modifiers of the events, and not of the trigger. The suggested syntax, while understandable, also looks a bit weird to me. At least, it would be a first in CSS. As @ydaniv wrote, functions in CSS normally take modifiers. ----- I have to admit, I don't fully grasp the concept behind all this yet. Nonetheless, I had an idea for a different approach I wanted to share. Maybe that idea is totally wrong and it is definitely still missing important pieces, as I didn't think too deeply about it yet. So feel free to correct me! # Basic concept We have trigger events, modifiers for those events, trigger targets, and actions. There are no new properties for animations but instead we have specific scrolling-related events and actions related to animations. # Syntax ```ebnf trigger-event = [ none | <event> <number-of-triggerings>? ]# <number-of-triggerings> = <number [1,∞]> <event> = focus | hover | click | [ [ view-enter | view-exit ] && [ <axis> || <'view-timeline-inset'> ]? ] | [ [ [ scroll-to | scroll-by ] && [ <scroller> || <axis> ]? ] <length-percentage> ] trigger-action = [ [ play-animation | play-animation( [ forwards | backwards | alternate ]? ) | pause-animation | toggle-animation | reset-animation | restart-animation ]+ && <trigger-target>? ]# trigger = <'trigger-event'> / <'trigger-action'> trigger-target = [ none | <trigger-target> ]# <trigger-target> = <dashed-ident> ``` where `trigger-event` defines one or more events to react to and `trigger-action` one or more actions to execute on a given trigger target (or itself if none provided) when the corresponding event is triggered. `trigger-target` turns an element into an event target and defines a name for it, which can then be used in `trigger-action` definitions. # Example Animating an element with viewport-based and click-based triggers: ```css #scroll-subject { trigger-event: view-enter 10%, view-exit 90%; trigger-action: play-animation --trigger-target, pause-animation --trigger-target; } #animation-target { animation: …; trigger-target: --trigger-target; } #click-subject { trigger-event: click; trigger-action: toggle-animation --trigger-target; } ``` or using the `trigger` shorthand: ```css #scroll-subject { trigger: view-enter 10%, view-exit 90% / play-animation --trigger-target, pause-animation --trigger-target; } #animation-target { animation: …; trigger-target: --trigger-target; } #click-subject { trigger: click / toggle-animation --trigger-target; } ``` This starts the animation of `#animation-target` when `#scroll-subject` enters the viewport (at 10% offset) and stops it when leaving the viewport (at 90% offset). And it toggles the animation of `#animation-target` when `#click-subject` is clicked. # Conclusion This concept keeps trigger events, targets, and actions independent from animations. And it allows for future extensions for events and actions without having to introduce more properties. Sebastian -- GitHub Notification of comment by SebastianZ Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/12336#issuecomment-3165942865 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Thursday, 7 August 2025 21:58:48 UTC