我有一个网站与中心对齐的DIV。现在,一些页面需要滚动,一些不需要。当我从一种类型移动到另一种类型时,滚动条的出现将页面移向一侧几个像素。有没有什么方法可以避免这种情况,而不显式地在每个页面上显示滚动条?
当前回答
扩展Rapti的答案,这应该是一样的工作,但它增加了更多的边距正文的右侧,并隐藏它与负html边距,而不是增加额外的填充,可能会影响页面的布局。这样,实际页面(在大多数情况下)不会发生任何更改,代码仍然具有功能。
html {
margin-right: calc(100% - 100vw);
}
body {
margin-right: calc(100vw - 100%);
}
其他回答
使用calc(100vw - 100%)发布的解决方案是正确的,但有一个问题:即使你调整了窗口的大小,使内容充满了整个视口,你也将永远有一个滚动条大小的左边边距。
如果你试图用媒体查询来解决这个问题,你会有一个尴尬的瞬间,因为当你调整窗口大小时,边缘不会逐渐变小。
这里有一个解决方案,AFAIK没有任何缺点:
而不是使用margin: auto来居中你的内容,使用这个:
body {
margin-left: calc(50vw - 500px);
}
将500px替换为内容max-width的一半(所以在这个例子中,内容max-width是1000px)。现在内容将保持居中,边距将逐渐减少,直到内容填满视口。
为了防止边距在视口小于max-width时变为负值,只需添加一个媒体查询,如下所示:
@media screen and (max-width:1000px) {
body {
margin-left: 0;
}
}
就是这样!
我试图修复可能由twitter bootstrap .modal-open类应用于body引起的相同问题。解决方案html {overflow-y: scroll}不起作用。我发现的一个可能的解决方案是添加{width: 100%;宽度:100vw}到HTML元素。
我不知道这是否是一个旧帖子,但我有同样的问题,如果你想垂直滚动,你应该尝试溢出-y:滚动
我不这么认为。但样式体与溢出:滚动应该做。不过你好像知道。
在尝试了上述大多数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%宽度-否则滚动条覆盖在右侧的内容。
推荐文章
- 使伸缩项目正确浮动
- 如何取消最大高度?
- 形式内联内的形式水平在twitter bootstrap?
- 自定义元素在HTML5中有效吗?
- 如何选择在最后一个子元素之前的元素?
- 如何触发自动填充在谷歌Chrome?
- CSS变换,锯齿边缘在铬
- 创建圈div比使用图像更容易的方法?
- 强迫孩子服从父母的弯曲边界在CSS
- 为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?
- 在CSS中@apply是什么?
- 在网页上用鼠标模拟震颤(例如帕金森病)?
- Bootstrap抛出Uncaught错误:Bootstrap的JavaScript需要jQuery
- 如何改变文本区域的边框颜色:焦点
- 我如何设置背景颜色为文本的宽度,而不是整个元素的宽度,使用CSS?