阻止滚动条添加到Chrome上的页面宽度

Ace*_*mad 110 html css google-chrome scrollbar

我有一个小问题试图让我的.html页面在Chrome上保持一致的宽度,例如我有一个页面(1),其中有很多内容溢出了视口(右词?)的高度,所以有一个垂直滚动条在那页(1).在页面(2)我有相同的布局(菜单,div,...等)但内容较少,所以没有垂直滚动条.

问题是,在页面(1)上,滚动条似乎将元素略微向左推(加到宽度?),而所有内容都显示在页面(2)的中心位置

我仍然是HTML/CSS/JS的初学者,我相信这并不是那么困难,但我没有找到解决方案的运气.它确实在IE10和FireFox(非干扰滚动条)上工作,我只在Chrome上遇到过这种情况.

sim*_*Dos 101

旧线程但仍然相关!

这仅适用于WebKit浏览器,但我非常喜欢它.将表现得像auto在其他浏览器上.

.yourContent{
   overflow-y: overlay;
}
Run Code Online (Sandbox Code Playgroud)

这将使滚动条仅作为叠加显示,从而不影响元素的宽度!

  • 但它已被弃用 (3认同)
  • 我更新了解决方案以反映这一点。有点难过:P (2认同)

Chr*_*ian 79

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

使用

.element-class {
   scrollbar-gutter: stable both-edges;
}
Run Code Online (Sandbox Code Playgroud)

both-edges是可选的。

另请参阅https://caniuse.com/mdn-css_properties_scrollbar-gutterhttps://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-gutter

overflow: overlay已弃用。

这是一个用于澄清不同可能性的代码笔:https://codepen.io/waxolunist/pen/ExweBMz

  • 非常好,终于有了比所有这些黑客更好的解决方案。“both-edges”在我的文本区域的左侧造成了填充。所以我只是“scrollbar-gutter: stable;” (7认同)

Hiv*_*ve7 55

您需要做的就是添加:

html {
    overflow-y: scroll;
}
Run Code Online (Sandbox Code Playgroud)

在你的css文件中,因为这将是滚动条是否需要它虽然你只是无法滚动

这意味着视口将具有相同的宽度

  • 这在许多情况下添加了第二个垂直滚动条. (7认同)
  • 所以,我不得不为两者添加滚动条?是不是有办法忽略垂直滚动条的宽度?谢谢 ! (3认同)
  • 溢出-y:滚动;即使没有可滚动元素,也会在所有视口中添加/显示滚动条。 (2认同)

Lwy*_*yrn 36

您可以获取滚动条大小,然后将余量应用于容器.

像这样的东西:

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'});
    }
}
Run Code Online (Sandbox Code Playgroud)

用于删除h滚动条的CSS:

body{
    overflow-x:hidden;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 此解决方案禁用滚动 (4认同)
  • scrollHeight是元素的总高度.你看到了什么,隐藏了什么.例如:您的窗口高度为500px,主体内容为900px.显示500px,但隐藏了另外400px,滚动条将显示此重新显示的像素.因此条件就像"如果所有内容的高度大于视点高度,则向身体添加边距".对不起,我的英语不好 (3认同)
  • 我在回复中添加了一小段css来防止它:) (2认同)
  • 伙计,你用这段代码救了我,我已经失去了 20 个小时试图弄清楚我应该做什么!谢谢哥们儿! (2认同)

Tra*_*oud 26

大概

html {
    width: 100vw;
}
Run Code Online (Sandbox Code Playgroud)

正是你想要的.

  • 在过去的 36 小时里,我一直在摆弄我的滚动条。我有一些有效的不同解决方案,但引发了其他问题。这是第一个既有效又允许我在其他地方使用普通滚动条的解决方案。谢谢你。 (3认同)
  • 这非常有效,有人可以解释这是如何工作的吗? (2认同)
  • 解决方案不错,但它可以添加水平滚动。 (2认同)

Kyl*_*vic 18

在计算宽度时,Safari和Chrome等Webkit浏览器会从可见页面宽度中减去滚动条宽度:100%或100vw.更多关于DM卢瑟福的滚动和页面宽度.

请尝试使用overflow-y: overlay.

  • 请不要在多个问题上发布相同的答案.发布一个好的答案,然后投票/标志将其他问题作为重复项结束.如果问题不重复,*定制您对问题的答案.* (7认同)

fuz*_*_77 12

我发现我可以添加

::-webkit-scrollbar { 
display: none; 
}
Run Code Online (Sandbox Code Playgroud)

直接到我的CSS,它会使滚动条不可见,但仍允许我滚动(至少在Chrome上).当你不想在你的页面上有一个令人分心的滚动条时,这对你有好处!

  • 虽然http://stackoverflow.com/questions/9251354/css-customized-scroll-bar-in-div有点冒险但不是跨浏览器的解决方案 (4认同)

小智 6

body {
    width: calc( 100% );
    max-width: calc( 100vw - 1em );
}
Run Code Online (Sandbox Code Playgroud)

也适用于默认滚动条。可以添加:

overflow-x: hidden;
Run Code Online (Sandbox Code Playgroud)

以确保水平滚动条对于父框架保持隐藏。除非您的客户希望这样做。


Rob*_*ene 5

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

单击此处查看Codepen上的示例