You have 2 questions
To keep the distribution of columns, you must clear the floats
To keep backgrounds, you should use negative fields "equ" exaggerated shims
You get it
(See fiddle with demo and full coding)

You should include wrappers for each pair of floating elements and some css for the negative margin trick. The markup should be as follows:
<div class="mainContainer"> <div class="wrapper"> <div class="topLeft"> <p>123</p> <p>123</p> <p>123</p> <p>123</p> </div> <div class="topRight"> foo </div> </div> <div class="wrapper"> <div class="bottomLeft"> foo </div> <div class="bottomRight"> <p>123</p> <p>123</p> <p>123</p> <p>123</p> </div> </div> <div class="underneath clear"> foo </div> </div>
Each floating div should include
{ ... padding-bottom:2000px; margin-bottom:-2000px; ... }
Left divs should include
{ ... clear:left; ... }
And the wraper that should be included for each pair of floating divs should be
.wrapper { overflow:hidden; }
source share