[英]Setting overflow-y: hidden; causes the page to jump to the top in Firefox
我有一些 javascript 可以處理我網站上的打開模式彈出窗口,它還將<html>
元素上的overflow-y
屬性設置為hidden
。 在 Chrome 和 IE 中,這按預期工作 - 滾動條隱藏,模式彈出窗口后面的頁面保持在相同的滾動位置。 當popup關閉時, overflow-y
設置為scroll
,頁面狀態和位置和之前一樣。
但是,在 Firefox 中,一旦將overflow-y
更改為hidden
,頁面滾動位置就會跳轉到最頂部,因此當關閉彈出窗口時,用戶的視圖已更改 - 不理想。
這個問題可以在這個jsfiddle上看到
這種行為有什么解決方案嗎?
不要在html
上使用overflow: hidden
,只在body
。 我遇到了同樣的問題,但通過刪除html
修復了它。
反而 :
$('body, html').css('overflow', 'hidden');
做 :
$('body').css('overflow', 'hidden');
在檢查器窗口中檢查后我遇到了同樣的問題,我注意到在重置 CSS 中,HTML 設置為
HTML {
overflow-y: scroll;
}
您可以通過將其設置為
HTML {
overflow-y: initial;
}
如果您不想觸摸重置 CSS 或只是評論它
插件和代碼絕對沒問題
將模態位置從絕對位置更改為固定位置:
#mymodal {
position: fixed
}
在不同的瀏覽器中有很多錯誤,而且功能無處不在,所以在修改 body 和 html 標簽上的樣式時要小心。
為了解決這個問題,我必須將正文的內容包裝到它自己的元素中並對其應用滾動限制:
var $content = $('<div/>').append($body.contents()).appendTo($body);
$content.css('overflow-y', 'hidden');
這是我能夠在不同的瀏覽器和設備上始終如一地工作的唯一方法。
我剛遇到這個問題。 我的解決方法是
/**
* Store the scroll top position as applying overflow:hidden to the body makes it jump to 0
* @type int
*/
var scrollTop;
$(selecor).unbind('click.openmenu').on('click.openmenu', function (e) {
// Stuff...
scrollTop = $('body').scrollTop() || $('html').scrollTop();
$('body,html').css({overflow: 'hidden'});
});
$(selector).unbind('click.closemenu').on('click.closemenu', function (e) {
// Stuff
$('body,html').css({overflow: 'initial'}).scrollTop(scrollTop);
});
然而,這並不能解決如果用戶調整視口大小會發生什么的問題。
編輯:我剛剛看到您的代碼,並且您使用了帶有 href="#" 的鏈接。 這很可能是原因。 我建議刪除 href 屬性或使用按鈕。
您應該考慮這可能不是由 css 本身引起的。 在我的例子中,我用一個鏈接<a href="#">open popup</a>
: <a href="#">open popup</a>
那么實際上導致跳轉到頂部的是鏈接的 href 屬性中的“#”。
我刪除了它並在我的 html 和 body 標簽中添加了一個 noscroll 類:
.noscroll {
overflow: hidden;
}
從一開始就保持身高 100% 對我來說解決了這個問題。
body{
height:100vh;
overflow:auto;
}
body.with-modal{
overflow:hidden;
}
使用 body 標簽而不是 html。
JS小提琴:- http://jsfiddle.net/SBLgJ/6/
JS 變化:-
$(document).ready(function() {
$('#middle a').on('click', function(e) {
e.preventDefault();
$('body').css('overflow-y', 'hidden');
});
});
CSS 更改:-
body {
overflow-y:scroll;
}
已報告此類行為的問題。 ( https://github.com/necolas/normalize.css/issues/71 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.