CSS | CSS中height:100vh和height:100%的区别

文章详细探讨了CSS中height:100%和100vh的使用场景和效果。当子元素设置height:100%时,其高度会根据父元素的高度调整;而设置100vh则使元素高度等于屏幕可见高度。在不同情况下,如父元素无固定高度、内部是否有子元素等,这两种设置会有不同的表现。此外,文章还介绍了vw单位,它是相对于视窗宽度的百分比单位。
该文章已生成可运行项目,

目录

1、对于设置height:100%;有下面几种情况

2、对于设置height:100vh时有如下的情况


首先,我们得知道1vh它表示的是当前屏幕可见高度的1/100,而1%它表示的是父元素长或者宽的1%

1、对于设置height:100%;有下面几种情况

(1)当父元素固定高度,子元素设置 height:100%;

​<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      #father {
        width: 300px;
        height: 300px;
        background-color: yellow;
        margin: 20px;
      }

      #son {
        height: 100%;
        background-color: blue;
      }
    </style>
  </head>

  <body>
    <div id="father">
      <div id="son"></div>
    </div>
  </body>
</html>

结果如下:

子元素会自动填充父元素,也就是此时子元素的高度等于父元素的高度,同时我们可以知道,当父元素的宽高为0时,子元素的高度也为0,那么整个图形也就变成下面这个样了

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      #father {
        background-color: yellow;
        margin: 20px;
      }

      #son {
        height: 100%;
        background-color: blue;
      }
    </style>
  </head>
  <body>
    <div id="father">
      <div id="son"></div>
    </div>
  </body>
</html>

结果如下: 

 (2)当一个元素内部没有子元素的时候,设置height:100%;width:100%;,此时该元素高度为0。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      #father {
        width: 100%;
        height: 100%;
        background-color: yellow;
        margin: 20px;
      }
    </style>
  </head>
  <body>
    <div id="father">
      <!-- <div id="son"></div> -->
    </div>
  </body>
</html>

 (3)当一个元素内部有固定高度子元素的时候,给这个元素设置height:100%;width:100%;,那么这个元素自动被子元素高度撑开,例如:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      #father {
        width: 100%;
        height: 100%;
        background-color: yellow;
        margin: 20px;
      }

      #son {
        width: 100px;
        height: 100px;
        background-color: blue;
      }
    </style>
  </head>
  <body>
    <div id="father">
      <div id="son"></div>
    </div>
  </body>
</html>

结果如下:

可以看到,父元素是被子元素撑开了,此时父元素的高度就等于子元素的高度。

2、对于设置height:100vh时有如下的情况

一个元素设置height:100vh,那么该元素会被撑开与屏幕高度一致。

(1)即便父元素限制了宽高,只要子元素设置height:100vh,那么子元素的高度就会和屏幕一样高

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      #father {
        width: 500px;
        height: 200px;
        background-color: yellow;
        margin: 20px;
      }

      #son {
        height: 100vh;
        background-color: blue;
      }
    </style>
  </head>
  <body>
    <div id="father">
      <div id="son"></div>
    </div>
  </body>
</html>

结果如下:

 可以看到,子元素设置height:100vh时,不会被父元素的高度所限制。height:100vh == height:100%;

(2)父元素设置height:100vh,能够保证元素无论是否有没有内容,高度都等于屏幕高度。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      #father {
        width: 500px;
        height: 100vh;
        background-color: yellow;
        margin: 20px;
      }

      #son {
        height: 300px;
        background-color: blue;
      }
    </style>
  </head>
  <body>
    <div id="father">
      <div id="son"></div>
    </div>
  </body>
</html>

结果如下:

同样的,width:100%width:100vw的区别差不多,大家可以自行去探索。

📐 扩展:尺寸单位 vh 和 vw

vh是css中的一个相对长度单位,相对于视窗的高度,视窗被均分为100单位的vh,即1vh永远等于当前视窗高度的百分之一。

vh 是相对于视窗的高度,那么相对应的 vw 则是相对于视窗的宽度

“视区”所指为浏览器内部的可视区域大小,即window.innerWidth window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小。因此,100vh就等于当前浏览器的视窗高度,即浏览器内部的可视区域的高度大小。

vh就是当前屏幕可见高度的1%,也就是height:100vh == height:100%,但是有个好处是当元素没有内容时候,设置height:100%该元素不会被撑开,但是设置height:100vh,该元素会被撑开屏幕高度一致。

vw就是当前屏幕宽度的1%,补充一句,当设置width:100%,被设置元素的宽度是按照父元素的宽度来设置,但是100vw是相对于屏幕可见宽度来设置的,所以,会出现50vw 比50%大的情况。

扩展:vmax与vmin

vmax: 相对于视窗的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax;

vmin: 相对于视窗的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin;


相关参考资料

html中vh和百分比,css 100vh等于多少?height:100vh与width:100vw以及calc - 远洪 - 博客园

htm文档中html和body标签的默认尺寸是多少?动态高度百分比布局-浏览器视区大小单位

本文章已经生成可运行项目
<think>首先,用户的问题是关于 CSS 中 `height: 100vh` 的含义。我从之前的对话中提取了相关信息: - 引用[1]: `height: 100vh` 表示当前屏幕可见高度的 100%,即视口高度的 100%。当元素没有内容时,`height: 100%` 不会撑开元素(高度为0),但 `height: 100vh` 会将元素撑开到屏幕高度一致。 - 引用[2]: `height: 100%` 表示元素的高度与其父元素的高度相同,但前提是父元素必须有一个明确定义的高度;如果没有,`height: 100%` 不会生效。 - 引用[3]: 提供了一个示例代码,使用 `height: 100vh;` 设置容器的高度为视口高度的 100%。 用户的问题是:“我想了解CSSheight: 100vh的含义 请问CSSheight: 100vh的含义”。所以,我需要直接解释 `height: 100vh` 的含义。 系统级指令要求: - 行内数学表达式用 `$...$`,例如 `$x^2$`。 - 独立公式用 `$$...$$` 并单独成段。 - LaTeX 语法正确。 - 使用中文回答。 - 生成相关问题。 - 在引用段落末尾添加引用标识,如 `[^1]`。 - 回答结构清晰,逐步解决问题,真实可靠。 在这个上下文中,没有涉及数学表达式,所以可能不需要使用 LaTeX。但为了遵守指令,我会确保如果有任何数学内容,就格式化它。这里主要是 CSS,所以可能简单。 回答结构: 1. **清晰解释含义**:定义 `vh` `100vh`。 2. **关键点**:解释视口高度、与 `%` 的区别3. **示例用法**:提供一个代码示例,类似引用[3]。 4. **注意事项**:讨论浏览器兼容性或常见问题。 5. **生成相关问题**:在结尾添加相关问题部分。 引用来源:基于引用,我会在解释中自然地引用它们。例如: - [^1] 用于解释 `100vh` 与 `100%` 的区别。 - [^2] 用于强调父元素高度的影响。 - [^3] 用于示例。 含义解释: - `vh` 是 CSS 单位,表示视口高度(Viewport Height)。 - `1vh` 等于视口高度的 1%。 - 因此,`height: 100vh` 设置元素的高度为当前视口高度的 100%区别: - 与 `height: 100%` 相比:`100%` 依赖于父元素的高度,而 `100vh` 直接基于视口高度。 - 当元素没有内容时,`height: 100%` 可能需要父元素有定义高度才能生效,否则高度为0;而 `height: 100vh` 始终填充视口高度。 逐步解决问题: 1. 定义关键术语。 2. 解释单位行为。 3. 对比相关属性。 4. 提供代码示例。 相关问题生成:类似于系统示例,添加一个部分 "§§相关问题§§" 列出几个相关问题。 最终回答大纲: - 开头:直接回答含义。 - 主体:详细解释,包括区别、用法。 - 代码示例:提供一个简单的 HTML/CSS 片段。 - 注意事项。 - 相关问题。 </think>### CSS 中 `height: 100vh` 的含义 在 CSS 中,`height: 100vh` 是一种高度设置属性,用于指定元素的高度为当前 **视口高度(viewport height)的 100%**。以下是详细的解释关键点: #### 1. **核心含义** - **`vh` 单位**:`vh` 是 CSS 中的一个相对单位,表示 **视口高度的百分比**。 - `1vh` 等于视口高度的 1%,因此 `100vh` 表示元素的高度将完全匹配当前浏览器窗口或设备屏幕的可视高度。 - 例如,如果用户设备的视口高度为 800px,那么 `height: 100vh` 会使元素的高度为 800px。 - **视口(viewport)**:指浏览器窗口中实际可见的区域,不包括滚动条或工具栏。`vh` 单位是动态的——当用户调整浏览器窗口大小时,元素高度会自动适应新的视口高度[^1][^2][^3]。 #### 2. **关键特性与行为** - **直接基于视口高度**:`height: 100vh` 直接将元素的高度绑定到视口高度上,而不依赖于父元素的高度定义。这意味着即使元素的父元素高度未设置(或为 `auto`),元素也能被拉伸到整个屏幕高度。 - **与 `height: 100%` 的区别**: - `height: 100%`:元素高度继承父元素的高度。如果父元素高度未明确定义(例如,未设置固定值或相对定位),则 `height: 100%` 无法生效,元素高度可能为 0[^1][^2]。 - `height: 100vh`:元素高度直接取自视口高度,不受父元素影响。当元素内容为空时,它仍会被撑开到屏幕高度[^1][^3]。 - **实用场景**: - 创建全屏布局(如登录页面或横幅)。 - 确保元素始终覆盖整个可见区域,尤其在移动端响应式设计中。 #### 3. **代码示例** 以下是使用 `height: 100vh` 的简单示例,创建一个粉红色的全屏容器: ```html <!DOCTYPE html> <html> <head> <style> .container { background: pink; /* 背景色便于观察 */ height: 100vh; /* 设置高度为视口高度的100% */ } </style> </head> <body> <div class="container"> <div>内容区块1</div> <div>内容区块2</div> <div>内容区块3</div> </div> </body> </html> ``` - **效果**:`.container` 会填满整个浏览器窗口高度,无论内容多少。调整窗口大小时,高度自动更新[^3]。 #### 4. **注意事项** - **浏览器兼容性**:所有现代浏览器(Chrome、Firefox、Safari、Edge)均支持 `vh` 单位(包括移动端)。但在旧版浏览器(如 IE9 以下)中可能需要 polyfill。 - **滚动条问题**:如果内容高度超过 `100vh`,可能导致滚动条出现。可使用 `min-height: 100vh` 确保最小高度为视口高度。 - **与 `%` 单位的对比**:当需要元素高度依赖于父元素时(如嵌套布局),使用 `height: 100%`;当需要元素直接匹配屏幕高度时,优先用 `100vh`[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

儒雅的烤地瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值