我有一个网站与中心对齐的DIV。现在,一些页面需要滚动,一些不需要。当我从一种类型移动到另一种类型时,滚动条的出现将页面移向一侧几个像素。有没有什么方法可以避免这种情况,而不显式地在每个页面上显示滚动条?


当前回答

@kashesandr的解决方案对我有用,但为了隐藏水平滚动条,我为身体添加了一个样式。这里是完整的解决方案:

CSS

<style>
/* prevent layout shifting and hide horizontal scroll */
html {
  width: 100vw;
}
body {
  overflow-x: hidden;
}
</style>

JS

$(function(){
    /**
     * For multiple modals.
     * Enables scrolling of 1st modal when 2nd modal is closed.
     */
    $('.modal').on('hidden.bs.modal', function (event) {
      if ($('.modal:visible').length) {
        $('body').addClass('modal-open');
      }
    });
});

JS唯一的解决方案(当第二模式从第一模式打开):

/**
 * For multiple modals.
 * Enables scrolling of 1st modal when 2nd modal is closed.
 */
$('.modal').on('hidden.bs.modal', function (event) {
  if ($('.modal:visible').length) {
    $('body').addClass('modal-open');
    $('body').css('padding-right', 17);
  }
});

其他回答

与公认的答案相反,即使内容没有溢出屏幕,也建议在浏览器窗口上使用永久滚动条,我更喜欢使用:

html{
  height:101%;
}

这是因为如果内容溢出,滚动条的外观更有意义。

这个比这个更有意义。

我已经在我的一个网站上解决了这个问题,通过显式地在javascript中设置主体的宽度为视口大小减去滚动条的宽度。我使用这里记录的基于jQuery的函数来确定滚动条的宽度。

<body id="bodyid>

var bodyid = document.getElementById('bodyid');
bodyid.style.width = window.innerWidth - scrollbarWidth() + "px";

扩展Rapti的答案,这应该是一样的工作,但它增加了更多的边距正文的右侧,并隐藏它与负html边距,而不是增加额外的填充,可能会影响页面的布局。这样,实际页面(在大多数情况下)不会发生任何更改,代码仍然具有功能。

html {
    margin-right: calc(100% - 100vw);
}
body {
    margin-right: calc(100vw - 100%);
}

滚动总是显示,可能是不好的布局。

尝试使用css3限制主体宽度

body {
    width: calc(100vw - 34px);
}

Vw是视口的宽度(看这个链接了解一些解释) 在css3中进行Calc计算 34px代表双滚动条宽度(如果你不相信固定大小,请参阅此计算)

像这样简单地设置容器元素的宽度就可以了

width: 100vw;

这将使该元素忽略滚动条,并与背景颜色或图像一起工作。