移动端网页:给body设置 overflow:hidden 无效的解决办法

做移动端网页的时候,总会遇到一些奇葩的问题,在PC端浏览器做模拟调试时,都是完美显示的,但是一到真机调试就是各种坑;

我在做移动端网页时的需求是这样的:

页面背景图片是自适应屏幕大小的,页面上有输入框和按钮,当点击输入框时,移动端的软键盘弹出,但是背景图片不能受影响而被压缩,且页面不能应为软键盘的弹出高度超出屏幕显示高度而上下滚动;

我的解决方案如下:

在页面初始化时,获取设备像素可见宽高,并设置body的高度为此高度;

代码如下:

      var clientHeight = document.documentElement.clientHeight;;
      var body = document.getElementById("body");
      body.style.height = clientHeight + "px";

为了防止软键盘弹出式高度增加使得页面滚动,于是我又给body设置overflow:hideden;

代码如下:

body{
    width:100%;
    overflow:hidden;
}

设置完成后,我在PC端的浏览器上做测试,发现已经达到预期的效果了,后来上真机测试,问题来了,软键盘弹出时,页面会发生滚动,body的overflow:hidden无效;IOS和安卓效果都是这样;

后来找了一下相关的案例,终于找到了解决办法;

方法如下:

通过父节点固定,像body的父节点是html,可以通过固定父节点html, 来把其下的子节点固定,当然子节点前提是不做脱离文档流的行为。   

html{

       position:fixed;

       height:100%;

       width:100%;

    }

问题完美解决!!

猜你喜欢

转载自blog.csdn.net/qq_41725450/article/details/83789909