floatは概念的には指定したブロックを(親要素の)HTML配置から切り離して、指定に従って移動します。従って、親要素がある場合には親要素が子要素の高さを計算できない場合が発生します。
そこで、親要素にフロートボックスを含めて高さ算出するoverflow: auto;を追加します。