Этот вопрос лучше всего объяснить этой скрипкой со следующим HTML:
<div class="outer">
    <div class="inner-left"></div>
    <div class="inner-right"></div>
</div>
CSS
.outer {
    width: 100px;
    border: solid 5px #000;
}
.inner-left {
    float: left;
    height: 200px;
    width: 50px;
    background: #f00;
}
.inner-right {
    float: right;
    height: 200px;
    width: 50px;
    background: #0f0;
}
В принципе, мне интересно, почему overflow: hidden заставляет внешний элемент расти по высоте, охватывая два плавающих элемента?
