我有一个小问题,试图保持我的。html页面在Chrome上的宽度一致。

例如,我有一个页面(1),其中有很多内容超出了视口的高度,因此该页面(1)上有一个垂直滚动条。在页面(2)上,我有相同的布局(菜单,div,…等),但内容更少,所以没有垂直滚动条。

问题在于,在第(1)页上,滚动条似乎将元素稍微推到左边(增加宽度?),而在第(2)页上,所有内容似乎都处于正中央。

我仍然是HTML/CSS/JS的初学者,我相信这并不难,但我没有运气找到解决方案。它在IE10和FireFox(无干扰滚动条)上都能正常工作,我只在Chrome上遇到过。


当前回答

目前我的另一个答案似乎不太正确(但我会继续尝试让它运行)。

但基本上你需要做的,也是它动态尝试做的,是将内容的宽度设置为略小于父滚动窗格的宽度。 因此,当滚动条出现时,它对内容没有影响。

这个例子展示了一种更hack的方式来实现这个目标,通过硬编码宽度,而不是试图让浏览器通过填充来为我们做。 如果这是可行的,这是最简单的解决方案,如果你不想要一个永久的滚动条。

其他回答

如果你有一些容器,你正在使用作为包装你的网站内容,比如导航和页脚,你可以添加以下内容:

min-height: 101vh;

这将“延长”你的页面1vh,以确保滚动条永远不会消失,宽度保持不变。

Safari和Chrome等Webkit浏览器在计算宽度时从可见页面宽度中减去滚动条宽度:100%或100vw。更多信息请参阅DM Rutherford的滚动和页面宽度。

试着用overflow-y: overlay代替。

你所需要做的就是添加:

html {
    overflow-y: scroll;
}

在你的CSS文件中,无论是否需要,都会有滚动条,尽管你不能滚动。

这意味着两者的视口宽度相同。

我发现我可以做加法

::-webkit-scrollbar { 
display: none; 
}

直接到我的css,它会使滚动条不可见,但仍然允许我滚动(至少在Chrome上)。当你不想在你的页面上有一个分散注意力的滚动条时,这很好!

在Chrome和Edge上遇到了同样的问题,滚动条的额外宽度(不是在FireFox上)。

项目中的逻辑是在悬停在某个容器上后停止滚动。所以我在body中添加了一个类:

    body.no-scrolling {
    overflow: hidden;
    }

这有助于防止滚动,但删除了滚动条。在FireFox中,这不是问题,但在Chrome和Edge中,内容会填充滚动条的空间,并使页面的内容向右移动。

所以,一个对我有效的解决方案:

    html{
    width: 100vw;
    }

该规则阻止内容在滚动条消失后立即移动,但增加了额外的宽度,并在页面底部显示滚动条。为了隐藏额外的宽度,我添加了:

     body{
     overflow-x: hidden;
     }

如果对你也有帮助,请告诉我。