Если забить на IE, то можно вот так вот:
<!DOCTYPE html>
<meta charset="UTF-8">
<title>Document</title>
<style>
html, body, div{height: 100%;margin:0;padding:0;}
span{
display: inline-block;
width:200px;
height: 200px;
border: 1px solid red;
}
div{
resize:both;
outline: 1px solid red;
-webkit-column-width: 200px;
-moz-column-width: 200px;
-o-column-width: 200px;
column-width: 200px;
}
</style>
<div>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
Это как вариант. А так да, нужно на javascript динамически просчитывать все и раскладывать блоки в div'ы у которых float:left. Ибо с таблицами все громоздко получается.