避免在移动端页面中使用100vh

避免在移动端页面中使用100vh100vh带来的问题在CSS中,视口单位(Viewportunits)听起来不错。如果要设置一个元素的样式使它占据整个屏幕的高度,那么你可以设置height:100vh,这样你就拥有一个完美的全屏元素,该元素会随着视口的变化而调整大小!可惜的是,事实并非如此。100vh在移动浏览器中以一种微妙但基本的方式被破坏,使其几乎无用。最好避免使用100vh,而应该通过javascript设置高度的方…

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

100vh带来的问题

在CSS中,视口单位(Viewport units)听起来不错。如果要设置一个元素的样式使它占据整个屏幕的高度,那么你可以设置height: 100vh,这样你就拥有一个完美的全屏元素,该元素会随着视口的变化而调整大小!可惜的是,事实并非如此。100vh移动浏览器中以一种微妙但基本的方式被破坏,使其几乎无用。最好避免使用100vh,而应该通过javascript设置高度的方式来获得完整的视口体验。

核心问题是移动浏览器(说的就是你,Chrome和Safari)具有“有用”功能:地址栏有时可见,有时隐藏,从而改变了视口的可见大小。当视口高度变化时,这些浏览器没有将100vh的高度调整为屏幕的可见部分的高度,而是将100vh设置为隐藏了地址栏的浏览器的高度(其实就是100vh高度没变,但是地址栏那块把内容顶出去了一块)。结果导致:当地址栏可见时,屏幕的底部将被切断,从而破坏了开始时100vh的目的。

如下所示:
100vh

一个更好的解决方法:window.innerHeight

解决该问题的一种方法是依靠JavaScript而不是CSS。在页面加载时,将高度设置为window.innerHeight可以将高度正确设置为窗口的可见部分高度。 如果地址栏可见,则window.innerHeight将为全屏的高度。 如果地址栏处于隐藏状态,则window.innerHeight就是你期望的只是屏幕可见部分的高度。

在Wordsheet.io上学习时,你可以看到这一点。例如,尝试在移动浏览器上打开wordsheet.io/demo/V3Y。无论地址栏是否可见,屏幕都将是视口的高度。此外,在页面首次加载时将高度固定为适当的大小,可以防止在使用该网站的过程中地址栏隐藏,从而带来尴尬的屏幕调整大小体验。

遗憾的是,在不依赖JavaScript的情况下,仍然没有一种简单的方法来使元素占据整个视口高度。100vh是如此接近伟大(greatness),但考虑到它在移动设备上的局限性,最好避免使用它。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • u盘0x8000FFFF_灾难性故障怎么卸载

    u盘0x8000FFFF_灾难性故障怎么卸载U盘出现两个分盘,原先是用了老毛桃的工具重置了U盘,目前成了两个分区。想要修改分区的时候,出现了磁盘已被保护。第一步,按照贴中的第二个方法用修改完注册表关机重启https://product.pconline.com.cn/itbk/software/dnyw/1707/9686607.html第二步,去磁盘管理中把剩余的磁盘都删除掉,这时候u盘的所有的空间都没有了,点击新建文件会出现0x80…

    2022年9月25日
    4
  • 对Spring的IOC和AOP的理解,可做面试题用「建议收藏」

    对Spring的IOC和AOP的理解,可做面试题用「建议收藏」IOC:控制反转,也叫DI依赖注入,它并不是一种技术实现,而是一种设计思想。在实际项目开发中,我们往往是通过类与类之间的相互协作来完成特定的业务逻辑,这个时候,每个类都要管理与自己有交互的类的引用和依赖,这就使得代码的维护异常困难并且耦合度过高,而IOC的出现正是为了解决这个问题,IOC将类与类的依赖关系写在配置文件中,程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间的耦合度。它的原…

    2022年6月18日
    28
  • 解决pycharm安装cv2模块无法安装的方法「建议收藏」

    解决pycharm安装cv2模块无法安装的方法「建议收藏」关于pycharm安装cv2模块安装失败和无法使用的解决办法:首先,我们先到这个网址:https://pypi.org/project/opencv-python/3.4.5.20/#files去下载与自己python版本号和电脑位数对应的opencv-python的whl文件,我这里是python3.6版本,对应电脑64位,所以我下载的是我这里是python3.6版本,对应电脑64位,所以我下载的是opencv_python-3.4.5.20-cp36-cp36m-win_amd64.whl。大家

    2025年6月7日
    2
  • form表单如何提交数据(表单中提交请求默认方式)

    Form表单提交数据的几种方式一、submit提交在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮()就可以进行数据的提交,每一个input标签都需要有一个name属性,才能进行提交。当点击登陆时,向数据库发生的数据是:username=username&password=password.

    2022年4月12日
    80
  • Egret MovieClip

    Egret MovieClip1、准备资源使用TextureMerger生成帧动画所需的png和json文件点击导出即可得到以下2个文件2、代码逻辑//帧动画modulegame{exportclassframeDemoextendsegret.DisplayObjectContainer{publicconstructor(){…

    2025年7月28日
    2
  • JS前端生成二维码的几种方式「建议收藏」

    JS前端生成二维码的几种方式「建议收藏」这里简单介绍几种前端实现js生成二维码的方式

    2022年8月31日
    7

发表回复

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

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