В CSS3 это возможно .
#columns {
-moz-column-count: 3;
-moz-column-gap: 20px;
-webkit-column-count: 3;
-webkit-column-gap: 20px;
column-count: 3;
column-gap: 20px;
}
HTML:
<div id="columns">
<ul>
... lots of lis ...
</ul>
</div>
Элементы списка будут перетекать в следующий столбец, когда они превышают высоту контейнера.
Возможно, для более старых браузеров вы могли бы использовать JavaScript, поскольку это кажется более эстетичным, чем критическая функция.