The overscroll-behavior-y property sets what the browser does when scrolling hits the physical vertical edge of a scroll container — top and bottom. Unlike the logical longhands, it does not flip with writing-mode.
Not deprecated and not experimental, but MDN marks it Limited availability: Safari support starts at 16, and the newer chain value is missing in Safari and older Chromium/Firefox builds.
Leave the page alone. Gestures at the top or bottom of the thread do not move the document behind.
Physical axis. Top and bottom stay top and bottom even if writing mode changes later.
Edge Cases & Pitfalls
If overscroll still moves the page, one of these is usually why.
overflow
It only applies to scroll containers
Without overflow that can scroll vertically, the property has nothing to control. Set overflow-y: auto on the same element.
logical
Y is physical, not logical
overscroll-behavior-y always means top and bottom. If you need an axis that follows writing mode, use overscroll-behavior-block instead.
chain
chain is newer
chain allows scroll chaining without bounce, but support is Limited availability. Prefer contain or none for production UIs today.
refresh
Pull-to-refresh needs none on the right box
To reduce page refresh on mobile overscroll, set none on the scrolling element that receives the gesture — often html or a full-page feed, not only a tiny inner panel.
Bottom line: Safe for auto, contain, and none in current evergreen browsers and Safari 16+. Treat chain as Limited availability. Internet Explorer has no support.
Remember
Key Takeaways
Role: control overscroll at the physical top and bottom edges of a scroll container.
Common pick:contain for modals and chat panels; none when bounce or pull-to-refresh must stop.
Initial value:auto. Not inherited. Needs a vertical scroll container.
One line:overscroll-behavior-y decides whether top/bottom overscroll chains out of a nested vertical scroll box.
Frequently Asked Questions
It controls what happens when scrolling reaches the physical top or bottom edge of a scroll container. It always targets the vertical axis, regardless of writing mode.
It is when scrolling past the top or bottom edge of one box continues scrolling a parent or the page behind it. contain and none stop that on the Y axis.
Use contain to stop vertical scroll chaining while still allowing local bounce. Use none when you also want to disable bounce and actions like pull-to-refresh.
overscroll-behavior-y always means top and bottom. overscroll-behavior-block follows writing mode, so it is vertical in English but horizontal in vertical writing modes.
No. Set it on the scroll container itself. The initial value is auto.
Chrome 63+, Firefox 59+, Safari 16+, and Edge 18+ support auto, contain, and none. The newer chain value needs Chrome 150+, Firefox 157+, or Edge 150+, and Safari does not support it yet. It is a browser CSS property, not a Node.js feature.