iOS下Html页面中input获取焦点弹出键盘时挡住input解决方案
问题描述
iOS系统下,移动web页面,inpu获取焦点弹出系统虚拟键盘时,偶尔会出现挡住input的情况,尽管概率不大,但是十分影响用户体验。
问题重现
原始页面:页面中有header、main、footer三部分,其中 header 和 footer 通过 position: fixed; 定位在浏览器顶部和底部。
其中,footer 中有一个input 输入框。
点击 input 框使之获取焦点,唤起虚拟键盘,正常页面效果如下:
注:在ios系统唤起软键盘,键盘和底部输入框之间有一块空白间距。
但是偶尔会出现软键盘挡住input框的情况,如下:
针对此问题,目前没有十分有效的方法,只能通过js调整input输入框的位置,使之出现在正常的位置。
解决方法
scrollIntoView(alignWithTop): 滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素。

再次测试,效果如下:
相比于input被挡住,突兀地出现在页面中间更加可以令人接受,但是多次测试,仍然存在问题:当切换输入法的时候,input框的位置会往下移动,被键盘挡住一部分,而且出现的概率比较高(中英文切换),效果如下:
针对这个问题,后期仍需要继续调试和优化。
针对input输入框被虚拟键盘挡住的问题,还有一个类似的解决方案:
当软键盘被唤起是,使用 scrollTop() 方法使input元素滚动到指定的位置,但是滚动的具体数值需要调试才能给出,所以这里就不再演示了。
虚拟键盘挡住输入框一直是web开发中的一个无法避免且令人头疼的问题,希望有人能够想出的更好的办法,如果是浏览器或者系统的问题,希望官方可以尽快解决。
参考资料:
https://www.zhihu.com/question/32746176
http://www.tuicool.com/articles/j6zuIbn
http://blog.sina.com.cn/s/blog_637918a80101rsjh.html
Demo 完整代码:
- 1 <!DOCTYPE html>
- 2 <html>
- 3 <head>
- 4 <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">
- 5 <title><%= title %></title>
- 6 <link rel='stylesheet' href='/css/style.css' />
- 7 <script src="/js/jquery-3.1.1.min.js" charset="utf-8"></script>
- 8 <style>
- 9 html, body {
- 10 height: 100%;
- 11 padding: 0;
- 12 margin: 0;
- 13 }
- 14 header {
- 15 position: fixed;
- 16 top: 0;
- 17 left: 0;
- 18 z-index: 9999;
- 19 width: 100%;
- 20 height: 50px;
- 21 line-height: 50px;
- 22 font-size: 18px;
- 23 text-align: center;
- 24 background: #ccc;
- 25 }
- 26 main {
- 27 position: absolute;
- 28 top: 50px;
- 29 bottom: 10px;
- 30 left: 20px;
- 31 width: 100%;
- 32 margin-bottom: 50px;
- 33 /* 使之可以滚动 */
- 34 overflow-y: scroll;
- 35 /* 增加该属性,可以增加弹性,是滑动更加顺畅 */
- 36 -webkit-overflow-scrolling: touch;
- 37 }
- 38 footer {
- 39 position: absolute;
- 40 bottom: 0;
- 41 left: 0;
- 42 width: 100%;
- 43 height: 50px;
- 44 line-height: 50px;
- 45 text-align: center;
- 46 background: #666;
- 47 border-top: 1px solid #e6e6e6;
- 48 }
- 49 footer input {
- 50 display: inline-block;
- 51 width: 90%;
- 52 height: 20px;
- 53 font-size: 14px;
- 54 outline: none;
- 55 border: 1px solid #e6e6e6;
- 56 border-radius: 5px;
- 57 }
- 58 </style>
- 59 </head>
- 60 <body>
- 61 <header>
- 62 This is the header
- 63 </header>
- 64 <main>
- 65 <h1><%= title %></h1>
- 66 <p>Welcome to <%= title %></p>
- 67 <ul>
- 68 <li>Today</li>
- 69 <li>is</li>
- 70 <li>Sunday</li>
- 71 <li>And</li>
- 72 <li>I</li>
- 73 <li>have</li>
- 74 <li>to</li>
- 75 <li>go</li>
- 76 <li>to</li>
- 77 <li>work</li>
- 78 <li>tomorrow</li>
- 79 </ul>
- 80 </main>
- 81 <footer>
- 82 <input type="text" placeholder="Type here...">
- 83 </footer>
- 84 </body>
- 85 <script type="text/javascript">
- 86 $(function() {
- 87 $('input').on('click', function () {
- 88 var target = this;
- 89 // 使用定时器是为了让输入框上滑时更加自然
- 90 setTimeout(function(){
- 91 target.scrollIntoView(true);
- 92 },100);
- 93 });
- 94 })
- 95 </script>
- 96 </html>
iOS下Html页面中input获取焦点弹出键盘时挡住input解决方案的更多相关文章
- iOS下Html页面中input获取焦点弹出键盘时挡住input解决方案—scrollIntoView()
问题描述 iOS系统下,移动web页面,inpu获取焦点弹出系统虚拟键盘时,偶尔会出现挡住input的情况,尽管概率不大,但是十分影响用户体验. 问题重现 原始页面:页面中有header.main.f ...
- 手机端input获取焦点弹出键盘时挡住input解决方案
问题重现 原始页面:页面中有header.main.footer三部分,其中 header 和 footer 通过 position: fixed; 定位在浏览器顶部和底部. 其中,footer 中有 ...
- 解决IOS safari在input focus弹出输入法时不支持position fixed的问题
该文章为转载 我们在做移动web应用的时候,常常习惯于使用position:fixed把一个input框作为提问或者搜索框固定在页面底部.但在IOS的safari和webview中,对position ...
- 移动H5页面,Android手机下,input获取焦点弹出系统虚拟键盘时,挡住input解决方法
最近在写移动端页面的时候,遇到一个问题,在Android手机下,虚拟键盘会将input框遮挡住,具体情况如下图所示: 正常页面显示 IOS端显示情况 Android端显示情况 解决方式: <t ...
- input获取焦点弹出系统虚拟键盘时,挡住input解决方法
Element.scrollIntoView() 方法让当前的元素滚动到浏览器窗口的可视区域内. <input type="tel" placeholder="输入 ...
- 关于Android中EditText自动获取焦点并弹出键盘的相关设置
在android开发中,关于EditText自动获取焦点弹出键盘,我们可能又是会有让键盘自动弹出的需求,有时可能又会有不想让键盘自动弹出的需求,下面是我所总结的两种方法: 需求:EditText自动获 ...
- 【小贴士】zepto find元素以及ios弹出键盘可能让你很头疼
前言 在此,我不得不说移动端的兼容问题很多,并且很令人头疼,这不,这个星期又有两个让我逮着了,一个是使用zepto过程中出现的问题,一个是ios虚拟键盘的问题 我这里做一次记录,以免以后忘了,同时希望 ...
- IOS开发之自定义系统弹出键盘上方的view(转载)
这篇文章解决的一个开发中的实际问题就是:当弹出键盘时,自定义键盘上方的view.目前就我的经验来看,有两种解决方法.一个就是利用UITextField或者UITextView的inputAccesso ...
- (Vue)移动端点击输入框,弹出键盘,底部被顶起问题
(Vue)移动端点击输入框,弹出键盘,底部被顶起问题:https://www.jianshu.com/p/210fbc846544 问题描述:Vue开发中,当我们相对于父视图的底部布局子控件时,需要用 ...
随机推荐
- JDK,TomCat安装配置
JDK.Tomcat.myEclipse安装配置 准备安装包 JAVA运行环境包 JDK1.7下载地址: http://www.veryhuo.com/down/html/43205.html Jsp ...
- sqlserver 2000新建sysadmin角色
新建登录:sp_addlogin 'netcafe','pubwin' netcafe是用户名,pubwin是密码,下面是msdn官方格式: sp_addlogin [ @loginame = ] ...
- python 在linux下通过top,和dh命令获得cpu,内存,以及硬盘信息
主要是通过os.popen读取命令输出实现的,os.popen启动新的进程,且将外部命令的输出作为文件类型对象返回.不能获得外部命令的返回值.既然是文件对象就可以直接用for in 来读取,代码如下: ...
- iOS开发多线程-多线程技术1
一.基本概念 1.什么是进程 进程就是指在系统中正在运行的一个应用程序 每个应用之间是相互独立的 每个进程都运行在其专有的并且受保护的内存空间内. 2.什么是线程 一个进程想要执行程序,就必须需要一个 ...
- web技术之图片预加载
http://www.cnblogs.com/rt0d/archive/2011/04/17/2018646.html http://www.oschina.net/code/snippet_5437 ...
- KL25用SPI操作nor flash
KL25的SPI连接一个nor flash.该flash型号为FM25F04,支持SPI的模式0和模式3,要求高位先发送,在上升沿采集数据. 通常,SPI有4种模式,取决于CPOL与CPHA如何配置. ...
- USB系列之三:从你的U盘里读出更多的内容
U盘是我们最常使用的一种USB设备,本文继续使用DOSUSB做驱动,试图以读取扇区的方式读取你的U盘.本文可能涉及的协议可能会比较多. 一.了解你的U盘 首先我们用上一篇文章介绍的程序usbvi ...
- TENX_ASM.uew
/L14"TENX ASM" Nocase Line Comment = ; File Extensions = INC ASM LST H /Colors = ,,,,, /Co ...
- 锁机制与原子操作 <第四篇>
一.线程同步中的一些概念 1.1临界区(共享区)的概念 在多线程的环境中,可能需要共同使用一些公共资源,这些资源可能是变量,方法逻辑段等等,这些被多个线程共用的区域统称为临界区(共享区),临界区的资源 ...
- 百度地图LV1.5实践项目开发工具类bmap.util.jsV1.0
/** * 百度地图使用工具类-v1.5 * * @author boonya * @date 2013-7-7 * @address Chengdu,Sichuan,China * @email b ...