I completely agree, the point here isn't to follow the spec. The reason I think we should follow the spec in this case is that it is more ergonomic and predictable when applying overscroll-behavior doesn't just work sometimes. I think that developers are rightfully confused by those cases where it doesn't work which is why we have had several bugs filed about it.
I have reached out to a few web developers. If you know anyone who might have thoughts on this please loop them in as well. On Mon, Sep 15, 2025 at 2:00 PM Alex Russell <slightly...@chromium.org> wrote: > I'd love for web developers who have been paying close attention to scroll > behaviour to weigh in here. This has been a deep well of sadness in a > cross-browser sense, and they might have opinions as to the benefits and > costs we aren't able to easily see. Spec compliance can either be great or > pointless, and it would be helpful to get a sense from folks building > complex UIs which this is. > > Best, > > Alex > > On Friday, September 12, 2025 at 10:53:50 AM UTC-7 Robert Flack wrote: > >> > is there any plausible pattern where web developers could depend on the >> current behavior intentionally? >> >> The change in behavior comes in roughly three patterns: >> >> 1. overscroll-behavior: contain | none is specified on an element >> with overflow: hidden. In these cases the overscroll-behavior used to >> have no effect, scrolls would propagate past the element to ancestor >> scrollers. In practice, when a developer has specified this they likely >> intended to prevent scroll propagation, however due to the implementation >> it had no effect. Authors typically try to do this to prevent scrolling >> while a modal dialog is open from scrolling the content behind it, e.g. as >> in the example posted to the bug >> <https://issues.chromium.org/issues/41371072> >> https://codepen.io/rctneil/pen/rJYONj. >> 2. The author specified overscroll-behavior: contain | none but on an >> element with overflow-y: scroll | auto (but implicit overflow-x: >> hidden). In this case, they may have accidentally applied >> overscroll-behavior to both axes and not realized that by spec this >> prevents overscroll propagation in both axes. I observed this on >> https://lichess.org/ though blocking horizontal scrolls on the open >> menu would not break using the site. >> 3. The author specified overscroll-behavior: contain | none on an >> element with overflow: scroll | auto. In this case, we have the >> unpredictable behavior that when you have overflow it prevents >> propagation, >> but if your containing element is large enough for its content then we >> don't. This is the common case for things like scrolling in a chat widget >> ( >> demo <https://output.jsbin.com/helovikizu>, bug >> <https://issues.chromium.org/issues/40748098>) or in an embedded >> frame (bug <https://issues.chromium.org/issues/40736788>). >> >> Case 1 and 2 are sort of the same, overflow: hidden now preventing scroll >> propagation, but in case 1 it never did anything before so it feels similar >> to an author using a property that doesn't work yet. >> >> If we want to be conservative, we could only change the behavior for >> cases where it is currently layout dependent, i.e. case 3 overflow: auto >> | scroll. This would be an improvement however it wouldn't help with >> case 1 where you want to prevent scrolling from your component without >> risking that containing element becoming scrollable. Cases 1 and 2 are >> possible that developers are relying on this being incorrectly ignored and >> not preventing scroll propagation on overflow: hidden, similar to for >> example ignoring left or top on position: static. >> >> That said, I do think it would be more useful and predictable for it to >> apply to all scroll containers as it is spec'd. >> >> On Fri, Sep 12, 2025 at 4:15 AM Philip Jägenstedt <foo...@chromium.org> >> wrote: >> >>> Hey Rob, >>> >>> Since the use counter is 8%, looking at 10 random popular sites doesn't >>> reduce the upper bound of breakage by a whole lot. Using the rule of >>> three <https://en.wikipedia.org/wiki/Rule_of_three_(statistics)> gives >>> 95% confidence that the rate of breakage is between 0 and 30%. But 30% of >>> 8% is still a huge number when it comes to potential breakage. (Reducing >>> this to a reasonable number with more random sampling isn't really feasible >>> either, you'd need to test 800 sites with only negatives to get down to >>> 0.03% if my math is right.) >>> >>> The fact that the change seems to make things work better and aligns >>> with apparent developer intention is great. But is there any plausible >>> pattern where web developers could depend on the current behavior >>> intentionally? >>> >>> In a situation like this I think we should also consider how many sites >>> we fix and not just how many we break. If we have high confidence that many >>> sites will be improved but can't find any that would regress, then that >>> seems like a good trade even if some regressions do surface. >>> >>> If other vendors are interested in making the same change and there's >>> clear developer demand, I think we should try it, with a Finch kill switch >>> in place. >>> >>> Best regards, >>> Philip >>> >>> On Thu, Sep 11, 2025 at 10:13 PM Robert Flack <fla...@chromium.org> >>> wrote: >>> >>>> Note that this is a repost of >>>> https://groups.google.com/a/chromium.org/g/blink-dev/c/p2edIq4J-eQ/m/5MxPnuT8AwAJ >>>> as an I2S instead of PSA as I am seeking and will await LGTMs considering >>>> the potential compat risk. >>>> >>>> On the associated bug I have looked at a sampling of 10 popular sites >>>> affected by the overscroll-behavior change on httparchive >>>> <https://issues.chromium.org/issues/41371072#comment45> and found it >>>> to either not impact them or be beneficial: >>>> 1. https://lichess.org/ On smaller screens the `#topnav` element opens >>>> in a menu. The application of overscroll behavior seems to be there to >>>> prevent scrolling the content and so this site will be improved by the >>>> change. >>>> 2. https://cardgames.io/ Seems to just be the body element that has >>>> overscrollBehavior set. This shouldn't be affected. >>>> 3. https://open.spotify.com/ The body and "your library" panel fit >>>> into this case. I think this change would apply the intended behavior as >>>> they do not seem to intend for the scroll to propagate. >>>> 4. https://www.accuweather.com/ Only the body has overscroll behavior >>>> specified. >>>> 5. https://www.ikea.com/ Their mobile menu `#top-mobile-menu` has >>>> overscroll-behavior on it. This is presumably to prevent accidental pull to >>>> refresh while scrolling through the menu and would be fixed by this change. >>>> 6. https://www.tiktok.com/explore The side nav has contain >>>> overscroll-behavior. With this change you would no longer be able to scroll >>>> the main page by scrolling on top of the sidebar. This seems to be the >>>> intention but is not currently being honored. >>>> 7. https://x.com/ Only the root element seems to have >>>> overscroll-behavior defined. >>>> 8. https://store.epicgames.com/ I'm unable to find the affected element >>>> 9. https://www.airbnb.com/ There are several scrolling containers with >>>> overscroll-behavior defined however I think these are only "not scrollable" >>>> while the page is loading. By the time the user interacts with them they >>>> have scrollable overflow and so are unaffected. The usage also seems to >>>> indicate they would not want scroll to chain past those containers. >>>> 10. https://www.expedia.com/ I'm not able to find where the property >>>> is used. >>>> >>>> In terms of developer demand, there are many bugs that have been duped >>>> into https://issues.chromium.org/issues/41371072 all concerned that >>>> the incorrect behavior currently implemented in all browsers prevents using >>>> it for the intended purposes. In particular, developers want to be able to >>>> use overscroll-behavior without the unpredictability of whether it applies >>>> depending on the layout of their scrolling content. >>>> >>>> Common uses for this include, >>>> 1. Preventing scrolling in inner widgets from chaining to document >>>> scrolls >>>> 2. Preventing scrolling on a dialog covering the page from chaining to >>>> and scrolling the page >>>> 3. Preventing scrolling on a menu from chaining to and scrolling the >>>> page. >>>> >>>> Right now, authors have to carefully ensure that they have overflow: >>>> auto and some scrolling content and then presumably hide the scrollbar in >>>> cases where they are only adding overflow: auto; to allow >>>> overscroll-behavior to apply. >>>> >>>> On Thu, Sep 11, 2025 at 4:06 PM Robert Flack <fla...@chromium.org> >>>> wrote: >>>> >>>>> Contact emailsfla...@chromium.org, perryuw...@gmail.com >>>>> >>>>> Specification >>>>> https://www.w3.org/TR/css-overscroll-1/#propdef-overscroll-behavior >>>>> >>>>> Summary >>>>> >>>>> The overscroll-behavior applies to all scroll container elements, >>>>> regardless of whether those elements currently have overflowing content or >>>>> are user scrollable. Developers can use overscroll-behavior to prevent >>>>> scroll propagation on an `overflow: hidden` backdrop or an `overflow: >>>>> auto` >>>>> element without needing to consider whether it will currently be >>>>> overflowing. >>>>> >>>>> >>>>> Blink componentBlink>Scroll >>>>> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3EScroll%22> >>>>> >>>>> Web Feature IDoverscroll-behavior >>>>> <https://webstatus.dev/features/overscroll-behavior> >>>>> >>>>> TAG reviewNone >>>>> >>>>> TAG review statusNot applicable >>>>> >>>>> Risks >>>>> >>>>> >>>>> Interoperability and Compatibility >>>>> >>>>> This should be implemented on other browsers as well, as it matches >>>>> the specification. However, until this happens there are compatibility >>>>> risks that some sites may over accidentally set overscroll-behavior on >>>>> elements which don't currently apply today (either overflow: auto or not >>>>> having overflow) and will start applying, or that developers will rely on >>>>> this behavior and have accidental scroll chaining in other browsers until >>>>> they implement it as well. This change will affect a large number of sites >>>>> per https://chromestatus.com/metrics/feature/timeline/popularity/5596. >>>>> I have done compat analysis of many of the top sites affected by this in >>>>> https://issues.chromium.org/issues/41371072#comment45 and found it to >>>>> either not have a meaningful impact or to better honor the developer >>>>> specified intent. >>>>> >>>>> >>>>> *Gecko*: No signal >>>>> >>>>> *WebKit*: No signal >>>>> >>>>> *Web developers*: No signals >>>>> >>>>> *Other signals*: >>>>> >>>>> Ergonomics >>>>> >>>>> This improves the ergonomics of overscroll-behavior, fixing the >>>>> current unpredictable layout dependent behavior we have today. >>>>> >>>>> >>>>> Activation >>>>> >>>>> It may be difficult for developers to take advantage of this fix >>>>> before it is adopted in other browsers as it is likely not possible to >>>>> feature detect. They could remove pre-existing hacks to get this >>>>> functionality (i.e. ensuring 1px overflow) on supporting chromium >>>>> browsers. >>>>> >>>>> >>>>> WebView application risks >>>>> >>>>> Does this intent deprecate or change behavior of existing APIs, such >>>>> that it has potentially high risk for Android WebView-based applications? >>>>> >>>>> None >>>>> >>>>> >>>>> Debuggability >>>>> >>>>> None >>>>> >>>>> >>>>> Will this feature be supported on all six Blink platforms (Windows, >>>>> Mac, Linux, ChromeOS, Android, and Android WebView)?Yes >>>>> >>>>> Is this feature fully tested by web-platform-tests >>>>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md> >>>>> ?Yes >>>>> >>>>> >>>>> https://wpt.fyi/results/css/css-overscroll-behavior/overscroll-behavior-without-overflow.html?label=experimental&label=master&aligned >>>>> >>>>> >>>>> Flag name on about://flagsNone >>>>> >>>>> Finch feature nameOverscrollBehaviorRespectedOnAllScrollContainers >>>>> >>>>> Rollout planWill ship enabled for all users >>>>> >>>>> Requires code in //chrome?False >>>>> >>>>> MeasurementThe OverscrollBehaviorOnNonScrollableScrollContainer >>>>> feature counter measures how often this new behavior is or would be >>>>> triggered. >>>>> https://chromestatus.com/metrics/feature/timeline/popularity/5596 >>>>> >>>>> Sample links >>>>> https://ebidel.github.io/demos/chatbox.html >>>>> https://codepen.io/rctneil/pen/rJYONj >>>>> >>>>> Estimated milestones >>>>> >>>>> No milestones specified >>>>> >>>>> >>>>> Anticipated spec changes >>>>> >>>>> Open questions about a feature may be a source of future web compat or >>>>> interop issues. Please list open issues (e.g. links to known github issues >>>>> in the project for the feature specification) whose resolution may >>>>> introduce web compat/interop risk (e.g., changing to naming or structure >>>>> of >>>>> the API in a non-backward-compatible way). >>>>> None >>>>> >>>>> Link to entry on the Chrome Platform Status >>>>> https://chromestatus.com/feature/5129635997941760?gate=5124735842910208 >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "blink-dev" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to blink-dev+unsubscr...@chromium.org. >>>> To view this discussion visit >>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAJh39TPripgF_DY4adqs9wbtQV8XRTVdXER3SOR0-52SczULBA%40mail.gmail.com >>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAJh39TPripgF_DY4adqs9wbtQV8XRTVdXER3SOR0-52SczULBA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscr...@chromium.org. To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAJh39TPkb0z%2BvW9yo_JQP0q1o54Saa0jkEp9%2Bq6%3DQhHdw7pWRw%40mail.gmail.com.