旧浏览器: 父元素用 flex-grow:1 高度撑满祖先元素;子元素 height: 100% 的高度是 0

旧一点的 Chrome(如 61 版本) 和 Safari 会有这个问题。 解决方案:

  1. .parent {
  2. position: relative;
  3. }
  4. .child {
  5. position: absolute;
  6. top: 0;
  7. bottom: 0;
  8. right: 0;
  9. left: 0;
  10. }

移动端使用 100vh 的问题

如果你想将一个元素设置成全屏高度,你可以设置高度:100vh,这样你就有了一个完美的全屏元素,它会随着视口的改变而改变大小。事实并非如此:

  1. 没有地址栏时, 100vh 为全屏高度。
  2. 有地址栏时, 元素设置 100vh 时,元素的部分内容会在下面。

image.png

解决方案

window.innerHeight 为窗口可见部分的高度。用自定义 CSS 变量的方式。

  1. const vh = window.innerHeight * 0.01
  2. document.documentElement.style.setProperty('--vh', `${vh}px`)
  3. window.addEventListener('resize', () => {
  4. const vh = window.innerHeight * 0.01
  5. document.documentElement.style.setProperty('--vh', `${vh}px`)
  6. })

使用

  1. .full-screen {
  2. height: 100vh; /* Fallback for browsers that do not support Custom Properties */
  3. height: calc(var(--vh, 1vh) * 100);
  4. }