扩展#down 子元素以填充#container 的剩余空间可以通过多种方式完成,具体取决于您希望实现的浏览器支持以及#up 是否具有定义的高度。
样本
.container {
width: 100px;
height: 300px;
border: 1px solid red;
float: left;
}
.up {
background: green;
}
.down {
background: pink;
}
.grid.container {
display: grid;
grid-template-rows: 100px;
}
.flexbox.container {
display: flex;
flex-direction: column;
}
.flexbox.container .down {
flex-grow: 1;
}
.calc .up {
height: 100px;
}
.calc .down {
height: calc(100% - 100px);
}
.overflow.container {
overflow: hidden;
}
.overflow .down {
height: 100%;
}
<div class="grid container">
<div class="up">grid
<br />grid
<br />grid
<br />
</div>
<div class="down">grid
<br />grid
<br />grid
<br />
</div>
</div>
<div class="flexbox container">
<div class="up">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
<div class="down">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
</div>
<div class="calc container">
<div class="up">calc
<br />calc
<br />calc
<br />
</div>
<div class="down">calc
<br />calc
<br />calc
<br />
</div>
</div>
<div class="overflow container">
<div class="up">overflow
<br />overflow
<br />overflow
<br />
</div>
<div class="down">overflow
<br />overflow
<br />overflow
<br />
</div>
</div>
网格
CSS 的grid 布局提供了另一种选择,尽管它可能不如 Flexbox 模型那么简单。但是,它只需要设置容器元素的样式:
.container { display: grid; grid-template-rows: 100px }
grid-template-rows 将第一行定义为固定的 100px 高度,其余行将自动拉伸以填充剩余空间。
我很确定 IE11 需要 -ms- 前缀,因此请确保验证您希望支持的浏览器中的功能。
弹性盒
CSS3 的Flexible Box Layout Module (flexbox) 现在得到了很好的支持并且可以很容易地实现。因为它很灵活,它甚至可以在#up 没有定义的高度时工作。
#container { display: flex; flex-direction: column; }
#down { flex-grow: 1; }
请务必注意,IE10 和 IE11 对某些 flexbox 属性的支持可能存在问题,而 IE9 或更低版本根本不支持。
计算高度
另一个简单的解决方案是使用CSS3 calc 功能单元as Alvaro points out in his answer,但它要求第一个孩子的高度是一个已知值:
#up { height: 100px; }
#down { height: calc( 100% - 100px ); }
它得到了相当广泛的支持,唯一值得注意的例外是 calc 与 transform 或 box-shadow 结合使用,因此如果您担心,请务必在多个浏览器中进行测试你。
其他替代品
如果需要较旧的支持,您可以将 height:100%; 添加到 #down 将使粉红色 div 全高,但有一点需要注意。它会导致容器溢出,因为#up 正在将其向下推。
因此,您可以将overflow: hidden; 添加到容器中以解决该问题。
或者,如果#up 的高度是固定的,您可以将其绝对定位在容器内,并为#down 添加一个 padding-top。
另外一种选择是使用表格显示:
#container { width: 300px; height: 300px; border: 1px solid red; display: table;}
#up { background: green; display: table-row; height: 0; }
#down { background: pink; display: table-row;}