我有一个网站与中心对齐的DIV。现在,一些页面需要滚动,一些不需要。当我从一种类型移动到另一种类型时,滚动条的出现将页面移向一侧几个像素。有没有什么方法可以避免这种情况,而不显式地在每个页面上显示滚动条?
当前回答
@media screen and (min-width: 1024px){
body {
min-height: 700px
}
}
其他回答
如果改变大小或加载一些数据后,它是添加滚动条,然后你可以尝试以下,创建类和应用这个类。
.auto-scroll {
overflow-y: overlay;
overflow-x: overlay;
}
我试过溢出滚动,但它不适合我的情况。滚动条仍然添加了一些(白色)填充。有效的方法是将宽度从100vw更改为100%,但对于高度,可以使用100vh。所以这个:
const Wrapper = styled.div`
min-height: 100vh
`
const Parent = styled.div`
width: 100%
`
const Children = styled.div`
width: 100%
`
编辑 我设置了两次宽度,因为父组件包含侧边栏,而子组件包含侧边栏。根据您的用例,您可以设置一次。
总结
我认为有三种方法——每一种都有自己的特点:
Markus T.提到的滚动条槽。 溢出:kunalkamble提到的覆盖 添加间距与calc(100vw - 100%)提到的Rapti
以下是《StackBlitz》的演示版本
按“Toggle height”可以看到内容的移动。
滚动条男孩
这是有限的支持,但通过@support媒体查询,我们可以使用这和overflow-y: scroll的组合:
html {
overflow-y: scroll;
}
@supports (scrollbar-gutter: stable) {
html {
overflow-y: auto;
scrollbar-gutter: stable;
}
}
这样,内容就永远不会改变。
这个解决方案的“问题”是滚动条总是有一个固定的空间。
溢出:覆盖 有限的支持,它显然隐藏了它覆盖的任何东西。需要特别注意的是,确保没有重要的东西被隐藏(也包括缩放和文本大小的变化)。
可与滚动条槽结合使用:
html {
overflow-y: scroll;
}
@supports (scrollbar-gutter: stable) {
html {
overflow-y: auto;
scrollbar-gutter: stable;
}
}
@supports (overflow-y: overlay) {
html {
overflow-y: overlay;
scrollbar-gutter: auto;
}
}
可以使用一些负边距和overflow-x: hidden,但在某些情况下,这有隐藏重要内容的风险。小屏幕,自定义字体/缩放大小,浏览器扩展等。
Calc (100vw - 100%)
这可以在RTL支持下完成,如下所示:
html[dir='ltr'] main {
padding-left: calc(100vw - 100%);
}
html[dir='rtl'] main {
padding-right: calc(100vw - 100%);
}
在本例中,<main>是居中内容的容器。
只要居中的容器小于<main>,这里的内容就不会移动。但一旦它是100%的容器填充将被引入。查看StackBlitz演示,点击“切换宽度”。
这种解决方案的“问题”是,您需要媒体查询来防止“小屏幕”上的填充,即使在小屏幕上(当滚动条应该可见时),也会发生一些移动,因为没有空间容纳100%的内容和滚动条。
结论 使用滚动条槽也许结合覆盖。如果你绝对不想要空空格,尝试使用媒体查询的calc解决方案。
我使用一些jquery来解决这个问题
$('html').css({
'overflow-y': 'hidden'
});
$(document).ready(function(){
$(window).load(function() {
$('html').css({
'overflow-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溢出,并在视口足够宽以包含固定宽度的内容时保持居中内容
推荐文章
- 使伸缩项目正确浮动
- 如何取消最大高度?
- 形式内联内的形式水平在twitter bootstrap?
- 自定义元素在HTML5中有效吗?
- 如何选择在最后一个子元素之前的元素?
- 如何触发自动填充在谷歌Chrome?
- CSS变换,锯齿边缘在铬
- 创建圈div比使用图像更容易的方法?
- 强迫孩子服从父母的弯曲边界在CSS
- 为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?
- 在CSS中@apply是什么?
- 在网页上用鼠标模拟震颤(例如帕金森病)?
- Bootstrap抛出Uncaught错误:Bootstrap的JavaScript需要jQuery
- 如何改变文本区域的边框颜色:焦点
- 我如何设置背景颜色为文本的宽度,而不是整个元素的宽度,使用CSS?