在iframe中具有“固定”位置的元素不会在Safari中呈现

时间:2017-04-06 16:28:02

标签: css macos browser safari webkit

我们遇到的问题是,iframe 中position: fixed; 的元素未正确呈现。我们只在Safari中的macOS上注意到这一点。

以下是它的外观:

enter image description here

以下是macOS上的Safari(页面加载时):

enter image description here

在页面加载时,顶部和底部栏不可见。它们在DOM占用空间并且可以被点击但是它们没有被浏览器“渲染”。如您在上图中所示,条形显示为空白区域。

如果我们通过JS,CSS强制重绘或通过调整浏览器的大小来显示条形图。但是,我们并不是在寻找如何强制重绘的解决方案。我们的问题是为什么这首先发生?

你可以在这里找到一个实例:

https://testing.enuvo.ch/user/collect/#collector#/user/overlay

PS:它并不总是发生。有时,在调整浏览器大小并再次尝试时,它将正确显示。我们希望您能重现这个问题。

3 个答案:

答案 0 :(得分:6)

因此position: fixedz-index存在一些问题。一些较旧的浏览器对它的处理方式略有不同,并以不同的方式处理堆叠上下文。

经过一些试验和错误后,我设法通过添加:

来使用注入的样式表
#ol-main-header,
#cl-footer {
  -webkit-transform: translateZ(0);
}

此外,您应该可以删除不必要的z-index: 99999。希望有所帮助。

答案 1 :(得分:0)

我试过你的例子,是的,这真的很奇怪。 您是否考虑过缓存问题? Safari具有缓存iframe的独特行为,也许您的问题来自于这些。

您是否可以尝试更改此iframe的HTTP标头以禁用此缓存?

Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0 

以下是PHP中的一个示例:

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies

答案 2 :(得分:-3)

你必须在iframe文件中写css而不是你的视图文件。