Ma page Web a une liste «maigre»: par exemple, une liste de 100 éléments d'un mot chacun. Pour réduire le défilement, je souhaite présenter cette liste en deux voire quatre colonnes sur la page. Comment dois-je faire cela avec CSS?
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
Je préfère que la solution soit flexible pour que si la liste passe à 200 éléments, je n'ai pas à faire beaucoup d'ajustements manuels pour accueillir la nouvelle liste.
css
html-lists
user776676
la source
la source
Réponses:
La solution CSS est: http://www.w3.org/TR/css3-multicol/
Le support du navigateur est exactement ce à quoi vous vous attendez.
Il fonctionne "partout" sauf Internet Explorer 9 ou plus ancien: http://caniuse.com/multicolumn
Voir: http://jsfiddle.net/pdExf/
Si le support IE est requis, vous devrez utiliser JavaScript, par exemple:
http://welcome.totheinter.net/columnizer-jquery-plugin/
Une autre solution consiste à revenir à la normale
float: left
pour IE uniquement . L'ordre sera erroné, mais au moins il aura l'air similaire:Voir: http://jsfiddle.net/NJ4Hw/
Vous pouvez appliquer cette solution de secours avec Modernizr si vous l'utilisez déjà.
la source
li
de chaque colonne?list-style-position: inside;
qui résout spécifiquement le problème signalé par @vsync, je crois.li { break-inside: avoid; }
: jsfiddle.net/thirtydot/pdExf/903 . Je ne suis pas trop familier avec les colonnes CSS, il pourrait donc y avoir un meilleur moyen.Si vous recherchez une solution qui fonctionne également dans IE, vous pouvez faire flotter les éléments de la liste vers la gauche. Cependant, cela se traduira par une liste qui serpente, comme ceci:
Au lieu de colonnes soignées, comme:
Le code pour faire cela serait:
Vous pouvez ajouter une bordure en bas au
li
s pour rendre le flux des éléments de gauche à droite plus apparent.la source
Si vous voulez un nombre prédéfini de colonnes, vous pouvez utiliser le nombre de colonnes et l'écart de colonnes, comme mentionné ci-dessus.
Cependant, si vous voulez une seule colonne avec une hauteur limitée qui se diviserait en plusieurs colonnes si nécessaire, cela peut être réalisé tout simplement en changeant l'affichage en flex.
Cela ne fonctionnera pas sur IE9 et certains autres anciens navigateurs. Vous pouvez vérifier le support sur Puis-je utiliser
la source
column-count
fera un nombre impair de lignes dans les colonnes. Comme 6 éléments dans la première colonne, puis 4, puis 6, puis 5.Cette réponse n'est pas nécessairement mise à l' échelle, mais ne nécessite que des ajustements mineurs à mesure que la liste s'allonge. Sémantiquement, cela peut sembler un peu contre-intuitif car il s'agit de deux listes, mais à part cela, cela ressemblera à ce que vous voulez dans n'importe quel navigateur jamais créé.
la source
2020 - Restez simple, utilisez CSS Grid
Beaucoup de ces réponses sont dépassées, nous sommes en 2020 et nous ne devrions pas permettre aux personnes qui utilisent encore IE9. Il est beaucoup plus simple d'utiliser simplement la grille CSS .
Le code est très simple et vous pouvez facilement ajuster le nombre de colonnes à l'aide du
grid-template-columns
. Voyez cela , puis jouez avec ce violon pour répondre à vos besoins.la source
J'ai trouvé que (actuellement) Chrome (
Version 52.0.2743.116 m
) a des tonnes de bizarreries et de problèmes avec le CSScolumn-count
concernant les éléments de débordement et les éléments positionnés absolus à l'intérieur des éléments, en particulier avec certaines transitions de dimensions.c'est un désordre total et ne peut pas être corrigé, alors j'ai essayé de résoudre ce problème via un simple javascript et j'ai créé une bibliothèque qui le fait - https://github.com/yairEO/listBreaker
Page de démonstration
la source
Si vous pouvez le supporter, CSS Grid est probablement le moyen le plus propre de créer une liste unidimensionnelle dans une disposition à deux colonnes avec des intérieurs réactifs.
Ce sont les deux lignes clés qui vous donneront votre disposition à 2 colonnes
la source
La méthode mobile-first consiste à utiliser les colonnes CSS pour créer une expérience pour les écrans plus petits, puis à utiliser les requêtes multimédias pour augmenter le nombre de colonnes à chacun des points d'arrêt définis par votre mise en page.
la source
Voici ce que j'ai fait
la source