You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

vh与%的区别:为何banner高度从100vh改100%显示异常?

100vh 与 100% 高度差异解析及全屏实现方案

代码对比

修改前(使用100vh):

.banner {
    width: 100%;
    height: 100vh;
    background-image: linear-gradient(rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0.75)), url(background.jpg);
    background-size: cover;
    background-position: center;
}

修改后(使用100%):

.banner {
    width: 100%;
    height: 100%;
    background-image: linear-gradient(rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0.75)), url(background.jpg);
    background-size: cover;
    background-position: center;
}

显示效果差异

  • 用100vh时:banner会完全铺满当前浏览器的可见窗口高度,不管页面内容多少,始终保持全屏状态。
  • 用100%时:banner高度会收缩到自身内容的高度,无法铺满全屏。

核心原因

CSS里的百分比高度是相对于父元素的已定义高度来计算的。如果.banner的父元素(比如<html>、<body>)没有设置明确的height值,浏览器就找不到计算基准,此时height: 100%会失效,元素高度自动适配内容。

而100vh是视口单位,直接对应浏览器可见区域的高度(1vh = 视口高度的1%),完全不受父元素高度设置的影响,所以能稳定实现全屏效果。

用100%实现全屏的方法

当然可以,只需要给所有层级的父元素设置明确的高度:

html, body {
    height: 100%;
    margin: 0; /* 清除默认边距,避免出现不必要的滚动条 */
}
.banner {
    width: 100%;
    height: 100%;
    background-image: linear-gradient(rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0.75)), url(background.jpg);
    background-size: cover;
    background-position: center;
}

这样设置后,<html>和<body>的高度会铺满视口,.banner作为子元素,height: 100%就会继承父元素的高度,达到和100vh一样的全屏效果。

内容的提问来源于stack exchange,提问作者Amir Saudagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:46:00