решение Flexbox
Используя гибкий макет, мы можем достичь этого, учитывая естественную высоту верхнего и нижнего колонтитула. И верхний и нижний колонтитулы будут придерживаться верхней и нижней части области просмотра соответственно (во многом как собственное мобильное приложение), а область основного содержимого заполнит оставшееся пространство, а любое вертикальное переполнение будет прокручиваться в этой области.
См. JS Fiddle
HTML
<body>
<header>
...
</header>
<main>
...
</main>
<footer>
...
</footer>
</body>
CSS
html, body {
margin: 0;
height: 100%;
min-height: 100%;
}
body {
display: flex;
flex-direction: column;
}
header,
footer {
flex: none;
}
main {
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
flex: auto;
}