据我所知,这只能通过 Flexbox 完成。
小提琴
(相关)CSS
#wrapper{
padding: 10px;
vertical-align: middle;
background-color: cyan;
min-height: 100px;
max-height: 300px;
-ms-box-orient: vertical;
display: -ms-flex;
height: 100%;
display: -webkit-box; /* OLD: Safari, iOS, Android browser, older WebKit browsers. */
display: -moz-flex;
display: -ms-flexbox; /* MID: IE 10 */
display: -webkit-flex; /* NEW, Chrome 21+ */
display: flex; /* NEW: Opera 12.1, Firefox 22+ */
-ms-flex-direction: column;
-webkit-flex-direction: column;
flex-direction: column;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
#content
{
-ms-flex: 1 1 auto;
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
overflow: auto;
height:0;
min-height: 0;
}
需要提几点:
0)(编辑:)为了仅在(绿色)内容上滚动,我不得不稍微更改标记以将黄色区域放在标题中。
1)我只对可滚动内容应用了flex-grow:1(即flex: 1 1 auto);其他项目可以具有固定或动态高度。
2)我在这里看到了一个 hack(?) ,将 height:0 放在容器元素上会触发垂直滚动条。(这里我同时使用了 height 和 min-height 因为这个 hack 只在具有 min-height 的 Firefox 中有效)
3) 为了在 Firefox < 22 中工作 - 你需要像这样启用 flexbox 运行时标志
4) 在现代浏览器中对 flexbox 的支持出奇的好(见这里),但是你需要添加一些特定于浏览器的 css 才能让它工作(见上面的小提琴)