Est-il un moyen de briser une liste en colonnes?
Ma page web a un "skinny" liste: par exemple, une liste de 100 articles d'un mot de longueur chacune. Pour réduire le défilement, je tiens à vous présenter cette liste à deux ou même quatre colonnes sur la page. Comment dois-je le faire avec du CSS?
HTML:
<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 la solution pour être flexible, de sorte que si la liste pousse à 200 articles, je n'ai pas à faire beaucoup de réglages manuels pour l'adapter à la nouvelle liste.
- Il y a une bibliothèque qui fait que - github.com/yairEO/listBreaker
- Je crois que la colonne CSS option de le faire. Cette option est facile à utiliser et les modifier s'il y a un besoin. Ici, vous l'avoir expliqué dans les détails -kolosek.com/css-columns
Vous devez vous connecter pour publier un commentaire.
Le CSS solution est: http://www.w3.org/TR/css3-multicol/
La prise en charge du navigateur est exactement ce que vous attendez..
Il fonctionne, "partout", à l'exception d'Internet Explorer 9 ou plus: http://caniuse.com/multicolumn
Voir: http://jsfiddle.net/pdExf/
Si IE soutien est nécessaire, vous devrez utiliser du JavaScript, par exemple:
http://welcome.totheinter.net/columnizer-jquery-plugin/
Une autre solution consiste à revenir à la normale
float: left
pour seulement IE. La commande sera mauvais, mais au moins, ça ressemblera:Voir: http://jsfiddle.net/NJ4Hw/
Vous pourriez appliquer que de secours avec Modernizr si vous l'utilisez déjà.
li
dans chaque colonne?list-style-position: inside;
qui porte spécifiquement sur le problème signalé par @vsync je crois.display: inline-block
surul
aide?li { break-inside: avoid; }
: jsfiddle.net/thirtydot/pdExf/903. Je ne suis pas trop familier avec les CSS colonnes, alors il pourrait y avoir une meilleure façon.Si vous êtes à la recherche d'une solution qui fonctionne dans IE ainsi, vous pouvez flotter les éléments de la liste à gauche. Cependant, ce résultat dans une liste que des serpents autour, comme ceci:
Au lieu de neat colonnes, comme:
Le code serait:
Vous pouvez ajouter une bordure à fond à la
li
s pour que le flux des éléments de gauche à droite, de plus en plus apparente.Si vous voulez un nombre prédéfini de colonnes, vous pouvez utiliser le nombre de colonnes et de la colonne écart, comme mentionné ci-dessus.
Toutefois, si vous ne voulez qu'une seule colonne avec hauteur limitée qui se diviserait en plusieurs colonnes si nécessaire, cela peut être réalisé très simplement en changeant l'affichage de flex.
Cela ne fonctionnera pas sur IE9 et quelques autres navigateurs plus anciens. Vous pouvez le vérifier appui sur Puis-je utiliser
HTML:
Cette réponse n'est pas nécessairement échelle mais exige seulement des ajustements mineurs comme la liste grandit. Du point de vue sémantique, il peut sembler un peu contre-intuitif car il est deux listes, mais à part que ça va ressembler à ce que vous voulez dans n'importe quel navigateur jamais fait.
CSS:
HTML:
J'ai trouvé que (pour l'instant) Chrome (
Version 52.0.2743.116 m
) a des tonnes de bizarreries et les enjeux de la csscolumn-count
concernant le dépassement des éléments et des éléments en position absolue à l'intérieur des éléments, en particulier avec certaines dimensions de transitions..c'est un désordre total, et ne peut pas être corrigé, j'ai donc tenté de s'attaquer à ce par le biais de javascript simple, et avait créé une bibliothèque qui fait que - https://github.com/yairEO/listBreaker
Page de démonstration
Si vous pouvez la soutenir Grille CSS est probablement la façon la plus propre pour faire un one-dimensional liste dans une disposition en deux colonnes avec sensible intérieurs.
CSS:
HTML:
Ce sont les deux lignes de clé qui vous donnera votre 2 mise en page en colonnes
Le mobile-première façon est d'utiliser des CSS Colonnes pour créer une expérience pour les petits écrans puis utilisation Les Media Queries à augmenter le nombre de colonnes à chaque de votre mise en page est défini de points d'arrêt.
CSS:
HTML: