【发布时间】:2016-10-08 09:10:12
【问题描述】:
问题:
在 iOS 上,使用 -webkit-overflow-scrolling 时,可滚动区域的 z-index 会被忽略。如果两个带有-webkit-overflow-scrolling 的对象重叠,则滚动下方的对象,而不是上方显示的对象。
如何重现:
创建两个相互重叠的元素(例如position: absolute),其中一个具有更高的z-index 并添加
.selector
{
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
他们俩。两个元素都应该有足够的内容可以滚动。
额外添加
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
到您的<head>。然后将该页面添加到您的主屏幕并从那里启动它。
如果您随后尝试滚动上方的元素,则会滚动下方的元素。
MCVE:
或者,只需查看 this pen。从您的 iOS 设备启动 full 版本,将其添加到您的主屏幕并从那里启动。
环境:
在带有 iOS 9.1 和 iOS 9.3.2
的 iPhone 5 和 iPhone 6 上测试观察:
- 该问题仅在从主屏幕(固定应用)或 Xamarin Webview(可能与 UIWebView 和 WKWebView 有关)启动页面/应用时出现
- 在页面加载后更改设备方向(纵向/横向)后,问题得到修复,直到页面重新加载(也许重新触发布局已修复?)
- 通过 JS 将下部元素
overflow-y更改为hidden确实可以解决问题,但是切换overflow会导致重绘导致性能问题 - 从
html, body中删除height: 100%; width: 100%也可以解决问题,但是必须设置这些百分比值才能正常工作
需要一个适当的解决方案/解决方法来解决此问题,而不会造成任何麻烦的副作用。也将不胜感激解释为什么会发生这种情况。
【问题讨论】:
-
如果元素应用了 3d 变换,我也遇到过类似的 z-index 错误。目前我没有 iOS 设备来测试这个,但你可以尝试删除 3d 变换。
-
你的问题到底是什么?据我所知,iOS 上的 z-index 存在两个问题。一种是 z-index 元素以错误的顺序显示,另一种是上面描述的滚动错误的项目。
标签: html ios css scroll z-index