Rock笔记
~/rocknotes/articles/259.md article
// article · 前端

iOS 下,iframe 页面中的 position:fixed 定位无效的解决办法

bug现象

开发微信公众账号,需要使用iframe展示一个页面,点击这个页面中的按钮时,会弹出一个对话框,对话框使用fixed定位,关键布局信息如下所示:

.flo{
    position: fixed;
    top: 40%;
    right: 5px;
    z-index: 99;
    width: 10%;
}

在网页上、Android版微信中都没问题,但是iOS中,该fixed页面显示不正常。在iOS中,该弹出页面高度达到了4600px,而正常情况下应该为1000px左右,也就是说iOS在这个布局中,将整个页面包括滚动的高度都计算在内,而不是仅计算屏幕显示的高度。 

而fixed定位最重要的应用就是当页面滑动,使用该定位的元素也不会动,而是固定在屏幕的某个位置。 

修改height的值,将height变为固定值,发现该对话框固定在了页面的某个位置,而不是浏览器窗口的某个位置。


bug原因

查阅了部分资料,发现iOS系统,iframe下的fixed定位有问题。

bug解决

参考了网上的建议,对滚动部分设置高度:

var parentHeight = window.parent.innerHeight;
$('.contents').css({
  height: parentHeight + 'px',
  overflow: 'auto',
  '-webkit-overflow-scrolling': 'touch',
});

iOS设置高度后,页面滚动不流畅,所有设置了-webkit-overflow-scrolling样式,使其滚动流畅一些。 

而之所以使用父页面的innerHeight是因为iframe中获取innerHeight的值是错误的。 

window.parent.innerHeight也可以写为top.innerHeight。

回复// 0 replies

最新回复 ↓
// 暂无回复

回复功能沿用原详情页:前往原页面参与讨论 →