很不幸,100vh
并不总是等同于浏览器高度的100%
,如下例所示。
html,
body {
height: 100%;
}
body {
overflow: scroll;
}
.vh {
background-color: blue;
float: left;
height: 50vh;
width: 100px;
}
.pc {
background-color: green;
float: left;
height: 50%;
width: 100px;
}
<div class="vh"></div>
<div class="pc"></div>
在 iPhone 6+ 上,上方的位置栏和下方的导航栏会扩张和收缩,但这些部分不包括在滚动时的 100vh
计算中,这一问题更加明显。
在 JS 中,可以使用 window.innerHeight
获取 100%
的实际高度值。
是否有一种方便的方式以计算当前 100vh
转换为像素值的 JS 方法?
我试图避免需要生成带有内联样式的虚拟元素来计算 100vh
。
对于本问题,假设存在一个敌对环境,其中可能存在 max-width
或 max-height
产生不正确的值,并且页面上没有任何具有 100vh
的现有元素。基本上,假设任何可能出错的情况都已经发生,除了原生浏览器函数,这些函数保证是干净的。
目前我能想到的最好方法是:
function vh() {
var div,
h;
div = document.createElement('div');
div.style.height = '100vh';
div.style.maxHeight = 'none';
div.style.boxSizing = 'content-box';
document.body.appendChild(div);
h = div.clientHeight;
document.body.removeChild(div);
return h;
}
但是对于计算100vh
的当前值来说,它似乎过于冗长,而且我不确定它是否存在其他问题。
100vh
的像素等价值呢? - Charlie