Почему не задаётся фон?
Проблема в плавающих объектах, добавьте в конец: <div style="clear: both;"></div>
e.g. : jsfiddle.net/5Achs
Потому используя float вы вырываете из потока эти блоки и высота родительского блока зависит только от блоков в статичном потоке.
Используйте готовое решение в виде clearfix