Vertical flexbox
Header sized to content, with fixed footer, and content region that fills the remaining space.
HTML
<section>
<header>
header: sized to content
<br/>(but is it really?)
</header>
<div>
main content: fills remaining space<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- uncomment to see it break -->
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- -->
</div>
<footer>
footer: fixed height in px
</footer>
</section>
CSS
section {
display: flex;
flex-flow: column;
height: 300px;
}
header {
background: tomato;
}
div {
flex: 2 ;
background: gold;
overflow: auto;
}
footer {
background: lightgreen;
min-height: 60px;
}