深入探究iOS下fixed定位导致的问题

本文深入探讨了iOS中fixed定位元素在滚动页面时出现的各类问题,包括元素脱离内容区域、显示消失等。通过分析滚动填充颜色的机制,揭示了iOS滚动回弹和定位基准值的问题。在iOS下,fixed定位的元素显示深度失效,元素显示层次取决于代码顺序而非布局。文章提供了常规和最终解决方案,包括使用absolute定位和禁用-webkit-overflow-scrolling以解决滚动冲突和卡顿问题。
摘要由CSDN通过智能技术生成

讨论背景

众所周知,fixed元素在IOS下的表现是糟糕的,fixed元素在滚动页面中使用会出现各种奇怪的问题,在微信浏览器中使用就更甚(如:页面滚动,fixed元素与页面相互分离;页面滚动,fixed元素消失等)。这些表现过于离奇,显得没有逻辑,一时间很难找到对应的解决方案。
所以笔者决定从一个简单列表页出发,把遇到的各种奇怪问题都罗列出来,并探究其出现的原因。以便在开发中规避这些问题。

假定我们的需求是做一个列表页,列表页的顶部放置一些「其他」信息,底部放置一个「创建」按钮,中间显示「项目」列表内容。
设计稿大概是这样。

设计稿

实现方案

根据需求,我们分别制作了三种解决方案。分别是

  • 利用fixed定位,将「按钮」放在滚动区「项目列表」外面,解决方案示例1
  • 利用fixed定位,将「按钮」放在滚动区「项目列表」里面,解决方案示例2
  • 利用absolute定位,将「按钮」放在滚动区「项目列表」里面,并用「项目列表」去填充它所占的内容,解决方案示例3

分别在PC和IOS浏览器中运行这几个demo,我们发现,这些demo在PC中的表现都是符合设计需求的。但在IOS浏览器中运行,就会各种出现各种的问题,分别对应这几个现象。

  • 解决方案示例1:从「其他」内容区域开始触碰屏幕,进行页面滚动,「按钮」'脱离'页面内容区域。
    问题1对应二维码
  • 解决方案示例2:从「其他」内容区域开始触碰屏幕,进行页面滚动,「按钮」消失了。
    问题2对应二维码
  • 解决方案示例3:「其他」区域直接消失不见了。
    问题3对应二维码

要解释这几个现象,我们需要从颜色填充说起。

滚动填充的颜色

  • 颜色填充示例1

    • 重点代码:在这个示例里面,我们不对「项目列表」的高度进行限制,直接让内容在body中进行滚动。然后将body的背景颜色设置为橘红色。
    • 操作:进入页面后直接向上拉动页面,拉动到不可拖动为止。
    • 现象:我们发现「项目列表」的绿色区域下面,显示了body的背景颜色橘红色。
    • 说明:填充的颜色是可以定制的。
    • 疑问:这个颜色填充的区域会不会是body的延伸呢?
      颜色填充1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值