【前端】flex布局,让两个高度不固定的子元素沾满屏幕

本文介绍如何使用纯CSS实现一个容器,当head高度变化时,content高度自动适应并保持outer高度减去head后的高度。通过flexbox和flex-shrink属性来实现内容自适应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例如有这样的一个容器

<div class="outer">
    <div class="head"></div>
    <div class="content"></div>
</div>

outer 的高度是屏幕的高度
head 的高度是不确定的,由内容撑高
如何通过纯css使得 content 的高度是 outer 减 head 后的呢?

.outer {
    height: 100vh;
    display: flex;
    flex-direction: column;
}
.head {
    flex-shrink: 0;
}
.content {
    flex: auto;
}

原文链接:https://segmentfault.com/q/1010000021601901

### Flexbox 父元素高度子元素自适应布局的实现 在使用 Flexbox 布局时,父元素的高度通常会根据子元素的内容自动调整。以下是一个完整的解决方案,确保父元素能够正确地随子元素内容自适应高度。 #### HTML 结构 ```html <div class="parent"> <div class="child">内容1</div> <div class="child">内容2<br>多行内容</div> </div> ``` #### CSS 样式 ```css .parent { display: flex; /* 启用 Flexbox 布局 */ flex-direction: column; /* 子元素按列排列 */ align-items: stretch; /* 子元素宽度拉伸以填充父容器 */ border: 1px solid #ccc; /* 边框用于可视化效果 */ padding: 10px; /* 内边距 */ } .child { background-color: #f0f0f0; /* 背景颜色用于区分 */ margin-bottom: 10px; /* 子元素之间的间距 */ padding: 10px; /* 子元素内边距 */ border: 1px solid #aaa; /* 子元素边框 */ } ``` #### 关键点解析 - `display: flex`:启用 Flexbox 布局[^2]。 - `flex-direction: column`:设置主轴方向为垂直方向,使子元素按列排列[^3]。 - `align-items: stretch`:默认情况下,Flexbox 的子元素会沿交叉轴拉伸以填充父容器的可用空间[^3]。 - 父元素的高度会根据子元素的实际内容动态调整,无需额外设置固定高度或最小高度[^2]。 如果需要在水平方向上排列子元素,可以将 `flex-direction` 设置为 `row`,同时确保父元素的 `height: auto` 属性生效[^1]。 #### 示例代码 ```html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title>Flexbox 父元素高度自适应示例</title> <style> .parent { display: flex; flex-direction: column; align-items: stretch; border: 1px solid #ccc; padding: 10px; } .child { background-color: #f0f0f0; margin-bottom: 10px; padding: 10px; border: 1px solid #aaa; } </style> </head> <body> <div class="parent"> <div class="child">单行内容</div> <div class="child">多行内容<br>第二行<br>第三行</div> </div> </body> </html> ``` #### 注意事项 - 如果父元素设置固定高度(如 `height: 200px`),则可能会限制其自适应能力[^4]。 - 使用 `min-height` 或 `max-height` 可以进一步控制父元素的高度范围[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值