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

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

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

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


当前回答

2021年的解决方案是使用scrollbar-gutter,它将滚动条使用的空间永久地添加到元素中。

Use

.element-class {
   scrollbar-gutter: stable both-edges;
}

Both-edges是可选的。

参见https://caniuse.com/mdn-css_properties_scrollbar-gutter和https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-gutter

Overflow:不建议使用覆盖。

下面是一个代码依赖,用于澄清不同的可能性:https://codepen.io/waxolunist/pen/ExweBMz

其他回答

2021年的解决方案是使用scrollbar-gutter,它将滚动条使用的空间永久地添加到元素中。

Use

.element-class {
   scrollbar-gutter: stable both-edges;
}

Both-edges是可选的。

参见https://caniuse.com/mdn-css_properties_scrollbar-gutter和https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-gutter

Overflow:不建议使用覆盖。

下面是一个代码依赖,用于澄清不同的可能性:https://codepen.io/waxolunist/pen/ExweBMz

对于具有固定宽度的容器,纯CSS跨浏览器解决方案可以通过将容器包装到另一个div中并对两个div应用相同的宽度来实现。

#outer {
  overflow-y: auto;
  overflow-x: hidden;
  /*
   * width must be an absolute value otherwise the inner divs width must be set via
   * javascript to the computed width of the parent container
   */
  width: 200px;
}

#inner {
  width: inherit;
}

点击这里查看Codepen的示例

我的头部导航也有类似的问题。我的大多数页面都有足够的内容来触发滚动,除了一页。

我的头部导航有一个flexContainer,有2个子容器(中间有空格)。flexContainer有一个5rem左右填充。

头{padding-left: calc(100vw - 100%;)} 通过添加滚动条,将其添加到头部,从而使内容处于中心位置 向左的宽度。元素现在居中,但我们有 有效地缩小页眉宽度滚动条宽度。

flexContainer {padding: 0rem calc(5rem - calc((100vw - 100%)/2));} 我添加回滚动条宽度减少 flexContainer填充。

这确保我的内容保持在适当的位置,无论是否触发滚动。

您可以获取滚动条大小,然后对容器应用边距。

就像这样:

var checkScrollBars = function(){
    var b = $('body');
    var normalw = 0;
    var scrollw = 0;
    if(b.prop('scrollHeight')>b.height()){
        normalw = window.innerWidth;
        scrollw = normalw - b.width();
        $('#container').css({marginRight:'-'+scrollw+'px'});
    }
}

CSS删除h-滚动条:

body{
    overflow-x:hidden;
}

试着看看这个: http://jsfiddle.net/NQAzt/

编辑:这个答案目前还不太正确,请参考我的另一个答案,看看我在这里试图做什么。我正在努力解决它,但如果你能提供帮助,请在评论中这样做,谢谢!

使用右填充将减轻滚动条的突然出现

例子

从点状图中可以看出,无论滚动条是否存在,文本在换行前都会到达页面中的同一点。 这是因为当滚动条被引入时,填充隐藏在它后面,所以滚动条不会推送文本!