- From: Majid Valipour via GitHub <sysbot+gh@w3.org>
- Date: Mon, 27 Jul 2020 16:22:29 +0000
- To: public-css-archive@w3.org
Thanks @ogerchikov for making me realize that the thresholds also has a conflict! On naming decision, I tried to summarized my thoughts based on latest suggestion. My perspective is the the CSS syntax of scroll-timeline is the one that will be used more often so we should optimize for that if there is no good option for both. And so far *nothing proposed is great in both JS and CSS*. With this premise, my initial concern about the property name conflicting with others is not as important since we don't spell out either `offset` or `threshold` in the CSS syntax. Instead the double "scroll" issues is more jarring in CSS syntax. ```css @scroll-timeline { scroll-offsets: 10% 90%; } ``` Based on above my preference would be: 1. offsets 1. thresholds 1. scrollOffsets 1. ranges Another alternative is to have different names in css and js but I like to avoid that. Here are all the suggested options in multiple real examples in JS and CSS with my opinion on pros and cons. ## offsets Pros: - Avoids double "scroll" in the name issue. (Mainly an issue CSS syntax) Cons: - Possibly confusing if element-based scroll offsets have threshold of their own. (Only an issue in JS syntax) - Not immediately obvious what is the value unit i.e., scroll dimensions. ```js const scrollTimeline = new ScrollTimeline({ source: scroller, offsets: [CSS.percent(20), CSS.percent(50), CSS.percent(80)] }); const scrollTimelineWithOffset = new ScrollTimeline({ source: scroller, offsets: [{value: CSS.percent(20), offset: 0} , {value: CSS.percent(50), offset: 0.5}, {value: CSS.percent(80), offset:1}] }); const scrollTimelineWithElements = new ScrollTimeline({ source: scroller, offsets: [{target: image, threshold: 0}, {target: image, threshold: 0.8}, {target: image, threshold: 1}] }); console.log(scrollTimeline.offsets); ``` ```css @scroll-timeline basic { source: selector(#scroller); offsets: 20, 50, 80; } @scroll-timeline with-offsets { source: selector(#scroller); offsets: 20 0%, 50 50%, 80 100%; } @scroll-timeline with-elements { source: selector(#scroller); offsets: selector(#image) 0, selector(#image) 0.8, selector(#image) 1; } ``` ## scrollOffsets Pros: - Immediately obvious what is the value unit i.e., scroll dimensions. Cons: - Double "scroll" which is more jarring in css syntax. (Mainly an issue in CSS syntax) - Possibly confusing if scroll offsets have offsets of their own. (Only an issue in JS syntax) ```js const scrollTimeline = new ScrollTimeline({ source: scroller, scrollOffsets: [CSS.percent(20), CSS.percent(50), CSS.percent(80)] }); const scrollTimelineWithOffset = new ScrollTimeline({ source: scroller, scrollOffsets: [{value: CSS.percent(20), offset: 0} , {value: CSS.percent(50), offset: 0.5}, {value: CSS.percent(80), offset:1}] }); const scrollTimelineWithElements = new ScrollTimeline({ source: scroller, scrollOffsets: [{target: image, threshold: 0}, {target: image, threshold: 0.8}, {target: image, threshold: 1}] }); console.log(scrollTimeline.scrollOffsets); ``` ```css @scroll-timeline basic { source: selector(#scroller); scroll-offsets: 20, 50, 80; } @scroll-timeline with-offsets { source: selector(#scroller); scroll-offsets: 20 0%, 50 50%, 80 100%; } @scroll-timeline with-elements { source: selector(#scroller); scroll-offsets: selector(#image) 0, selector(#image) 0.8, selector(#image) 1; } ``` ## thresholds Pros: - Avoids double "scroll" in the name issue. (Mainly an issue in CSS syntax) Cons: - Possibly confusing if element-based scroll offsets have threshold of their own. (Only an issue in JS syntax) - Not immediately obvious what is the value unit (i.e., scroll dimensions). ```js const scrollTimeline = new ScrollTimeline({ source: scroller, thresholds: [CSS.percent(20), CSS.percent(50), CSS.percent(80)] }); const scrollTimelineWithOffset = new ScrollTimeline({ source: scroller, thresholds: [{value: CSS.percent(20), offset: 0} , {value: CSS.percent(50), offset: 0.5}, {value: CSS.percent(80), offset:1}] }); const scrollTimelineWithElements = new ScrollTimeline({ source: scroller, thresholds: [{target: image, threshold: 0}, {target: image, threshold: 0.8}, {target: image, threshold: 1}] }); console.log(scrollTimeline.thresholds); ``` ```css @scroll-timeline basic { source: selector(#scroller); thresholds: 20, 50, 80; } @scroll-timeline with-offsets { source: selector(#scroller); thresholds: 20 0%, 50 50%, 80 100%; } @scroll-timeline with-elements { source: selector(#scroller); thresholds: selector(#image) 0, selector(#image) 0.8, selector(#image) 1; } ``` ## ranges Pros: - No conflict with threshold or offset. (Only an issue in JS syntax) - Avoids double scroll in the name issue. (Mainly an issue in CSS syntax) Cons: - IMHO not semantically correct as we are not specifying ranges. - Not immediately obvious what is the value unit i.e., scroll dimensions. ```js const scrollTimeline = new ScrollTimeline({ source: scroller, ranges: [CSS.percent(20), CSS.percent(50), CSS.percent(80)] }); const scrollTimelineWithOffset = new ScrollTimeline({ source: scroller, ranges: [{value: CSS.percent(20), offset: 0} , {value: CSS.percent(50), offset: 0.5}, {value: CSS.percent(80), offset:1}] }); const scrollTimelineWithElements = new ScrollTimeline({ source: scroller, ranges: [{target: image, threshold: 0}, {target: image, threshold: 0.8}, {target: image, threshold: 1}] }); console.log(scrollTimeline.thresholds); ``` ```css @scroll-timeline basic { source: selector(#scroller); ranges: 20, 50, 80; } @scroll-timeline with-offsets { source: selector(#scroller); ranges: 20 0%, 50 50%, 80 100%; } @scroll-timeline with-elements { source: selector(#scroller); ranges: selector(#image) 0, selector(#image) 0.8, selector(#image) 1; } ``` -- GitHub Notification of comment by majido Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/4912#issuecomment-664497771 using your GitHub account
Received on Monday, 27 July 2020 16:22:31 UTC