ipad上100vh和100%踩坑记「建议收藏」

ipad上100vh和100%踩坑记「建议收藏」最近遇到了一个小bug,在ipad上编辑word文件的虚拟键盘收回时,会导致页面的导航条隐藏,且页面的下面会出现一块空白自己尝试的解决方案通过focusin和focusout对虚拟键盘的弹入弹出进行监听,但发现基本没什么用。我的理解是:focusin和focusout比较适合于监听对于文本输入框的键盘事件。通过比较screen.availHeight和screen.height进行比较。如果在虚拟键盘弹出时元素的高度等有变化,那么可以尝试通过这种方式判断虚拟键盘是不是弹出来了.另一种方法

大家好,又见面了,我是你们的朋友全栈君。

最近遇到了一个小bug,在ipad上编辑word文件的虚拟键盘收回时,会导致页面的导航条隐藏,且页面的下面会出现一块空白

自己尝试的解决方案

  • 通过focusin和focusout对虚拟键盘的弹入弹出进行监听,但发现基本没什么用。我的理解是:focusin和focusout比较适合于监听对于文本输入框的键盘事件。

  • 通过比较screen.availHeight和screen.height进行比较。如果在虚拟键盘弹出时元素的高度等有变化,那么可以尝试通过这种方式判断虚拟键盘是不是弹出来了.

  • 另一种方法是:监听一个事件,比如我监听的就是scroll事件,对会发生隐藏的元素设置scrollIntoView或者scrollIntoViewIfNeeded,通过设置不同的参数,可以使得作用的元素与视口的上面或下面对齐。

  • resizeObserver

  • MutationObserver 用来监听DOM的变化,包括结构,属性这些。

后来发现,是css属性值的问题。


`<style>`

`#container {`

`display: flex;`

`width: 100vh;`

`height: 100vw;`

`}`

`#child {`

`    flex: 1;`

`    position: absolute;`

`    top: 0;`

`    left: 0;`

`    right:0 ;`

`    height: 100%;`

`    overflow: hidden;`

`}`

`</style>`

`<div  id = "container">`

 `<div  id = "child">`

 `</div>`

`</div>`

  • 这里主要有两点需要注意:

  • 在移动端设备中,尤其是ipad和iOS,100vh其实是比视口大,即100vh包含了下面的状态栏的高度。

  • 另外,如上面的代码所示,父元素设置了display:flex, 子元素设置了flex: 1,按理说,子元素设置了这个属性之后,就和父元素的宽高相同了,但是要注意,在这里,子元素还设置了position: absolute。我们看一下W3C的文档怎么说

image

即,flex容器中的绝对定位子元素会脱离flex布局流,也就是说flex: 1对子元素来说已经失效了。因此他的高度为绝对定位中的100%设置的高度,但是又设置了overflow:hidden,因此才会在虚拟键盘隐藏时出现一部分空白,从而导致了导航条的隐藏。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142793.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月22日 下午11:00
下一篇 2022年5月22日 下午11:20


相关推荐

  • 容器化部署 OpenClaw 与飞书集成:AI Agent 的安全沙箱实践

    容器化部署 OpenClaw 与飞书集成:AI Agent 的安全沙箱实践

    2026年3月13日
    11
  • pycharm运行python程序环境配置

    pycharm运行python程序环境配置EditConfigur templates python 配置 dockerpathma 2 tools deployment configuratio 修改之后 tools deployment 自动上传 4 修改 python 默认路径 让以后的新写的代码 不需要配置路径 配置好本地路径和服务器路经 就是查看配置路径的那个路径

    2026年3月27日
    1
  • win10企业版激活简便方法

    win10企业版激活简便方法win10企业版激活简便方法因为之前加固态,就拿去升级,顺便重装了一下系统,谁知道被坑了,给我看的时候显示的是激活,结果是假激活,有很多win10激活都是假激活,只有6个月的使用权限,因为如今装了很多编程软件,实在不想再重新装系统,于是找到了一种比较简单的方法,推荐给有相同境遇的朋友吧,非永久激活,也是6个月而已。1.首先启动超级管理器命令行右键左下角window图标 2、复制命令:s…

    2022年5月30日
    41
  • 下拉列表框DropDownList绑定Dictionary泛型类

    下拉列表框DropDownList绑定Dictionary泛型类DropDownList绑定Dictionary泛型类定义一个Dictionary泛型类///&lt;summary&gt;   ///产品类型   ///&lt;/summary&gt;   ///&lt;returns&gt;&lt;/returns&gt;   publicDictionary&lt;string,string&gt;productType() …

    2022年10月8日
    5
  • 吞食鱼1外星鱼_吞食鱼手机激活成功教程版

    吞食鱼1外星鱼_吞食鱼手机激活成功教程版首先,我们准备工具CE还有就是DX窗口化工具。图1:现给窗口化了,才能调试游戏嘛!先打开dx.点全局钩子。然后手动启用游戏。图2:开始了。打开CE搜生命次数!Fuck!没找到?什么原因?图3莫非加壳了?拿peid一看没壳啊!图4换类型搜一下。图5还不行。各种类型搜:都不行。忽然看到了

    2022年8月24日
    10
  • MySQL中的锁机制详细说明[通俗易懂]

    MySQL中的锁机制详细说明[通俗易懂]一、MySQL锁机制起步锁是计算机用以协调多个进程间并发访问同一共享资源的一种机制。MySQL中为了保证数据访问的一致性与有效性等功能,实现了锁机制,MySQL中的锁是在服务器层或者存储引擎层实现的。二、行锁与表锁首先我们来了解行锁与表锁的基本概念,从名字中我们就可以了解:表锁就是对整张表进行加锁,而行锁则是锁定某行、某几行数据或者行之间的间隙。各引擎对锁的支持情况如下:行锁表锁页锁MyISAM√BDB√√InnoDB√√1.行锁A

    2026年4月18日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号