【发布时间】:2019-01-14 15:59:28
【问题描述】:
我目前正在尝试创建带有固定页眉和页脚以及动态内容区域的 yome 类型的布局,它应该使用剩余的垂直空间。 content-wrapper 有一个内容容器,可以包含大量数据,因此可以出现滚动条。
但现在问题是:如您所见,模拟页面高度的主包装器应该停止在 200px 高度,但正在被内容容器拉伸。
我不想在内容包装器上使用最大高度,也不能在内容包装器上使用 flex-shrink 因为这会通过在内容区域内移动页脚并让布局搞砸它们重叠。
因此,考虑到这一点,如何创建具有动态内容区域的布局,该区域不会垂直扩展到无限大,而是占用页面的剩余空间并在内容包装器内显示提供的内容?
div.main-wrapper {
height: 200px;
max-height: 200px;
min-height: 200px;
width: 100%;
min-width: 100%;
display: flex;
flex-direction: column;
background: grey;
}
div.content-wrapper {
flex: 1 0 auto;
}
div.content {
width: 100%;
height: 100%;
display: flex;
flex-flow: column;
}
div.header,
div.footer {
height: 50px;
max-height: 50px;
min-height: 50px;
background-color: green;
min-width: 100%;
width: 100%;
}
<div class="main-wrapper">
<div class="header">FIXED HEADER</div>
<div class="content-wrapper">
<div class="content">
DYNAMIC CONTENT
<br/>DYNAMIC CONTENT
<br/>DYNAMIC CONTENT
<br/>DYNAMIC CONTENT
<br/>DYNAMIC CONTENT
<br/>DYNAMIC CONTENT
<br/>DYNAMIC CONTENT
<br/>DYNAMIC CONTENT
</div>
</div>
<div class="footer">FIXED FOOTER</div>
</div>
编辑:
我编辑了我的 sn-p 以便更接近我的实际问题,我正在尝试简单化:正如您在内容包装器中看到的那样,还有另一个组件,让我们将它视为一个黑盒子,因为布局应该与内容包装器中的每个 div 一起使用,它占用 100% 的高度和宽度。不应该只是在内容或内容包装器中添加溢出。目标是拥有内容包装容器,它占用剩余空间并限制包含的内容 div,它应该占据内容包装的 100% 高度,而不是推动主包装的高度。正如您在更新后的 sn-p 中看到的,由于内容区域拉伸了内容包装器,主包装器明显大于 200 像素。那么如何解决给定参数不使用 content-wrapper 和 content blackbox div 中的溢出属性的问题。
【问题讨论】:
-
你可以使用 CSS Grid 吗?
-
你需要设置
flex:1而不是flex:1 0 auto--> 你已经禁用了收缩效果 -
@MathiasRechtzigel 如果最新版本的 Chrome 和 Firefox 支持 CSS Grid,这也可以。