Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 537|回复: 0

ios下fixed回复框bug的解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-8-30 15:42:54 | 显示全部楼层 |阅读模式

    前几天做一个移动端的页面,要加个像微信那样附着在底部的回复框,按照做PC端网页的思路,首先是用fixed,在安卓上测了一下是好的,结果到朋友的iphone6p上就不行了,点击输入框之后它总会跳到屏幕中间去。

    后来才知道这是ios下一个普遍的bug,所以我决定把原因和解决方案整理一下,以方便后人。

    网上有的人说用那个iscroll.js来解决,不过那样会出现很多样式上的冲突,而且为了一个fixed的bug就动用一个js,未免有点大材小用了。


    原因

    ios下面,软键盘唤起后,页面的 fixed 元素将失效(即无法浮动,也可以理解为变成了 absolute 定位),所以当页面超过一屏且滚动时,失效的 fixed 元素就会跟随滚动了。

    解决方法

    • 三段式布局



    • 代码如下:
        
      <style>
          header, footer, main {
              display: block;
          }
      
          header {
              position: fixed;
              height: 50px;
              left: 0;
              right: 0;
              top: 0;
          }
      
          footer {
              position: fixed;
              height: 34px;
              left: 0;
              right: 0;
              bottom: 0;
          }
      
          main {
              /* main绝对定位,进行内部滚动 */
              position: absolute;
              top: 50px;
              bottom: 34px;
              /* 使之可以滚动 */
              overflow-y: scroll;
          }
      
          main .content {
              height: 2000px;
          }
          /* 元素内的滚动非常不流畅,滑动的手指松开后,滚动立刻停止,失去了原本的流畅滚动特性,给main加上如下代码即可。 */
          main {
          /* main绝对定位,进行内部滚动 */
          position: absolute;
          top: 50px;
          bottom: 34px;
          /* 使之可以滚动 */
          overflow-y: scroll;
          /* 增加该属性,可以增加弹性 */
          -webkit-overflow-scrolling: touch;
      }
      </style>
      <body class="layout-scroll-fixed">
          <!-- fixed定位的头部 -->
          <header>
      
          </header>
      
          <!-- 可以滚动的区域 -->
          <main>
              <div class="content">
              <!-- 内容在这里... -->
              </div>
          </main>
      
          <!-- fixed定位的底部 -->
          <footer>
              <input type="text" placeholder="Footer..."/>
              <button class="submit">提交</button>
          </footer>
      
      </body>
      

       可查看我的DEMO 

      这里是用了absolute来代替fixed效果,这是一个我认为比较好的解决方法,只要看仔细一点就没啥样式冲突问题。

      • JS监控输入框到屏幕顶的高度

        用js监控focus时的高度,然后控制变化,这个会出现回复框停留一段时间的问题。不建议用这种方法,具体代码网上有很多。

      • iscroll.js

        不在万不得已的情况下,我们尽量尝试一下不依赖第三方库的布局方案,注意别冲突掉样式和功能。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-27 15:13 , Processed in 0.072682 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表