我有一个小问题,试图保持我的。html页面在Chrome上的宽度一致。
例如,我有一个页面(1),其中有很多内容超出了视口的高度,因此该页面(1)上有一个垂直滚动条。在页面(2)上,我有相同的布局(菜单,div,…等),但内容更少,所以没有垂直滚动条。
问题在于,在第(1)页上,滚动条似乎将元素稍微推到左边(增加宽度?),而在第(2)页上,所有内容似乎都处于正中央。
我仍然是HTML/CSS/JS的初学者,我相信这并不难,但我没有运气找到解决方案。它在IE10和FireFox(无干扰滚动条)上都能正常工作,我只在Chrome上遇到过。
我不能对第一个答案发表评论,而且已经很久了……但这个演示有一个问题:
if(b.prop('scrollHeight')>b.height()){
normalw = window.innerWidth;
scrollw = normalw - b.width();
$('#container').css({marginRight:'-'+scrollw+'px'});
}
b.prop('scrollHeight')总是等于b.height(),
我认为应该是这样的:
if(b.prop('scrollHeight')>window.innerHeight) ...
最后我推荐一个方法:
html {
overflow-y: scroll;
}
:root {
overflow-y: auto;
overflow-x: hidden;
}
:root body {
position: absolute;
}
body {
width: 100vw;
overflow: hidden;
}
我用这种方法解决了滚动条的类似问题:
首先禁用垂直滚动条设置它的:
overflow-y: hidden;
然后用固定的位置做一个div,高度等于屏幕高度,使它的宽度变薄,看起来像滚动条。这个div应该是垂直滚动的。现在在这个div中创建另一个与文档高度(包含所有内容)相同的div。现在你所需要做的就是给容器div添加一个onScroll函数,并在div滚动时滚动主体。代码如下:
HTML:
<div onscroll="OnScroll(this);" style="width:18px; height:100%; overflow-y: auto; position: fixed; top: 0; right: 0;">
<div id="ScrollDiv" style="width:28px; height:100%; overflow-y: auto;">
</div>
</div>
然后在页面加载事件中添加这个:
JS:
$( document ).ready(function() {
var body = document.body;
var html = document.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);
document.getElementById('ScrollDiv').style.height = height + 'px';
});
function OnScroll(Div) {
document.body.scrollTop = Div.scrollTop;
}
现在滚动div就像滚动body,而body没有滚动条。
在Chrome和Edge上遇到了同样的问题,滚动条的额外宽度(不是在FireFox上)。
项目中的逻辑是在悬停在某个容器上后停止滚动。所以我在body中添加了一个类:
body.no-scrolling {
overflow: hidden;
}
这有助于防止滚动,但删除了滚动条。在FireFox中,这不是问题,但在Chrome和Edge中,内容会填充滚动条的空间,并使页面的内容向右移动。
所以,一个对我有效的解决方案:
html{
width: 100vw;
}
该规则阻止内容在滚动条消失后立即移动,但增加了额外的宽度,并在页面底部显示滚动条。为了隐藏额外的宽度,我添加了:
body{
overflow-x: hidden;
}
如果对你也有帮助,请告诉我。
我的头部导航也有类似的问题。我的大多数页面都有足够的内容来触发滚动,除了一页。
我的头部导航有一个flexContainer,有2个子容器(中间有空格)。flexContainer有一个5rem左右填充。
头{padding-left: calc(100vw - 100%;)}
通过添加滚动条,将其添加到头部,从而使内容处于中心位置
向左的宽度。元素现在居中,但我们有
有效地缩小页眉宽度滚动条宽度。
flexContainer {padding: 0rem calc(5rem - calc((100vw - 100%)/2));}
我添加回滚动条宽度减少
flexContainer填充。
这确保我的内容保持在适当的位置,无论是否触发滚动。