微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Safari 不尊重位置:在返回选项卡时固定在 iFrame 中

如何解决Safari 不尊重位置:在返回选项卡时固定在 iFrame 中

在 Safari(使用 14.1.1)而不是 Firefox 或 Chrome 中,在移开并返回页面后,div 的 position:fixed 元素的作用类似于 position:absolute。 [编辑] 该页面位于 iFrame 中。 Safari 尊重位置:固定在窗口重新聚焦时,如果页面不是 iFramed(jsfiddle iFrames 呈现的 html)。

奇怪的是,Safari Inspector 在应该出现 fixed:position div 的地方显示了丢失的 fixed:position div 的边界框。

参见示例 jsfiddle。测试:打开 jsfiddle,另一个选项卡,然后返回 jsfiddle 查看位置问题(在 Safari 中,在 Chrome 和 FF 中有效)

/* style */
#my-modal-container {
  min-height: 2400px;
  background-image: linear-gradient(red,yellow);
}

#my-modal {
  position: fixed;
  bottom: 13px;
  background-color: blue;
  height: 100px;
  overflow: hidden;
}

<!-- html -->
<div id="my-modal-container">
 <div id="my-modal">
   The paragraph in the modal div:
   <p>
   Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum.
   </p>
 </div>
</div>

/* javascript to scroll to middle of container div */
window.scroll(0,1000);

https://jsfiddle.net/khdolan/cqnkary6/

我能够将 div 捕捉回其固定位置的唯一方法是手动滚动 iFramed 父 div。查询边界框偏移不会自动修复显示,就像在类似问题中一样。边界框值显示了边界框的 div 应该在哪里,但 div 视觉部分实际上在滚动页面的上方(在一个位置:绝对类区域)。

我发现了很多关于 Safari iOS iFrame position:fixed issues 的帖子,但这个 position:fixed 有效 在第一次加载时,至少在 PC 上是这样。它在移动和返回时中断。

我有一个 hacky 解决方案将 div 更改为 position:absolute 并将顶部设置为 window.scrollY。但是,我真的很想知道为什么 position:fixed 在 Safari 中的选项卡重新激活期间中断。

非常感谢任何指导。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。