IOS环境下固定定位position:fixed带来的问题与解决方案

当我们在开发移动端页面时使用固定定位position:fixed时会发现,在IOS的safari浏览器或原生APP下运行会出现几个问题: 

1.页面滑动失去惯性,即当我们滑动页面后松开手指,页面会立即停止。 

2.使用fixed定位的元素会随着页面的滑动而抖动的像是犯病了一样。 

一、-webkit-overflow-scroll:touch解决滑动无惯性 

   哪个元素/页面使用了fixed定位,就给哪个元素添加该属性。 

   注意:添加完后一定要在真机上测试,不要在浏览器如谷歌浏览器提供的移动端调试模式下测试…… 

但有时候使用fixed定位的元素是某个事件触发后而动态在当前页面上生成的一个页面,如果此时给该弹出层加上这个样式后,可能会引发其他冲突BUG等,所以在我实际开发过程中,我会使用事件来动态添加更改该样式,如:


//驱动弹窗显示的事件

$('.btnShow').on('click',function(){ 

 //弹窗显示 

 $('.iosWeb').show();

    //给该弹窗添加ios safari专用润滑剂    

$('.iosWeb').css('-webkit-overflow-scroll','touch');

})

//隐藏弹窗的事件

$('.btnHide').on('click',function(){   

 //弹窗隐藏    $('.iosWeb').hide();

    //去掉ios safari专用润滑剂    

$('.iosWeb').css('-webkit-overflow-scroll','auto');

})

使用第一个方法我们顺利的解决了页面滑动不流畅的问题,但如果一个使用了该样式的页面有某个使用了fixed定位的吸顶/吸底的头部/尾部,我们会发现页面虽然滑动无阻但fixed定位的头部和尾部也跟着起飞了,这我们就很不开心了,所以通常我们可以这样写该页面的布局:

//我是吸顶头部

.header{

    width:100%;    height:50px;    position:fixed;    top:0px;

}

//我是中间要滑动的部分

.main{

    width:100%; 

   height:auto;

    position:absolute; 

   padding-top:50px;/*top值为header的高*/

   padding-bottom:50px;/*bottom值为footer的高*/

    box-sizing:border-box;/*这里改变盒子模型为怪异盒模型,这样padding值不会增加main的高度*/    overflow-y:scroll;

}

//我是吸底尾部

.footer{

    width:100%;    height:50px;    position:fixed;    bottom:0px;

}

然后html我们这样写

<div class="header">

</div>

<div class="main">

</div>

<div class="footer">

</div>

这样布局后,我们滑动的页面其实是中间main元素,而header和footer自始至终都没有移动过丝毫。

希望这篇文章可以帮助到你:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,845评论 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,879评论 1 45
  • 移动端业务开发,iOS 下经常会有 fixed 元素和输入框(input 元素)同时存在的情况。 但是 fixed...
    新林吃遍世界阅读 4,532评论 0 0
  • 学会使用CSS选择器熟记CSS样式和外观属性熟练掌握CSS各种选择器熟练掌握CSS各种选择器熟练掌握CSS三种显示...
    七彩小鹿阅读 6,359评论 2 66
  • $【傲雪卡盟使用教程大全】〖http://www.jianshu.com/p/8af06045c25a〗《http...
    暗烨杰少阅读 487评论 0 0