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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • getparameter()_eclipse如何自动生成get和set方法

    getparameter()_eclipse如何自动生成get和set方法以下是一个简单的jsp注册页面,从前端提交的数据&lt;%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%&gt;&lt;%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.g…

    2025年9月16日
    7
  • 【计算机网络】输入网址到网页显示的整个流程

    【计算机网络】输入网址到网页显示的整个流程输入网址到网页显示的整个流程最近在看一些大厂的笔经面经时 经常看到这个问题 索性在今天也把自己学习的知识整理一下 第一步 首先你得在浏览器中输入网址 比如输入 www baidu com 其中 www 为主机 baidu 为域名 com 为类型 但是有网址不能直接找到对应的响应主机 必须把网址 即域名转化为 ip 地址 第二步 进行 DNS Do

    2025年8月6日
    3
  • 各种机械键盘轴的差别,究竟什么轴好

    各种机械键盘轴的差别,究竟什么轴好

    2021年12月10日
    185
  • AAA认证略解[通俗易懂]

    AAA认证略解[通俗易懂]AAA是authentication(认证)、aurhorization(授权)和accounting(计费)的简称。主要是给网络接入服务器(NAS)提供一个访问控制的管理框架。定义:AAA作为网络安全的一种管理机制,以模块化的方式提供认证、授权、计费服务。其中:认证:确认访问用户的身份,判断访问者是否为合法的网络用户。授权:对不同的用户赋予不同的权限,同时限制用户可以使用的服务。计费:记录用户在网络中的所有活动,包括使用的服务类型、起始时间、数据流量等,用于收集用户对网络资源的使用情况,并且可以实

    2022年5月30日
    43
  • fiddler进行弱网测试

    使用Fiddler对手机App应用进行抓包,可以对App接口进行测试,也可以了解App传输中流量使用及请求响应情况,从而测试数据传输过程中流量使用的是否合理。抓包过程:1、Fiddler设置1)启动Fiddler->Tools->FiddlerOptions2)HTTPS选项卡中,设置如下,勾选过程中如有弹窗允许即可;Connections选项卡中,勾选Allowre…

    2022年4月6日
    364
  • Android Fragment用法之给Activity创建事件回调

    在某些案例中,可能需要Fragment与Activity共享事件。在Fragment内部定义一个回调接口是一个好方法,并且规定由持有它的Activity实现这个回调方法。当Activity通过接口接受回调时,它能在必要时与布局中的其他Fragment共享信息。例如,如果一个音乐播放器的应用程序在一个Activity中有两个Fragment—一个用来显示歌曲列表(Fragment A),另一

    2022年3月9日
    44

发表回复

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

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