Футер, прижатый к низу страницы

Самое элегантное решение, которое встречал — используем flexbox.

<body>
    <header>...</header>
    <main>...</main>
    <footer>...</footer>
</body>
body {
    display: flex;
    min-height: 100vh;
    flex-direction: column;
}

header,
footer {
    flex-shrink: 0;
}

main {
    flex: 1 0 auto;
}