我正在使用固定宽度的页面主体和自动边距将内容居中在页面的中央。当内容超出页面的高度并且浏览器添加滚动条时,自动边距会使内容向左跳动滚动条宽度的一半。
比较outerHeight和window.innerHeight是否是解决此问题的适当方法?还有其他解决方法吗?
我认为这应该足够解决问题了,但如果需要我回答其他问题,请告诉我。
编辑以澄清:我不想强制出现滚动条。
我正在使用固定宽度的页面主体和自动边距将内容居中在页面的中央。当内容超出页面的高度并且浏览器添加滚动条时,自动边距会使内容向左跳动滚动条宽度的一半。
比较outerHeight和window.innerHeight是否是解决此问题的适当方法?还有其他解决方法吗?
我认为这应该足够解决问题了,但如果需要我回答其他问题,请告诉我。
编辑以澄清:我不想强制出现滚动条。
我只是在这里留下这个链接,因为它对我来说似乎是一种优雅的解决方案:
https://aykevl.nl/2014/09/fix-jumping-scrollbar
他所做的是添加了这个CSS:
@media screen and (min-width: 960px) {
html {
margin-left: calc(100vw - 100%);
margin-right: 0;
}
}
当滚动条出现时,这将使内容向左移动与滚动条大小相同的距离,因此当滚动条出现时,内容已经移动。 这适用于应用了overflow: auto;
到html
标签的居中内容。媒体查询会在移动设备上禁用此功能,因为边距宽度的差异非常明显。
您可以在此处查看示例:
overflow: auto
的 div 上执行它?对于那些本身不是视口的完整宽度的元素,是否有类似于 100vw
的等效物? - poshest使用以下CSS:
body { overflow-y: scroll; }
始终强制显示滚动条:body { overflow-y: scroll; }
在html
上设置它在所有浏览器中可能不起作用,或者如果滚动条出现,则可能会出现双重滚动条。
如果没有滚动条,则添加一个类,将您的页面右边距增加约30像素。
这个过程是:
html {
overflow-y: scroll !important;
}
body {
overflow-anchor: none;
}
这个规则是最近添加的,旨在减少浏览器对溢出内容的默认反应方式不同而导致的差异性。例如,Chrome 默认启用了溢出锚定,而 Firefox 则没有。设置此属性将强制两个浏览器以相同的方式运行。
https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-anchor
通过CSS的最佳方式,它将相应地显示/隐藏滚动条,解决跳跃问题,在每个浏览器上都可以工作。
html {
overflow: hidden;
}
body {
overflow-y: auto;
-webkit-overflow-scrolling:touch;
}