























在移动端H5开发中,常常会用 height: 100vh 让页面或某个容器铺满整个屏幕视口。然而在实际项目中,尤其是 iOS 设备(Safari、微信、抖音等内嵌WebView),经常会遇到页面高度“闪一下”或“塌陷”的问题,影响用户体验。
position: fixed 的按钮忽隐忽现。100vh 的定义是“包含地址栏和底部工具栏的理论视口高度”,而不是“实际可见区域高度”。100vh 也会跟着变化,页面高度突变,出现闪烁或塌陷。100vh 变小,页面高度变低,底部内容闪烁。100vh 变得很小,页面内容被压缩。100vh 跟着变化,页面高度抖动。核心思路:不用 100vh,而是用 window.innerHeight 作为页面实际高度。
CSS默认高度
.container {
height: 100vh; /* 兜底,保证非JS环境下也有高度 */
}
JS动态设置高度
function setRealHeight() {
const el = document.querySelector('.container');
if (el) {
el.style.height = window.innerHeight + 'px';
}
}
window.addEventListener('resize', setRealHeight);
window.addEventListener('orientationchange', setRealHeight);
setRealHeight();
Vue/React等框架中可在 mounted/useEffect 时调用,并在组件销毁时移除事件监听。
window.innerHeight 反映的是当前可视区域的实际像素高度,比 100vh 更准确。window.innerHeight,如有输入框场景可做特殊处理。position: fixed 的底部栏,务必用这种方式,否则会出现“底部闪烁”问题。100vh 单位兼容性差。window.innerHeight 是最通用的解决方案。参考资料:
如有更多移动端H5适配问题,欢迎留言交流!
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。