每当浏览器添加滚动条时,内容都会水平跳转
Content jumps horizontally whenever browser adds a scrollbar
我使用固定宽度的正文和自动页边距将内容置于页面中间。当内容超过页面高度并且浏览器添加了滚动条时,自动边距会迫使内容向左跳转滚动条宽度的一半。
将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
标记的居中内容。媒体查询对手机禁用了这一功能,因为页边空白宽度的差异非常明显。
你可以在这里看到一个例子:
http://codepen.io/anon/pen/NPgbKP
使用此CSS:
body { overflow-y: scroll; }
我自己也遇到过这个问题,我找到了两种方法来解决它:
-
始终强制显示滚动条:
body { overflow-y: scroll; }
在html
上设置它并不适用于所有浏览器,或者如果滚动条出现,可能会给两个滚动条。 -
如果没有滚动条,请添加一个类,在页面的右边距添加约30个像素。
我选择了选项1,但我不确定它是否适用于所有浏览器(尤其是旧浏览器)。
Facebook使用选项2。
您可以强制滚动条始终显示:
http://www.mediacollege.com/internet/css/scroll-always.html
流程为:
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;
}
- 访问布局信息是否也会导致浏览器重排
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 有时数据是't显示在浏览器中
- 使图像在单击时展开到不大于浏览器
- fetch() 函数未在 Ubuntu Chromium 浏览器上定义
- 不同浏览器中的空白字符正则表达式行为
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- Windows形成web浏览器控件和Javascript更改的DOM
- 如何临时暂停浏览器渲染,然后恢复整个页面
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 移动浏览器-如何删除拖动到水平滚动
- JavaScript 中的跨浏览器水平和垂直滚动事件
- 每当浏览器添加滚动条时,内容都会水平跳转
- 当相对于可用的浏览器窗口没有水平空间时,以相反的方向打开CSS子菜单
- 问题与chrome浏览器使用jquery UI可拖动水平滚动网站
- 如何防止浏览器在水平滚动时后退/前进
- 跨浏览器CSS水平导航与下拉菜单-有这样的事情