The overscroll-behavior property controls what happens when scrolling reaches the edge of a scroll container. It can stop scroll chaining to a parent and reduce bounce or pull-to-refresh style effects.
The initial value is auto. It is a shorthand for overscroll-behavior-x and overscroll-behavior-y. One keyword sets both axes; two keywords set x then y. The element must be a scroll container (usually via overflow).
Limited availability.
Not deprecated. Standard-track CSS. MDN marks it Limited availability mainly because Safari support starts at Safari 16. Core keywords auto, contain, and none work in modern Chromium, Firefox, and Safari 16+. chain is newer — check support before relying on it. Not a runtime API.
Use the default keyword.auto is the initial value and keeps normal browser boundary behavior.
Scroll past the edge. Once the inner box cannot move further, the gesture may continue on the outer box.
That continuation is chaining. Compare this demo with contain and none in the live preview.
Choose intentionally. Default is fine for simple pages; nested UI usually wants contain or none.
Edge Cases & Pitfalls
If overscroll still feels wrong, check these first.
scroll
Only works on scroll containers
Setting the property on a non-scrolling element does nothing useful by itself. Make the box scrollable with overflow first. An iframe element is not a scroll container — set it on the iframe document’s html/body instead.
modal
overflow: hidden is always “at the edge”
A box with no scrollable overflow is treated as already at its boundary. contain or none on it can still block chaining to ancestors — handy for open dialogs.
contain
contain is not the same as none
Both stop scroll chaining. none also aims to prevent bounce / pull-style effects. Pick contain when a soft bounce is acceptable.
chain
chain support is newer
chain allows chaining but blocks bounce. Prefer auto, contain, or none for broad teaching demos unless you have confirmed support.
safari
Older Safari lacks support
Support in Safari starts at version 16. On older iOS Safari, chaining and bounce may still happen even if your CSS looks correct.
Compatibility
Browser Support
overscroll-behavior is a browser CSS property for scroll-boundary behavior. Node.js, Deno, and Bun do not apply it.
✓ Limited availability
overscroll-behavior
auto, contain, and none: Chrome 63+, Firefox 59+, Safari 16+, Edge 18+/79+. Internet Explorer has no support. The chain keyword is newer than the core three.
86%Modern browser reach
Google Chrome63+
Full support
Mozilla Firefox59+
Full support
Apple Safari16+
Full support
Microsoft Edge18+
Full support
Opera50+
Full support
Samsung Internet8.2+
Full support
Internet ExplorerNo
No support
overscroll-behaviorLimited · Safari 16+
Bottom line: Safe for modern Chromium, Firefox, and Safari 16+. Treat older Safari and IE as unsupported. Prefer auto / contain / none for teaching; verify chain before shipping. Not a runtime API.
Remember
Key Takeaways
Role: control scroll chaining and bounce when a scroll container hits its edge.
Initial value:auto. Needs a scroll container to matter.
contain vs none: both stop chaining; none also targets bounce effects.
Shorthand: one value for both axes, or x then y.
One line: use contain or none on nested scroll panels so scrolling past the edge does not drag the page behind.
Frequently Asked Questions
It controls what happens when scrolling reaches the edge of a scroll container: whether scroll continues to a parent (scroll chaining) and whether bounce or pull-to-refresh style effects can run.
The initial value is auto. The browser keeps its normal boundary behavior, including scroll chaining where supported.
Scroll chaining is when you keep scrolling after hitting the edge of one scroll area and a parent scroll container (or the page) starts scrolling instead.
Use contain to stop scroll chaining while still allowing local bounce effects. Use none when you want to stop both chaining and bounce effects.
chain allows scroll chaining to continue outside the container but prevents overscroll bounce effects. Support is newer than auto, contain, and none.
auto, contain, and none work in Chrome 63+, Firefox 59+, Safari 16+, and modern Edge. MDN marks the property Limited availability mainly because older Safari versions lack it. It is a browser CSS property, not a Node.js feature.