Вы правы - для этого идеально подходит flexbox:
html,
body {
margin: 0;
padding: 0;
}
.container {
display: flex;
flex-direction: column;
height: 100vh;
}
header {
background-color: #0800ff;
}
.content {
background-color: #fff;
flex-grow: 1;
overflow-y: auto;
}
footer {
background-color: #fec11a;
}
<section class="container">
<header>...</header>
<div class="content">
<ol>
<li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li>
<li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li>
<li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li>
<li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li>
<li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li>
</ol>
</div>
<footer>...</footer>
</section>
Обратите внимание, как я использую height: 100vh
для .container
и flex-grow: 1
для .content
. Вот и все.