在做一个响应式布局时用 vh 单位定义了元素的高度,结果在发现在移动端的 Chrome 和 Firefox 浏览器中,浏览器 URL 栏显示的情况下元素都出现了错位。
查找到原因是移动端下浏览器对 100vh
的定义不考虑 URL 栏的高度(无论 URL 栏显示还是隐藏),可以用下面这张图直观地体现问题:
左侧是我们期望的 100vh
“全屏”的高度,但右侧是 URL 栏显示的状态下“全屏”的高度,100vh
在这时已经超出了“全屏”高度。
对此,Google 官方有说明,bugzilla 有相关报告,但是对于我们解决问题没有任何帮助。
目前找到最好的解决方案是项目:
JS 执行过一次初始化 vhCheck()
后,就可以直接用 CSS 变量 --vh-offset
修正 100vh
了。
用法:
npm install vh-check
import vhCheck from 'vh-check'
vhCheck()
main {
height: 100vh;
/* 兼容不支持 var 变量的浏览器 (<= IE11) */
height: calc(100vh - var(--vh-offset, 0px));
/* 修正后的 100vh */
}
「樱花庄的白猫」原创文章:《解决移动端浏览器 vh 单位异常问题》,转载请保留出处!https://2heng.xin/2019/09/18/fix-100-vh-in-mobile-browser/
Q.E.D.
Comments | 33 条评论
博主 执着信念
试试
博主 顺心
啊嘞,我就来试试拉取头像
博主 晴和君
这个好用。不过我vh用的不多,收藏备用
博主 梓凡
前几天刚遇到过这个问题,通过读取Windows.innerHeight 设置最外层容器高度。但是有的情况不适用。vh修正才是通解呀!
( ̄▽ ̄)
博主 小c
大佬我可以转载该文章吗
博主 dimlau
我首页好像用的方式更方便些
section {
height: 100vh;
height: calc(var(--vh, 1vh) * 100);
}
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
以及些许优化……
博主 素笔捻花香
路过
博主 时光记
我来了,好久不搞wp了
博主 大姥姥
路过加一
博主 98zx.net
我就想测试一下评论头像
博主 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
大佬,你评论发送时的QQ昵称拉取接口出现问题了,一直乱码……
博主 Eltrac
之前也发现过这个问题,觉得问题不大就没管
不过能解决当然是更好,学习了~
博主 莫锟斤拷锟角癸拷
现在名字拉取会出现问题呀~╮( ̄▽ ̄)╭
博主 花名
大佬能够在我的网站上挂你吗?
博主 千玖夜
这个是动态计算高度的吗?像Chrome之类的在下滑的时候经常地址栏会回缩……这个时候的高度会不会发生变化?
(=・ω・=)
博主 Mashiro
@千玖夜 100vh在手机上将是固定的,地址栏存在的情况下无法反映出可视区域实际的高度
博主 千玖夜
@Mashiro Soga√,话说你炉石卡组展示好像404error了……
博主 repostone
非技术的路过。
博主 Mai1me
@repostone 同样路过、。