IOS中Fixed元素包含输入框时的解决方案

1,403 阅读1分钟
原文链接: www.lovchun.com

源码示例:IOS-Fixed-Input-Tutorial

使用 position: fixed; 来固定父容器(模态框)在页面中的位置,父容器(模态框)中包含一个或多个 input 输入框的子节点:

在 IOS 上,在键盘被唤起时,由于模态框绝对定位,导致输入框焦点乱跑,输入不正常等问题:

软键盘唤起后,页面的 fixed 元素将失效(即无法浮动,也可以理解为变成了 absolute 定位),所以当页面超过一屏且滚动时,失效的 fixed 元素就会跟随滚动了,因此我们需要使用相对定位进行布局。

基本的 DOM 结构:

不要用绝对定位作用于包含输入框的容器中,如果可以,也不要让该容器居中。因为键盘被唤起时,会将模态框顶上去,建议硬编码一个距离顶部的高度,如:40px 或者 20%。

修复后的效果:

在移动端开发中,针对 IOS 及 Android 滚动兼容问题,尽量做局部滚动,不要做全局滚动。

滚动相关兼容性可以参阅:移动web之滚动篇 | AlloyTeam

 

 

 

 

 

当然,如果 UI 或者 PM 很好沟通,避免“父容器需要固定,并且包含输入法”的这种场景设计是最好的。