CSS3 盒模型 - height 属性
核心知识点
height 属性的概念
height 属性用于控制元素的高度,它是 CSS 盒模型中的一个重要属性。height 属性可以设置元素内容区域的高度,不包括内边距(padding)、边框(border)和外边距(margin),除非使用了 box-sizing: border-box。
height 属性的值
| 值 | 描述 |
|---|---|
| auto | 默认值,浏览器自动计算元素的高度 |
| length | 使用长度值指定元素的高度,如 px、em、rem、vh 等 |
| percentage | 使用百分比指定元素的高度,相对于父元素的高度 |
| max-content | 元素的高度为内容的最大高度 |
| min-content | 元素的高度为内容的最小高度 |
| fit-content | 元素的高度为内容的高度,但不超过可用空间 |
| clamp(min, preferred, max) | 元素的高度在最小值和最大值之间,首选值为 preferred |
注意事项
- height 属性只适用于块级元素和替换元素(如 img、input 等)
- 对于行内元素,height 属性通常不起作用,除非将其转换为块级元素或内联块元素
- 当使用百分比值时,元素的高度相对于父元素的高度
- 当使用 max-content、min-content、fit-content 等值时,元素的高度由内容决定
- 当使用 clamp() 函数时,元素的高度会根据可用空间自动调整
学习目标
- 理解 height 属性的作用和不同值的效果
- 掌握如何使用 height 属性控制元素的高度
- 了解如何使用不同单位和函数精确控制元素高度
- 能够根据不同场景选择合适的 height 值
代码示例
基本用法示例
/* 示例 1: 不同 height 值 */
.auto {
height: auto;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.pixel {
height: 200px;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.percentage {
height: 50%;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.em {
height: 15em;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.rem {
height: 10rem;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.vh {
height: 30vh;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.max-content {
height: max-content;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.min-content {
height: min-content;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.fit-content {
height: fit-content;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.clamp {
height: clamp(100px, 30vh, 300px);
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
/* 示例 2: 与 box-sizing 结合使用 */
.border-box {
height: 200px;
border: 2px solid #333;
padding: 20px;
box-sizing: border-box;
margin-bottom: 20px;
}
.content-box {
height: 200px;
border: 2px solid #333;
padding: 20px;
box-sizing: content-box;
margin-bottom: 20px;
}
/* 示例 3: 父元素高度为百分比的情况 */
.parent {
height: 400px;
border: 2px solid #333;
padding: 10px;
margin-bottom: 20px;
}
.child {
height: 50%;
border: 2px solid #666;
padding: 10px;
margin-bottom: 10px;
}HTML 结构
<h3>不同 height 值:</h3>
<div class="auto">
height: auto - 浏览器自动计算高度<br>
这是一段文本,用于测试 auto 高度的效果。<br>
当内容增多时,元素高度会自动增加。
</div>
<div class="pixel">
height: 200px - 使用像素指定高度
</div>
<div class="parent">
父元素高度: 400px
<div class="child">
子元素高度: 50% (200px)
</div>
</div>
<div class="em">
height: 15em - 使用 em 指定高度
</div>
<div class="rem">
height: 10rem - 使用 rem 指定高度
</div>
<div class="vh">
height: 30vh - 使用视口高度指定高度
</div>
<div class="max-content">
height: max-content - 内容的最大高度<br>
这是一段文本,用于测试 max-content 高度的效果。
</div>
<div class="min-content">
height: min-content - 内容的最小高度<br>
这是一段文本,用于测试 min-content 高度的效果。
</div>
<div class="fit-content">
height: fit-content - 适合内容的高度<br>
这是一段文本,用于测试 fit-content 高度的效果。
</div>
<div class="clamp">
height: clamp(100px, 30vh, 300px) - clamp 函数指定高度
</div>
<h3>与 box-sizing 结合使用:</h3>
<div class="border-box">
box-sizing: border-box - 高度包括边框和内边距
</div>
<div class="content-box">
box-sizing: content-box - 高度不包括边框和内边距
</div>实用案例分析
案例 1: 全屏高度布局
创建一个全屏高度的布局,包含头部、主体和底部:
html, body {
height: 100%;
margin: 0;
padding: 0;
}
.container {
height: 100%;
display: flex;
flex-direction: column;
}
.header {
height: 60px;
background-color: #333;
color: white;
display: flex;
align-items: center;
padding: 0 20px;
}
.main {
flex: 1;
background-color: #f5f5f5;
padding: 20px;
overflow-y: auto;
}
.footer {
height: 40px;
background-color: #333;
color: white;
display: flex;
align-items: center;
padding: 0 20px;
}案例 2: 固定高度元素
创建一个固定高度的卡片,包含标题和内容:
.card {
width: 300px;
height: 200px;
border: 1px solid #ccc;
border-radius: 4px;
padding: 15px;
margin-bottom: 20px;
background-color: white;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.card-title {
font-size: 18px;
font-weight: bold;
margin-bottom: 10px;
}
.card-content {
font-size: 14px;
line-height: 1.5;
overflow-y: auto;
height: calc(100% - 30px);
}案例 3: 响应式高度
创建一个响应式高度的元素,其高度根据视口高度自动调整:
.responsive-height {
height: clamp(200px, 50vh, 500px);
border: 2px solid #333;
padding: 20px;
margin-bottom: 20px;
background-color: #f0f8ff;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
}
.responsive-height h2 {
font-size: 24px;
color: #333;
}
@media (max-width: 768px) {
.responsive-height {
height: clamp(150px, 40vh, 400px);
}
.responsive-height h2 {
font-size: 20px;
}
}ASCII 示意图
height 不同值的效果对比
+-------------+------------------------+------------------------+
| 值 | 效果 | 适用场景 |
+-------------+------------------------+------------------------+
| auto | 浏览器自动计算高度 | 大多数块级元素 |
| length | 固定高度 | 需要精确控制高度的元素 |
| percentage | 相对于父元素的高度 | 响应式布局 |
| max-content | 内容的最大高度 | 内容驱动的布局 |
| min-content | 内容的最小高度 | 内容驱动的布局 |
| fit-content | 适合内容的高度 | 卡片布局、导航菜单 |
| clamp() | 自适应高度 | 响应式布局 |
+-------------+------------------------+------------------------+视口单位的效果
+----------------------------------+
| 视口高度 (100vh) |
| |
| +----------------------------+ |
| | | |
| | 25vh | |
| | +----------------------+ | |
| | | | | |
| | +----------------------+ | |
| | | |
| | 50vh | |
| | +----------------------+ | |
| | | | | |
| | | | | |
| | | | | |
| | +----------------------+ | |
| | | |
| | 25vh | |
| | +----------------------+ | |
| | | | | |
| | +----------------------+ | |
| | | |
| +----------------------------+ |
| |
+----------------------------------+clamp() 函数的工作原理
+------------------+------------------+------------------+
| | | |
| 可用空间 | 可用空间 | 可用空间 |
| < 最小值 | 在最小值和最大值之间 | > 最大值 |
| | | |
+------------------+------------------+------------------+
| | | |
| 使用最小值 | 使用首选值 | 使用最大值 |
| | | |
+------------------+------------------+------------------+
例如: clamp(100px, 30vh, 300px)
- 当可用空间 < 100px 时,使用 100px
- 当 100px < 可用空间 < 300px 时,使用可用空间的 30%
- 当可用空间 > 300px 时,使用 300px实践练习
练习 1: 实现全屏高度布局
创建一个全屏高度的布局,包含头部、主体和底部:
- 头部高度为 60px
- 底部高度为 40px
- 主体高度为剩余空间
练习 2: 实现固定高度卡片
创建一个固定高度的卡片,包含标题和内容:
- 卡片高度为 250px
- 标题高度为 40px
- 内容区域高度为剩余空间,超出部分显示滚动条
练习 3: 实现响应式高度元素
创建一个响应式高度的元素,其高度根据视口高度自动调整:
- 最小高度为 150px
- 首选高度为视口高度的 40%
- 最大高度为 400px
- 在小屏幕上,首选高度调整为视口高度的 30%
总结
height 属性是 CSS3 中控制元素高度的重要属性,通过设置不同的值,可以实现各种高度效果:
auto: 浏览器自动计算高度,适合大多数块级元素length: 使用长度值指定高度,适合需要精确控制高度的元素percentage: 使用百分比指定高度,适合响应式布局max-content/min-content/fit-content: 根据内容自动调整高度,适合内容驱动的布局clamp(): 使用最小值、首选值和最大值指定高度,适合自适应布局
在使用 height 属性时,需要注意以下几点:
- height 属性只适用于块级元素和替换元素
- 对于行内元素,需要将其转换为块级元素或内联块元素才能使用 height 属性
- 当使用
box-sizing: border-box时,height 属性包括边框和内边距 - 当使用百分比值时,元素的高度相对于父元素的高度
- 当使用视口单位(如 vh)时,元素的高度相对于视口的高度
合理使用 height 属性,可以创建各种布局效果,从固定高度布局到响应式布局,满足不同的设计需求。