#main-wrapper) with overflow-y: auto, overscroll-behavior: contain, and -webkit-overflow-scrolling: touch. html and body to overflow: hidden and overscroll-behavior: none to disable bounce at the root while preserving pull-to-refresh inside the scroll container.To disable scroll bouncing (rubber banding) at the top and bottom of a Webflow site without breaking pull-to-refresh on mobile devices, you need to apply very specific scroll control techniques compatible with mobile Safari and Chrome.
overflow: hidden on <body> or <html> usually prevents bounce but also disables pull-to-refresh, which you want to preserve.
Use this CSS to limit overscroll to a specific container instead of completely disabling it:
#main-wrapper) around all your content.<head>:
<style>
html, body {
height: 100%;
overflow: hidden;
overscroll-behavior: none;
}
#main-wrapper {
height: 100%;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
</style>
#main-wrapper, but allow the native browser overscroll at the root level.overscroll-behavior: contain on the scroll container, not none on body/html. This blocks the bounce but keeps the browser’s own behaviors.
Important:
overflow: hidden on body and html unless you move actual scrolling to a container like #main-wrapper.-webkit-overflow-scrolling: touch; is important for smooth scrolling on iOS.
In the Webflow Designer:
main-wrapper.main-wrapper to:
If you encounter “rubber banding” still due to 300ms taps or weird tapping behaviors:
<head>:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
To suppress scroll rubber-band effect in Webflow while keeping mobile pull-to-refresh:
#main-wrapper) and move overflow behavior into it.overscroll-behavior: contain on your wrapper.-webkit-overflow-scrolling: touch for smooth iOS scrolling.overflow: hidden on body unless you're redirecting scrolling inside a container.
This approach works across Safari, Chrome, and mobile browsers without disabling pull-to-refresh.