- From: Majid Valipour via GitHub <sysbot+gh@w3.org>
- Date: Tue, 10 Apr 2018 10:30:41 +0000
- To: public-css-archive@w3.org
majido has just created a new issue for https://github.com/w3c/csswg-drafts:
== [css-scroll-snap-1] Path to interop among implementations ==
# Current Implementation State
Chrome is working on implementation of snap points and we are getting close to shipping it. So I spent sometime looking at the current state of various implementation. I have summarized my finding below
Given this, I believe what we will ship initially will match the current subset implemented by Safari with some additional features.
I like to use this issue to start a discussion around a practical plan to get interop on this specification.
## Safari , Chrome (Behind a flag)
Safari is shipping a subset of current specification i.e., [`scrollsnap`](https://www.w3.org/TR/css-scroll-snap-1/)) since at least Version 11.0.3 and have removed their previous prefixed implementation of old spec.
Here is some more detail around which features are implemented:
| | Safari | Chrome | Test Page
|--------------|------------|------------|-------------------
| Touch | Yes | Yes | [webkit demo page](https://webkit.org/demos/scroll-snap/) [0]
| Wheel | Yes | Yes |
| Scroll Bar | No | Partial[1] |
| Keyboard | No | No |
| Scroll{By,To}| Partial[2] | Yes |[wpt test](https://w3c-test.org/css/css-scroll-snap/scrollTo-scrollBy-snaps.html)
| Margin |old name [3]| Yes |
| Padding | Yes | Yes |
| Visibility | No | Yes | [demo page](http://syj10.github.io/scroll-snap-demo.html)
| Large Element| No | No |
| Snap-Stop | No | No |
[0] WebKit demo lists only the old syntax but the example use old and new so it works in Safari 11.
[1] Chrome scrollbar snapping only works for dragging
[2] Seem to be working only on viewport scrolling element but no inner scroller
[3] Safari is using scroll-snap-margin
## Firefox & Edge
Firefox and Edge still ship the old spefication, i.e., [`snappoints`](https://www.w3.org/TR/2016/WD-css-snappoints-1-20160329/).
# Path to Interop
Firefox has an [issue](https://bugzilla.mozilla.org/show_bug.cgi?id=1231777) to implement the new CR specification but there has not been any implementation progress as far I can see since the issue was filed two years ago. I didn't find any public info on Edge plans on this.
It will be great to find out more about intention of Firefox and Edge.
## Tests
Chrome has been upstreaming tests as we have been implementing the feature. See:
https://wpt.fyi/css/css-scroll-snap/
They cover key aspects but I suspect we need more tests covering edge cases. Hopefully there will be more tests as other implementations update to the new specification
## Communication to Authors on Usage of Old Properties
I wasn't about to find a lot of communication on how the spec has evolved and how common patterns of usage can be implemented in a way to work in both versions of the spec.
If we expect the old properties to continue being used for a while longer, I feel such communication may be valuable.
For example a horizontal carrousel can be implemented as follow:
``` css
.container {
overflow: x;
/* old spec */
scroll-snap-type: mandatory;
snap-destination: 50% 50%;
/* new spec */
scroll-snap-type: x mandatory;
}
.center-aligned-child {
/* old spec, probably also use -ms, and -webkit */
scroll-snap-coordinate: 50% 50%;
/* new spec */
scroll-snap-align: center;
}
.start-aligned-child {
/* old spec, probably also use -ms, and -webkit */
scroll-snap-coordinate: 0% 0%;
/* new spec */
scroll-snap-align: start none;
}
.end-aligned-child {
/* old spec, probably also use -ms, and -webkit */
scroll-snap-coordinate: 100% 100%;
/* new spec */
scroll-snap-align: end none;
}
```
In particular, I think we likely want to strongly discourage usage of `scroll-snap-points-{x, y}` from old spec since there is no good way to have closely matching behavior without lots of hacks and additional elements.
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/2523 using your GitHub account
Received on Tuesday, 10 April 2018 10:30:47 UTC