- From: vrugtehagel via GitHub <sysbot+gh@w3.org>
- Date: Mon, 10 Jan 2022 10:19:14 +0000
- To: public-css-archive@w3.org
@LeaVerou that's a great idea! The syntax looks a bit weird to me, but I suppose we can't really accomplish that idea without new syntax. I thought first that separating the values with `/` rather than `;` would be nice, but that wouldn't actually work for properties that already use it (e.g. animating `border-radius` that has values containing slashes). Then I thought a function could work, like `opacity: animate(0, .7);` but that causes issues when you're animating values that already use commas.
@birtles makes a good point as well. We can define a `Keyframe` object in JavaScript in such a way already, and so it would be nice to align CSS with this. I thought initially that that would mean the original proposal for `via` should be replaced with something that aligns `@keyframe` definitions more with JavaScript keyframes, but actually `via` is already a step in that direction. Specifically, it would give us this (from [MDN's page on Keyframe formats](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API/Keyframe_Formats#:~:text=It%20is%20not%20necessary%20to%20specify%20an%20offset%20for%20every%20keyframe.%20Keyframes%20without%20a%20specified%20offset%20will%20be%20evenly%20spaced%20between%20adjacent%20keyframes.)):
> It is not necessary to specify an offset for every keyframe. Keyframes without a specified offset will be evenly spaced between adjacent keyframes.
This would be exactly what `via` would accomplish. The only difference here is that in JavaScript, your keyframes must be [in the right order](https://www.w3.org/TR/web-animations-1/#:~:text=The%20list%20of%20keyframes%20is%20sorted%20in%20ascending%20order%20by%20computed%20keyframe%20offset.) whereas CSS allows you to define them in any order you want.
Anyway, while I do really like the concept of being able to "invert" the keyframe definition as LeaVerou suggested, I would again lean towards that being a separate proposal. That and this proposal are similar and obviously related but solve slightly different use cases. Let me illustrate this with an example:
``` css
@keyframes wiggleThenRainbow {
0% { left: 0; }
10% { left: -10px; }
20% { left: 10px; }
30% { left: -10px; }
40% { left: 0; color: black; }
55% { color: red; }
70% { color: blue; }
85% { color: yellow; }
100% { color: green; }
}
```
This animation is hard to write with inverted notation (if even possible at all) but would benefit from `via`. In particular, `10%`, `20%` `30%`, `55%`, `70%` and `85%` could be replaced by `via`. Then, you could _just_ change the `40%` to adjust where the wiggling ends and where the rainbow starts. It also allows you to much more easily add or remove a wiggle or rainbow color.
However the inverted syntax would be very useful for cases like this:
```css
@keyframes wiggleAndRainbow {
0% { left: 0; color: black; }
20% { color: red; }
25% { left: -10px; }
40% { color: blue; }
50% { left: 10px; }
60% { color: yellow; }
75% { left: -10px; }
80% { color: green; }
100% { left: 0; color: black; }
}
```
You could, in this case, use `via` if you wanted, and write
```scss
@keyframes wiggleAndRainbow {
from {color: black; }
via { color: red; }
via { color: blue; }
via { color: yellow; }
via { color: green; }
to { color: black; }
from { left: 0; }
via { left: -10px; }
via { left: 10px; }
via { left: -10px; }
to { left: 0; }
}
```
That would, similar to the previous example, simplify adding or removing a wiggle or rainbow color, though the inverted syntax would most definitely make more sense than `via` here. Either way, these two examples demonstrate the difference in use case for `via` and the inverted syntax.
--
GitHub Notification of comment by vrugtehagel
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/6151#issuecomment-1008724650 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Monday, 10 January 2022 10:19:16 UTC