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


当前回答

我试过溢出滚动,但它不适合我的情况。滚动条仍然添加了一些(白色)填充。有效的方法是将宽度从100vw更改为100%,但对于高度,可以使用100vh。所以这个:

const Wrapper = styled.div`
   min-height: 100vh
`

const Parent = styled.div`
   width: 100%
`

const Children = styled.div`
   width: 100%
`

编辑 我设置了两次宽度,因为父组件包含侧边栏,而子组件包含侧边栏。根据您的用例,您可以设置一次。

其他回答

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

html {
  overflow-y: scroll;
}

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

html{
  height:101%;
}

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

这个比这个更有意义。

body {
  scrollbar-gutter: stable both-edges;
}

新的css规范,将有助于滚动条重新定位的方式: https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-gutter

在尝试了上述大多数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%宽度-否则滚动条覆盖在右侧的内容。

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