移动端浏览器 100vh 高度为何超出视窗?

移动端浏览器 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 高度为何超出视窗?的详细内容,更多请关注硕下网其它相关文章!