同样一段 100vh 的页面,微信安卓打开只占了屏幕一半,下面留白,换系统浏览器又是正常的,用户还以为是页面没加载完。日志里能对上时间点,这种反而好排。
微信安卓内置的 X5 内核按自己的规则计算视口高度,工具栏被算到可视区之外,vh 取到的值就偏小。换内核版本又是另一种表现。这一点先确认清楚,后面就不用反复试。
const h = innerHeight + 'px';
document.documentElement.style.setProperty('--vh', h);
.screen { height: calc(var(--vh) * 1); }
「微信 X5 视口」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。
处理上按这个顺序:改用脚本读 innerHeight,写进 CSS 变量再参与计算,别直接依赖 vh,变量写根节点;或者用 flex 布局让内容自然撑满,不依赖视口高度,父级高度要给到;在微信里打开调试面板,核对实际的可视高度和 vh 差多少。
结果对不对很好判断,微信里页面完整铺满一屏,底部不留白,和系统浏览器表现一致。
