Если все дочерние элементы зафлоачены, то происходит схлопывание родительского блока, т.к блочные элементы не видят зафлоаченные. Самый простой и распространенный способ - псевдораспорки:
footer:after {
content: '';
display: table;
clear: both;
}
Это неправильное решение. Если в блока (в данном случае footer) будет фиксированная ширина, то это свойство при меньшем разрешении экрана добавит к нему горизонтальную полосу прокрутки.
Pshkll: Так, а в чём проблема? Если верстают не "резиновый" макет (фиксированная ширина футера), то логично, что нужна будет полоса прокрутки для блока.