這個之前有曾經提過:解決手機上 safari, chrome 瀏覽器 100vh 無法剛好一整頁的問題,這次用另一種方法來處理。

就是如果我們直接設定 100vh 是希望內容跟 viewport 一樣高,但是在手機上卻可能會被導覽列及網址夜遮掉,用圖例說明。

100vh 就會遇到這個問題,所以如果有在用 bootstrap 的 vh-100 是建議不要使用,要解決的方法是用 js 去抓取頁面的高度,再丟回去給 css,所以我這邊設定 css 如下:

:root {
 --doc-height: 100%;
}

html,
body {
 height: 100vh; /* fallback for Js load */
 height: var(--doc-height);
}

.vh100{
  height: var(--doc-height);
}

我就用自訂的 vh100 來取代 bootstrap 的 vh-100,接著撰寫 js:

const documentHeight = () => {
 const doc = document.documentElement
 doc.style.setProperty('--doc-height', `${window.innerHeight}px`)
}
window.addEventListener('resize', documentHeight)
documentHeight()

利用 js 去修改 CSS 變數的值就好了。

參考:
Don't use 100vh for mobile responsive