在样式表中设置根 CSS 变量,如下所示:
// CSS vars
:root {
--real100vh: 100vh;
}
Run Code Online (Sandbox Code Playgroud)
然后在 JavaScript 中,在加载(或 jQuery 就绪事件)以及调整大小时,您想要运行以下代码:
set100vhVar() {
// If less than most tablets, set CSS var to window height.
let value = "100vh"
// If window size is iPad or smaller, then use JS to set screen height.
if (window.innerWidth && window.innerWidth <= 1024) {
value = `${window.innerHeight}px`
}
document.documentElement.style.setProperty("--real100vh", value)
}
Run Code Online (Sandbox Code Playgroud)
现在您可以简单地使用 CSS:height: var(--real100vh);无论您想要在移动设备上100vh实现真实的效果100vh,这都可以轻松实现!
如果您还在同一元素上添加 a ,效果会更好transition: height 0.4s ease-in-out;,这样当您在移动设备上向下滚动时,它就不会对齐。
使用 CSS var 执行此操作的优点是,您可以随时覆盖它,例如您可能希望某些断点为height: 500px,而如果您使用内联样式,则很难做到这一点。您也可以在内部使用它calc(),就像height: calc(var(real100vh) - 100px);对于固定标头很有用一样。
如果您使用 Vue/Nuxt,请在此处查看我们是如何实现的。
2022 年 12 月更新
现在,您可以使用 CSS 变量和媒体查询,无需 JS 即可实现此目的。就像这样:
:root {
--unit-100vh: 100vh;
}
@supports (height: 100dvh) {
:root {
--unit-100vh: 100dvh;
}
}
Run Code Online (Sandbox Code Playgroud)