I'm having an issue with the overflow-y
property in Chrome.
Even though I've set it to hidden
, I can still scroll the page with the mouse wheel.
Here is my code:
html,_x000D_
body {_x000D_
overflow-y: hidden;_x000D_
}_x000D_
_x000D_
#content {_x000D_
position: absolute;_x000D_
width: 100%;_x000D_
}_x000D_
_x000D_
.step {_x000D_
position: relative;_x000D_
height: 500px;_x000D_
margin-bottom: 500px;_x000D_
}
_x000D_
<body>_x000D_
<div id="content">_x000D_
<div class="step">this is the 1st step</div>_x000D_
<div class="step">this is the 2nd step</div>_x000D_
<div class="step">this is the 3rd step</div>_x000D_
</div>_x000D_
</body>
_x000D_
Does anybody know how to block the vertical scrolling in Chrome?
Thanks!
This question is related to
css
google-chrome
scroll
scrollbar
overflow
Find out the element which is larger than the body (element which is causing the page to scroll) and just set it's position to fixed. NOTE: I'm not talking to change the position of draggable elements. Draggable elements can be dragged out of body only when there's an element larger than body (mostly in width).
The correct answer is, you need to set JUST body to overflow:hidden. For whatever reason, if you also set html to overflow:hidden the result is the problem you've described.
Another solution I found to work is to set a mousewheel handler on the inside container and make sure it doesn't propagate by setting its last parameter to false and stopping the event bubble.
document.getElementById('content').addEventListener('mousewheel',function(evt){evt.cancelBubble=true; if (evt.stopPropagation) evt.stopPropagation},false);
Scroll works fine in the inner container, but the event doesn't propagate to the body and so it does not scroll. This is in addition to setting the body properties overflow:hidden and height:100%.
Use:
overflow: hidden;
height: 100%;
position: fixed;
width: 100%;
Setting a height on your body and html of 100% should fix you up. Without a defined height your content is not overflowing, so you will not get the desired behavior.
html, body {
overflow-y:hidden;
height:100%;
}
Ok so this is the combination that worked for me when I had this problem on one of my websites:
html {
height: 100%;
}
body {
overflow-x: hidden;
}
Try this when you want to "fix" your body's scroll:
jQuery('body').css('height', '100vh').css('overflow-y', 'hidden');
and this when you want to turn it normal again:
jQuery('body').css('height', '').css('overflow-y', '');
Technically, the size of your body
and html
are wider than the screen, so you will have scrolling. You will need to set margin:0;
and padding:0;
to avoid the scrolling behavior, and add some margin/padding to #content
instead.
What works for me on /FF and /Chrome:
body {
position: fixed;
width: 100%;
height: 100%;
}
overflow: hidden
just disables display of the scrollbars. (But you can put it in there if you like to).
There is one drawback I found: If you use this method on a page which you want only temporarily to stop scrolling, setting position: fixed
will scroll it to the top.
This is because position: fixed uses absolute positions which are currently set to 0/0.
This can be repaired e.g. with jQuery:
var lastTop;
function stopScrolling() {
lastTop = $(window).scrollTop();
$('body').addClass( 'noscroll' )
.css( { top: -lastTop } )
;
}
function continueScrolling() {
$('body').removeClass( 'noscroll' );
$(window).scrollTop( lastTop );
}
Source: Stackoverflow.com