Poczytaj o czymś takim jak clearfix. Potrzebujesz go, bo elementy pływające (float) NIE wpływają na wysokość elementu zawierającego. Jeśli w jednym divie masz tylko dwa elementy pływające i nic więcej, to wysokość tego diva będzie równa zeru.
Normalne elementy wpływają jednak na wysokość elementu zawierającego. Położenie górnej krawędzi div-a wynika z przepływu wcześniejszych elementów, z położenie kodu div-a w kodzie i jego stylów CSS. Tutaj, górna krawędź jest tam, gdzie powinna -- tyle że dolna jest w tym samym miejscu, bo elementy pływające są ignorowane. Jeśli na końcu div-a dodasz kolejny element (dowolny) i dasz mu clear: both, to jest zagwarantowane, że element ten znajdzie się pod elementami pływającymi. I teraz, ten nowy element z clear: both NIE jest elementem pływającym, więc wpływa na wysokość elementu zawierającego. Element zawierający musi go objąć, tj. dolna krawędź elementu zawierającego musi być pod dolną krawędzią elementu z clear (zwanego elementem czyszczącym). Skutek jest taki, że element zawierający rozciąga się w pionie by objąć element czyszczący, a ponieważ element czyszczący jest pod elementami pływającymi, również te ostatnie są objęte.
Pod względem standardów takie rozwiązanie jest technicznie rzecz biorąc OK, ale psuje zasadę rozdzielania warstw. Umieszczasz w kodzie HTML element typowo prezentacyjny -- tylko po to, by osiągnąć jakiś wygląd strony, a nie po to, by opisać jej strukturę (chodzi o element czyszczący). Czasami inaczej się nie da, niestety. Ale w tym wypadku się da.
W wielu przypadkach wystarczy zastosować inny clearfix. Pogooglaj sobie słowo "clearfix", metod trochę jest. Chyba najprostszą, a często odpowiednią, jest nadanie elementowi zawierającemu overflow: hidden
.
Czyli:
#content {
overflow: hidden;
}