你肯定有遇到过这种情况:费尽心血写了个页面,容器设置了 例子 手机浏览器 可以看到顶部被浏览器工具栏给遮挡住了。 当你滚动页面时,浏览器地址栏和底部工具栏会自动隐藏/显示。但 结果就是:设置了 来看个真实例子。假设你要做个登录页: 电脑上看没问题,但到手机上: 用户输完密码找不到登录按钮! 现代浏览器基本都支持了。如果担心老设备,可以加个回退: 如果还需要支持很老的浏览器,可以用JS: CSS中这样用: 这个方案兼容性一般,但知道一下也没坏处。 移动端 下次再做全屏布局,记得用 如果这篇文章帮你省了几个小时的调试时间,帮我点个爱心吧~height: 100vh,在电脑上看完美无缺,结果到手机上……底部居然被浏览器地址栏或者工具栏给挡掉了!
电脑浏览器![null 图片[1]-关于移动端 100vh 的坑和终极解决方案,看这一篇就够了!-冠昇产业](https://sr.lovedyt.cn/wp-content/uploads/2025/10/wxsync-2025-10-0813c2999f6a5ba8ed21900054996e9b.png)
![null 图片[2]-关于移动端 100vh 的坑和终极解决方案,看这一篇就够了!-冠昇产业](https://sr.lovedyt.cn/wp-content/uploads/2025/10/wxsync-2025-10-a8d92456652821d9219bc28774467b09.png)
100vh取的是包含隐藏地址栏的完整视口高度,而不是当前可见部分的高度。100vh的元素,实际高度会超出屏幕可见区域,底部内容直接被截断。实例
<div class="login-page">
<div class="login-form">
<h2>欢迎登录</h2>
<input type="text" placeholder="用户名">
<input type="password" placeholder="密码">
<button>登录</button>
</div>
</div>.login-page {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
解决方案1:dvh(推荐)
.login-page {
height: 100dvh; /* 把vh换成dvh就行 */
}dvh是CSS新规范,专门解决这个问题的。它会自动根据浏览器界面变化动态调整高度。.login-page {
height: 100vh;
height: 100dvh; /* 优先使用dvh */
}解决方案2:JavaScript动态计算(备用方案)
function setRealVH() {
const vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--real-vh', `${vh}px`);
}
// 初始化
setRealVH();
// 窗口变化时重新计算
window.addEventListener('resize', setRealVH);
window.addEventListener('orientationchange', setRealVH);.login-page {
height: calc(var(--real-vh, 1vh) * 100);
}解决方案3:纯CSS Hack(不推荐但可用)
.login-page {
height: 100vh;
height: -webkit-fill-available; /* 针对WebKit浏览器 */
}
@media (orientation: portrait) {
.login-page {
height: 100vh;
height: -webkit-fill-available;
}
}建议
dvh,简单有效总结
100vh的坑确实烦人,但现在有了dvh这个终极解决方案,问题基本解决了。100dvh而不是100vh,保你平安无忧。
本篇文章来源于微信公众号: 程序员刘大华
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们第一时间更新。












暂无评论内容