移动端h5开发,华为手机输入法键盘影响页面布局的问题。

在做移动端h5的时候,有些简单的页面,我们一般都会给body写上:

width:100%;
height:100%;

然后给一个满屏的背景图,简单方便的适应不同屏幕的手机。


有时候为了采集用户信息,页面上会放置几个input框让用户填写,那么问题就来了。
如图,一个100%布局的页面,上面有一个input





在input没有获得焦点(即没有弹出输入法)的时候,我们的华为手机和其他机型表现的都很完美





这是iphone的样式


别高兴的太早,我们点击input试试看





看起来Iphone好像也没什么问题,input获得了焦点,页面自动滚动到了合适的位置,将input正好置于页面的中间(请忽略那个安全警告,快下班了,截图截的很心急….)
那我们再来看看华为:





what the xxxx?整个页面感觉像被输入法给挤扁了,由于此时我的input是垂直&&水平居中的,所以跟随着被挤扁的body一起上来了,页面也不能滚动。
如果在实际场景中input使用top定位,则很有可能出现这种情况





果然,body已经装不下input了,是什么导致了这种情况?
借助vconsole工具看了一下,window,document,body,input等的容器的高度都没有发生变化,clientHeight,offsetHeight等的属性值也没有发生改变,暂且只能认为:


输入法的弹出并没有实际影响页面元素的数值,只是改变了屏幕的显示方式


所以看上去很扁的页面,实际上没有任何改变,如果有哪位大神深入研究过这个问题也请不吝赐教,但是话说回来,要怎么解决这个问题?


与上面的那个不一定正确的结论相悖的是:


如果在input获得焦点时,手动给body重新赋值,可以达到解决问题的效果

var h = window.innerHeight;
var myInput = document.getElementById('myInput');

myInput.addEventListener('focus',handler,false);

function handler(){
    $('body').height(h);
}



效果如下:





跟iphone上一样,input获得了焦点,页面自动滚动到了合适的位置,将input正好置于页面的中间。(这里的input是top定位,距离写死)


如果你使用的是bottom或者top距离使用的百分比,那么又会出问题,虽然看起来页面没有被挤扁,但是input的位置会改变,需要注意





不止输入法,部分华为机型屏幕下边会有虚拟键,也会产生类似的改变页面布局问题,我这里没有这些手机,不再贴图。


在面对华为用户时谨慎使用bottom定位以及百分比数值定位!
在面对华为用户时谨慎使用bottom定位以及百分比数值定位!
在面对华为用户时谨慎使用bottom定位以及百分比数值定位!


三遍!!!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值