Moin,
das hängt mit der Frage zusammen, in welchem Fall Elemente einer bestimmten flow/ position/ display Eigenschaft für Kindelemente mit ihrerseits eigenen/anderen flow/ position/ display Eigenschaften "containing blocks" konstituieren.
Für dieses Beispiel: #left und #right sind durch float aus dem normalen Dokumentfluss genommen. Sie werden zwar durch die Grenzen von #content (bzw. auch der h1) "aufgehalten", ansonsten "weiß" #content aber nichts von ihrer Existenz oder ihren Ausmaßen. Demgemäß wird #content (richtigerweise!) durch sie auch nicht in der Höhe aufgespannt.
Für das vorliegende Beispiel hätte es auch noch andere Lösungen gegeben. Bspw. ein block-level Element mit clear:both unterhalb von #right, aber innerhalb von #content (-> Stichwort "aufspannen"). Andere Möglichkeit: #right gar nicht floaten, sondern mit entsprechend großem margin-right neben #left platzieren.
Für eure weitere Erforschung dieser nicht unkomplexen Materie hier die Theorie dazu ;-)
Visual formatting model und Visual formatting model details
Gruß
Antipitch