在做一个响应式布局时用 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 | 34 条评论
试试
啊嘞,我就来试试拉取头像
这个好用。不过我vh用的不多,收藏备用
前几天刚遇到过这个问题,通过读取Windows.innerHeight 设置最外层容器高度。但是有的情况不适用。vh修正才是通解呀!
( ̄▽ ̄)
大佬我可以转载该文章吗
我首页好像用的方式更方便些
section {
height: 100vh;
height: calc(var(--vh, 1vh) * 100);
}
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
以及些许优化……
路过
我来了,好久不搞wp了
路过加一
我就想测试一下评论头像
大佬,你评论发送时的QQ昵称拉取接口出现问题了,一直乱码……
之前也发现过这个问题,觉得问题不大就没管
不过能解决当然是更好,学习了~
现在名字拉取会出现问题呀~╮( ̄▽ ̄)╭
大佬能够在我的网站上挂你吗?
这个是动态计算高度的吗?像Chrome之类的在下滑的时候经常地址栏会回缩……这个时候的高度会不会发生变化?
(=・ω・=)
@千玖夜 100vh在手机上将是固定的,地址栏存在的情况下无法反映出可视区域实际的高度
@Mashiro Soga√,话说你炉石卡组展示好像404error了……
非技术的路过。
@repostone 同样路过、。
