Ok, tu codigo esta bien excepto algo, como regla general:
cuando usas float en tu codigo, SIEMPRE tendras que hacerle un clear al contenedor para que sepa que es lo que contiene. y lo estas haciendo de pero forma incorrecta: con un clear:both aplicado a tu #cuerpo no haces nada, lo que yo hago es poner un
Código:
<div id="cuerpo">
<div id="menu">
</div>
<div id="principal">
</div>
<div class="clear"></div>
</div>
y en el CSS:
eso hara que el cuerpo cubra a los dos divs flotantes.
Saludos