Причём таких разноразмерных блоков может быть произвольное количество и у них могут быть произвольные размеры в произвольном порядке.
Пример: http://jsfiddle.net/Bad_ptr/yw9aM/2/
Тут видно, что #b4 и #b5 могли бы разместиться слева под #b1.
Есть что-нибудь для таких случаев в современном html/css или это придётся вычислять скриптами?