That really feels like a hack. Is there a better way?
You don’t have a width to your floats. Therefore it will float left and set a width to the size of your content within it. The divs with floats positioned after then will float to the left and not clear because of the lack of a width.