移动端浏览器 100vh 高度为何超出视窗?
移动端浏览器高度与地址工具栏的神秘关系
移动端浏览器中,地址栏、工具栏和主视区的错综复杂关系,给开发者带来不少疑惑。尤其是当使用 100vh 作为高度时,主视区的高度会超出视窗,露出地址栏和工具栏。
问题解析
这是因为 100vh 表示视窗高度,包括地址栏和工具栏。而有些移动端浏览器,当页面内容可滚动时,会自动隐藏地址栏和工具栏。因此,一开始不可滚动时,主视区实际高度为视窗高度减去地址栏和工具栏高度。而当滚动时,隐藏地址栏和工具栏,主视区高度就变为视窗高度。
解决方案
为了控制这种关系,可以采用以下方法:
- 使用 dhv(设备高度)和 svh(安全区域高度)
这些单位是基于设备物理屏幕高度,不受地址栏和工具栏影响。例如:
body { height: 100dvh; }
- 记住主视区高度并重新赋值
在页面加载时,获取主视区高度(可用 window.innerHeight 获得),然后动态赋值给主视区,如下所示:
function adjustViewport() { const height = window.innerHeight; const container = document.querySelector(".container"); container.style.height = `${height}px`; } adjustViewport(); window.addEventListener("resize", adjustViewport);
实现不可滚动效果
如果需要实现不可滚动效果,可以将 body 高度设置为屏高,并将 overflow-y 设置为 hidden,如下所示:
body { height: 100vh; overflow-y: hidden; }
以上就是移动端浏览器 100vh 高度为何超出视窗?的详细内容,更多请关注硕下网其它相关文章!