diff --git a/css-overflow-4/Overview.bs b/css-overflow-4/Overview.bs index 8867286427d..c9222d86c33 100644 --- a/css-overflow-4/Overview.bs +++ b/css-overflow-4/Overview.bs @@ -23,6 +23,7 @@ spec:css-pseudo-4; type:selector; text:::first-letter spec:css-pseudo-4; type:selector; text:::first-line spec:css-writing-modes-4; type:dfn; text:start spec:css-writing-modes-4; type:dfn; text:end +spec:css2; type:dfn; text:viewport
 url: https://drafts.csswg.org/selectors-3/#subject; type: dfn; text: subject;
@@ -1244,6 +1245,191 @@ Fragmentation of Overflow: the 'continue' property
 	This is regardless of whether this would cause any content after the [=clamp point=]
 	to be within the container's bounds.
 
+

+Overscroll Behaviors

+ +

+Scroll chaining and boundary default actions

+ +Operating Systems have rules for scrolling such as scroll chaining and +overscroll affordances. This specification does not mandate if and how scroll +chaining or overscroll affordances be implemented. This specification only +allows the content author to disable them if any are implemented. + +Scroll chaining is when scrolling is propagated from one +[=scroll container=] to an ancestor [=scroll container=] following the +[=scroll chain=]. Typically scroll chaining is performed starting at the event +target recursing up the [=containing block chain=]. When a [=scroll container=] +in this chain receives a scroll event or gesture it may act on it and/or pass it +up the chain. Chaining typically occurs when the [=scrollport=] has reached its +boundary. + +A scroll chain is the order in which scrolling is propagated from one +[=scroll container=] to another. The [=viewport=] participates in +[=scroll chaining=] as the document's {{Document/scrollingElement}}, both +regarding placement in the scroll chain as well as adhering to the chaining +rules applied to it. + + +Scroll boundary refers to when the scroll position of a +[=scroll container=] reaches the edge of the [=scrollport=]. If a scroll +container has no potential to scroll, because it does not [=overflow=] in the +direction of the scroll, the element is always considered to be at the scroll +boundary. + +Boundary default action refers to the user-agent-defined +default action performed when scrolling against the edge of the [=scrollport=]. +A local boundary default action is a [=boundary default action=] +which is performed on the [=scroll container=] without interacting with the +page, for example displaying a overscroll UI affordance. Conversely, a +non-local boundary default action interacts with the page, for +example scroll chaining or a navigation action. + + +

+Overscroll Behavior Properties

+ +The overscroll behavior controls the permitted +[=boundary default action=] for a [=scroll container=] element when its +[=scrollport=] reaches the boundary of its scroll box. + +The 'overscroll-behavior' property specifies the [=overscroll behavior=] for a +[=scroll container=] element. It allows the content author to specify that a +[=scroll container=] element must prevent scroll chaining and/or overscroll +affordances. + +An element that is not [=scroll container=] must accept but ignore the values of +this property. This property must be applied to all scrolling methods supported +by the user agent. + +Note: This property should provide guarantees that are, at least, as strong as +[=preventDefault=] for preventing both scroll chaining and overscroll. Doing +otherwise would cause content authors to use [=preventDefault=] instead. + +
+Name: overscroll-behavior
+Value: [ contain | none | auto ]{1,2}
+Initial: auto auto
+Applies to: scroll container elements
+Inherited: no
+Media: visual
+Computed value: see individual properties
+Animation type: discrete
+Canonical order: per grammar
+
+ + +The 'overscroll-behavior' property is a shorthand property that sets the +specified values of 'overscroll-behavior-x' and 'overscroll-behavior-y' in that +order. If only one value is specified, the second value defaults to the same +value. + +Values have the following meanings: + +
+
contain +
+ This value indicates that the element must not perform non-local boundary default actions + such as scroll chaining or navigation. The user agent must not perform scroll chaining to any + ancestors along the scroll chain regardless of whether the scroll originated at this + element or one of its descendants. This value must not modify the behavior of how local + boundary default actions should behave, such as showing any overscroll affordances. +
none +
+ This value implies the same behavior as contain and in + addition this element must also not perform local boundary default actions such as + showing any overscroll affordances. +
auto +
+ This value indicates that the user agent should perform the usual boundary default action + with respect to scroll chaining, overscroll and navigation gestures. +
+ +Note: In the case where a user agent does not implement scroll chaining and +overscroll affordances, these values will have no side effects for a compliant +implementation. + +Note: Programmatic scrolling is clamped and can not trigger any +[=boundary default actions=]. + +

+Overscroll and Positioned Elements

+ +This specification does not generally dictate what, if any, "overscroll" or +similar actions might occur as a [=local boundary default action=]. + +However, if a user agent does use "overscroll" behavior (that is, +allowing a scrollable element to be scrolled slightly "past the end" of its +scrollable area, usually with a "rubber-banding" effect after the scroll or drag +is completed), then the following applies: + +If an element uses [=fixed positioning=] and is positioned relative to the +[=initial containing block=], or is a [=sticky positioned=] element which is +currently stuck to the [=viewport=], then when the [=root scroller=] experiences +"overscroll", that element must not overscroll with the rest of the +document's content; it must instead remain positioned as if the scroller was at +its minimum/maximum scroll position, whichever it will return to when the +overscroll is finished. + +Even tho this can visually shift the fixed/sticky element relative to other +elements on the page, it must be treated purely as a visual effect, and not +reported as an actual layout/position change to APIs such as +{{Element/getBoundingClientRect()}}. + +Note: This behavior is because fixpos and viewport-stuck stickypos elements are +positioned relative to "the viewport", which is conceptually above the +root scroller in the page hierarchy (effectively, it's the [=scroll container=] +holding the root scroller). Thus, overscrolling the root scroller shouldn't +have any effect on them, just like how an abspos that is a child of a scroller +but whose abspos containing block is above the scroller isn't affected +by the scroller doing anything at all, including overscroll. + + +

+Physical Longhands for 'overscroll-behavior'

+ +
+Name: overscroll-behavior-x, overscroll-behavior-y
+Value: contain | none | auto
+Initial: auto
+Applies to: scroll container elements
+Inherited: no
+Logical property group: overscroll-behavior
+Percentages: N/A
+Media: visual
+Computed value: as specified
+Animation type: discrete
+Canonical order: per grammar
+
+ +The 'overscroll-behavior-x' property specifies the overscroll behavior in the horizontal +axis and the 'overscroll-behavior-y' property specifies the overscroll behavior in the +vertical axis. When scrolling is performed along both the horizontal and vertical axes at the +same time, the overscroll behavior of each respective axis should be considered +independently. + + +

+Flow-relative Longhands for 'overscroll-behavior'

+ +
+Name: overscroll-behavior-inline, overscroll-behavior-block
+Value: contain | none | auto
+Initial: auto
+Applies to: scroll container elements
+Inherited: no
+Logical property group: overscroll-behavior
+Percentages: N/A
+Media: visual
+Computed value: as specified
+Animation type: discrete
+Canonical order: per grammar
+
+ +These properties correspond to the 'overscroll-behavior-x' and +'overscroll-behavior-y' properties. The mapping depends on the element's +'writing-mode'. +

Appendix A: Possible extensions for ''scrollbar-gutter''