- From: Brian Birtles via GitHub <sysbot+gh@w3.org>
- Date: Tue, 20 Jun 2017 00:31:47 +0000
- To: public-css-archive@w3.org
Adding agenda+ since we need to resolve this issue soon. This feature has reached Firefox beta and will ship on the release channel in early August. I expect Chrome is not far behind. Beyond that point it will be much harder to change this naming.
To summarize the issue:
* We initially decided to use `frames()` since:
* It has slightly different behavior to `steps()`, namely values of `n` less than 2 are invalid.
* There was strong community support for this name (the proposal itself came from Martin Pitt via the [Animation at Work slack](https://damp-lake-50659.herokuapp.com/)). That this naming makes sense to many people has been been subsequently confirmed by Rachel's informal twitter poll.
* Since then the TAG [raised concern](https://github.com/w3ctag/design-reviews/issues/161#issuecomment-297617664) about semantic overlap with animation frames (`requestAnimationFrame`) and keyframes (`@keyframes` etc.).
* Subsequent to that interest has been expressed in using timing functions for gradients where `frames()` is a less suitable name (#1332).
* Furthermore, there appears to be interest in coining a fourth variation on step timing functions where *neither* of the endpoints are included (#1371).
Since I will not be able to attend telcon this week (I can only attend the APAC-friendly telcons), I'll leave my take on the issue here:
* Given the last two points in particular, I think we *should* rename this by simply extending `steps()` somehow.
* Having `frames()` and possibly yet another timing function which are only subtly different to `steps()` but have completely different names feels like a unnecessary platform wart that will make learning this syntax harder for authors (when you realize that `steps(2, start)` doesn't do what you want, it's much more natural to reach for something that looks similar) and that we will regret later.
* Sticking `frames()` in a gradient also seems odd.
* Strawman 1:
* Recognize that the existing `start` and `end` refer to where the step happens and *not* which endpoints are included. So in keeping with that precedent:
* `steps(n, start)` — n ≥ 1
* `steps(n, end)` — n ≥ 1
* `steps(n, inside)` — n ≥ 2 (= `frames(n)`, i.e. the steps are inside the interval)
* `steps(n, outside)` — n ≥ 2 (neither endpoint is included)
* Strawman 2:
* Forget trying to be consistent with `start` and `end` and try something that might be less mathematically consistent but is more intuitive.
* `steps(n, start)` — n ≥ 1
* `steps(n, end)` — n ≥ 1
* `steps(n, distribute)` — n ≥ 2 (= `frames(n)`, i.e. "distribute the steps evenly within the interval")
* Alternatively, `space` (space apart)? `equal` (equally distributed)?
* `steps(n, clip)` — n ≥ 2 (neither endpoint is included, i.e. clip off the endpoints)
* Alternatively, `trim` (trim the gap between the steps and interval ends)? `align` (align steps with ends of interval)
* At this stage I prefer strawman 2. If there is concern about the range of `n` differing between the different versions, then I'd still prefer a name that is obviously related to `steps()`, e.g. `steps-distribute(n)` and `steps-clip(n)`. (There are subtle differences between how `steps()` and `frames()` handle values at the endpoints that might be easier to preserve with different function names so I don't mind this option either.)
--
GitHub Notification of comment by birtles
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/1301#issuecomment-309610346 using your GitHub account
Received on Tuesday, 20 June 2017 00:31:54 UTC