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


当前回答

overflow-y:scroll是正确的,但你应该使用它与html标签,而不是身体,否则你会得到一个双滚动条在ie7 所以正确的css应该是:

html {
  overflow-y: scroll;
}

其他回答

我不这么认为。但样式体与溢出:滚动应该做。不过你好像知道。

我不知道这是否是一个旧帖子,但我有同样的问题,如果你想垂直滚动,你应该尝试溢出-y:滚动

用这个来扩展答案:

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

一位评论者建议添加左填充以保持居中:

body {
    padding-left: 17px;
    width: calc(100vw - 17px);
}

但是如果你的内容比视口宽,事情看起来就不对了。为了解决这个问题,你可以使用媒体查询,像这样:

@media screen and (min-width: 1058px) {
    body {
        padding-left: 17px;
        width: calc(100vw - 17px);
    }
}

1058px =内容宽度+ 17 * 2

这让水平滚动条处理x溢出,并在视口足够宽以包含固定宽度的内容时保持居中内容

overflow-y:scroll是正确的,但你应该使用它与html标签,而不是身体,否则你会得到一个双滚动条在ie7 所以正确的css应该是:

html {
  overflow-y: scroll;
}

在尝试了上述大多数CSS或基于js的解决方案后,这些解决方案在我的情况下都不起作用,只是想把它加起来。 我的解决方案适用于滚动条必须在事件中消失的情况(例如,单击按钮,因为你刚刚打开了一个全屏菜单,这应该会阻止页面的滚动)。

当下面的样式应用于将overflow-y变为hidden的元素时(在我的例子中是body标签),这应该是有效的:

body {
  overflow-x: hidden;
  width: 100vw;
  margin-right: calc(100vw - 100%);
}

说明:你的主体标签的宽度是100vw(所以它包括滚动条的宽度)。

通过设置margin-right,只有当垂直滚动条可见时才应用边缘(因此页面内容实际上不在滚动条下面),这意味着一旦overflow-y发生更改,页面内容将不会重新定位。

注意:此解决方案仅适用于不能水平滚动的页面。

在Chrome 89.0, Firefox 87.0, Safari 14.0.3上测试

更新:不幸的是,它只适用于居中的容器,不采取100%宽度-否则滚动条覆盖在右侧的内容。