Navigateurs modernes
tirez parti du module colonnes css3 pour prendre en charge ce que vous recherchez.
http://www.w3schools.com/cssref/css3_pr_columns.asp
CSS :
ul {
columns: 2;
-webkit-columns: 2;
-moz-columns: 2;
}
http://jsfiddle.net/HP85j/8/
Anciens navigateurs
Malheureusement, pour le support d'IE, vous aurez besoin d'une solution de code qui implique le JavaScript et la manipulation des domaines. Cela signifie que chaque fois que le contenu de la liste change, vous devrez effectuer l'opération de réorganisation de la liste en colonnes et de réimpression. La solution ci-dessous utilise jQuery pour des raisons de concision.
http://jsfiddle.net/HP85j/19/
HTML :
<div>
<ul class="columns" data-columns="2">
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
<li>E</li>
<li>F</li>
<li>G</li>
</ul>
</div>
JavaScript :
(function($){
var initialContainer = $('.columns'),
columnItems = $('.columns li'),
columns = null,
column = 1; // account for initial column
function updateColumns(){
column = 0;
columnItems.each(function(idx, el){
if (idx !== 0 && idx > (columnItems.length / columns.length) + (column * idx)){
column += 1;
}
$(columns.get(column)).append(el);
});
}
function setupColumns(){
columnItems.detach();
while (column++ < initialContainer.data('columns')){
initialContainer.clone().insertBefore(initialContainer);
column++;
}
columns = $('.columns');
}
$(function(){
setupColumns();
updateColumns();
});
})(jQuery);
CSS :
.columns{
float: left;
position: relative;
margin-right: 20px;
}
EDITAR:
Comme indiqué ci-dessous, les colonnes seront ordonnées comme suit :
A E
B F
C G
D
alors que le PO demandait une variante correspondant à ce qui suit :
A B
C D
E F
G
Pour réaliser cette variante, il suffit de modifier le code comme suit :
function updateColumns(){
column = 0;
columnItems.each(function(idx, el){
if (column > columns.length){
column = 0;
}
$(columns.get(column)).append(el);
column += 1;
});
}