关于height:100%和height:100vh的区别
移动端避免使用100vh
核心问题是移动浏览器具有“帮助”功能,其中地址栏有时可见,有时隐藏,从而改变了视口的可见大小。这些浏览器没有将100vh
高度调整为视口高度变化时屏幕的可见部分,而是将100vh
设置为浏览器的高度,并隐藏了地址栏。结果是,当地址栏可见时,屏幕的底部将被切除。
解决此问题的一种方法是依靠javascript而不是CSS。页面加载时,将高度设置为window.innerHeight
可以将高度正确设置为窗口的可见部分。如果地址栏可见,则window.innerHeight
将为全屏的高度。如果地址栏是隐藏的,则window.innerHeight
将是屏幕上可见部分的高度。
获取页面高度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
var length = document.getElementById('index_main'); var wW = window.innerWidth > 0 ? window.innerWidth : document.documentElement.clientWidth; var wH = window.innerHeight > 0 ? window.innerHeight : document.documentElement.clientHeight; length.style.width = "100%"; length.style.height = wH + 'px';
var mql = window.matchMedia('(orientation: portrait)'); function handleOrientationChange(mql) { if (mql.matches) { getLength(); } else { getLength(); } } handleOrientationChange(mql); mql.addListener(handleOrientationChange);
function getLength() { var length = document.getElementById('main'); var wH = window.innerHeight > 0 ? window.innerHeight : document.documentElement.clientHeight; length.style.width = "100%"; length.style.height = wH + 'px'; }
|