在做移动端业务开发时,经常碰到fixed元素和输入框同时存在的情况。在手机软键盘唤起的情况下,会造成原本fixed定位的元素跟随软键盘而上浮,对整体布局造成冲击。来看这样一个栗子直观的感受一下这个bug。

问题描述:

开发一个创业板转签页面,预期效果图是这样的。

红色矩形区域为使用fixed布局的内容,其css代码为{width:100%;position:fixed;bottom:0;left:0},这看起来并没有什么问题,但在手机软键盘唤起进行输入的时候,红色矩形区域跟随软键盘而浮动起来,这时候是这样的:

底部的规则栏跟着键盘上浮,虽说还是保持了在屏幕底部,但严重影响了用户体验,也不方便进行输入。经查阅资料,发现isScroll.js可以较好的解决fixed定位引起的问题,但是单独为了一个页面而引入第三方库显然不利于提升页面性能。尽可能不依赖第三方库来简化实现方式。

解决思路:

①不使用fixed布局,则必然要用到margin等来调整位置,但是这会引起和其他兄弟页面子页面的风格不一致,对此站点内每个页面进行改动势必增加了很大的工作量。

②使用z-index来解决这个问题,设置底部的z-index值小于上部分的z-index值,这样即使上浮了也会被上部分遮住,但同样会引起问题:底部区域虽然视觉上能看到但会被一直遮盖,无法单击进行交互操作,就这个例子而言,看不了业务规则,也下载不了APP。

③对input输入框进行监控,一旦获取焦点就取消掉底部区域的fixed属性,失去焦点就恢复fixed属性。但是有一个关键问题是:文本框获得焦点未必会弹出键盘!!!我们认为会出现或者消失键盘的时候都可能不工作!!!

解决方案:经过反复试验,结合思路②和思路③,提出了输入框焦点监控结合设置z-index值方案完美的解决了这个bug。

来看主要步骤,设置底部区域为fixed布局不变,设置底部矩形区域的z-index值与上部分的z-index值相等。

当输入框获得焦点(不管键盘有没有弹出)时,设置底部矩形区域的z-index值小于上部分的z-index值;

当输入框失去焦点时,恢复这两部分的z-index值一致以确保底部区域能单击到。

这样设置不论键盘有没有弹出都不会影响页面整体布局和用户体验,当用户在页面内有单击其他超链接行为时已失去焦点,此时能确保所有区域可以被单击进行交互。

//输入框获得焦点事件
$("#input_id1,#input_id2").focus(function () {
//todo
});
//输入框失去焦点事件
$("#input_id1,#input_id2").blur(function () {
//todo
});

解决bug后的效果图

虚拟键盘冲击移动端fixed布局的解决方案的更多相关文章

  1. 【转载】Web移动端Fixed布局的解决方案

    特别声明:本文转载于EFE的<Web移动端Fixed布局的解决方案>.如需转载,烦请注明原文出处:http://efe.baidu.com/blog/mobile-fixed-layout ...

  2. Web移动端Fixed布局的解决方案

    移动端业务开发,iOS 下经常会有 fixed 元素和输入框(input 元素)同时存在的情况. 但是 fixed 元素在有软键盘唤起的情况下,会出现许多莫名其妙的问题. 这篇文章里就提供一个简单的有 ...

  3. [转] Web移动端Fixed布局的解决方案

    移动端业务开发,iOS 下经常会有 fixed 元素和输入框(input 元素)同时存在的情况. 但是 fixed 元素在有软键盘唤起的情况下,会出现许多莫名其妙的问题. 这篇文章里就提供一个简单的有 ...

  4. 八、Web移动端Fixed布局的解决方案

    移动端业务开发,iOS 下经常会有 fixed 元素和输入框(input 元素)同时存在的情况. 但是 fixed 元素在有软键盘唤起的情况下,会出现许多莫名其妙的问题. 这篇文章里就提供一个简单的有 ...

  5. 个人收藏的移动端网页布局rem解决方案

    写移动端项目时,总是会纠结是用css3 media query 还是用rem.移动端框架挺多,但是因为项目都比较小,不考虑使用. 无意在网上找到一个移动端rem布局的解决方案,经个人实践,目前未出现什 ...

  6. 移动端网页fixed布局问题解决方案

    问题说明 移动端web的footer常常设计为fixed布局,但是在页面键盘被拉起时fixed的布局会出现问题,自己试了下,在较低版本ios和部分安卓机上会有此问题.具体问题看图示: <body ...

  7. ios设备触发虚拟键盘输入后position:fixed 无效的一些简单另类的解决方法。

    首先看一下我要解决的问题,第一张图是正常的情况下,第二张图是点击了输入框之后的情况,就是要解决此问题~! 百度了一下解决方法,好像有以下的一些方法: 1. iscroll 2. Jquery Mobi ...

  8. web移动端fixed布局和input等表单的爱恨情仇 - 终极BUG,完美解决

    [问题]移动端开发,ios下当fixed属性和输入框input(这里不限于input,只要可以调用移动端输入法的都包括,如:textarea.HTML5中contenteditable等),同时存在的 ...

  9. html5 虚拟键盘弹出挡住底部的输入框解决方案

    问题描述: 我们使用 h5 做移动网站开发时,如果文本框在页面的下方,当输入信息弹出的软键盘会将输入框挡住(Android 会有这个问题,IOS会自动将整个页面上移),IOS中软键盘关闭后,页面上移的 ...

随机推荐

  1. CI框架 .htaccess 隐藏url在index.php解决方案

    CodeIgniter(下面简称"CI")是一款国外优秀的PHP轻量级MVC框架,它支持PHP4和PHP5.是开发中小型可拓展性需求高的Web应用程序的利器.眼下你所见到的这个博客 ...

  2. Android摘要ImageView的scaleType属性

    Android在ImageView的scaleType有8一个选项 1 matrix不正确图像放大,原来自view在左上角绘制图片(片不变形): 2 fitXY将图片所有绘制到view中,可是图片会变 ...

  3. Lyx输入中文与代码高亮

    如果您看了我的这个随笔:<OpenSUSE 13.2安装Texlive2014+Texmaker+Lyx> (一)LyX中文 打开Lyx直接新建开始使用,那么输入的中文会是编译失败的,疑? ...

  4. MEF高级进阶

    MEF高级进阶   好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四 ...

  5. SSIS Package to Call Web Service

    原文 SSIS Package to Call Web Service SSIS Package to Call Web Service. You can Call WebService from S ...

  6. CruiseControl.Net全面实现持续集成

    使用CruiseControl.Net全面实现持续集成   持续集成想必大家很多人都听说过,甚至都实践过,最近我又一次亲历了一次持续集成,现将我的经验分享给大家.关于持续集成的理论在本文概不涉及,本文 ...

  7. SSMS2008插件开发(1)--介绍

    原文:SSMS2008插件开发(1)--介绍 SSMS2008就是Microsoft Sql Server Management Studio 2008的简称.许多人叫做SQL2008或SQL SER ...

  8. Re-installation failed due to different application signatures.的解决方案

    有时在安装不同版本apk文件时会出现Re-installation failed due to different application signatures.这样的提示 主要原因是安装的apk程序 ...

  9. 搭建开发框架Express,实现Web网站登录验证

    NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证   JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需 ...

  10. less 命令

    每天一个linux命令(13):less 命令 less 工 具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有 ...