Это не самое лучшее решение из старых, кстати, хотя принцип, наверное, да самый популярный. Но в этом решении есть серьезные проблемы из-за того что для html и body указывается height:100%; Это приводит к серьезным проблема при установке фона. А я делаю так http://jsfiddle.net/alexriz/WgaA6/этот вариант не портит естественную способность html и body растягиваться, что в свою очередь позволяет адекватно настраивать фон. <!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Title</title></head><body> <header class="header"></header> <main class="main"></main> <footer class="footer"></footer></body></html>html { min-height: 100%; position: relative;}body { margin: 0;}.header { background: #004A50; width: 1000px; margin: auto;}.main { width: 1000px; margin: auto; padding-bottom: 100px;}.footer { background: #B13119; width: 1000px; height: 100px; margin: auto; position: absolute; left: 0; right: 0; bottom: 0; box-sizing: border-box;}Но, а вообще да нужен flexbox, если речь идет об изменяемом по высоте футере