Mi página web tiene una lista 'delgada': por ejemplo, una lista de 100 elementos de una palabra de longitud cada uno. Para reducir el desplazamiento, quiero presentar esta lista en dos o incluso cuatro columnas en la página. ¿Cómo debo hacer esto con 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>
Prefiero que la solución sea flexible para que si la lista crece a 200 elementos, no tenga que hacer muchos ajustes manuales para acomodar la nueva lista.
css
html-lists
usuario776676
fuente
fuente
Respuestas:
La solución CSS es: http://www.w3.org/TR/css3-multicol/
La compatibilidad del navegador es exactamente lo que esperarías.
Funciona "en todas partes" excepto Internet Explorer 9 o anterior: http://caniuse.com/multicolumn
Ver: http://jsfiddle.net/pdExf/
Si se requiere compatibilidad con IE, deberá utilizar JavaScript, por ejemplo:
http://welcome.totheinter.net/columnizer-jquery-plugin/
Otra solución es volver a la normalidad solo
float: left
para IE . El orden será incorrecto, pero al menos se verá similar:Ver: http://jsfiddle.net/NJ4Hw/
Puede aplicar ese respaldo con Modernizr si ya lo está usando.
fuente
li
de cada columna?list-style-position: inside;
varios navegadores incluir esta propiedad adicional que aborde específicamente el problema señalado por @vsync, creo.li { break-inside: avoid; }
: jsfiddle.net/thirtydot/pdExf/903 . No estoy muy familiarizado con las columnas CSS, por lo que podría haber una mejor manera.Si está buscando una solución que también funcione en IE, puede hacer flotar los elementos de la lista a la izquierda. Sin embargo, esto dará como resultado una lista que serpentea, como esta:
En lugar de columnas ordenadas, como:
El código para hacer eso sería:
Puede agregar un borde inferior al
li
s para que el flujo de los elementos de izquierda a derecha sea más evidente.fuente
Si desea un número preestablecido de columnas, puede usar el recuento de columnas y el espacio entre columnas, como se mencionó anteriormente.
Sin embargo, si desea una sola columna con una altura limitada que se dividiría en más columnas si fuera necesario, esto se puede lograr simplemente cambiando la pantalla a flex.
Esto no funcionará en IE9 y algunos otros navegadores antiguos. Puede consultar el soporte en ¿Puedo usar
fuente
column-count
hará un número desigual de filas dentro de las columnas. Como 6 elementos en la primera columna, luego 4, luego 6, luego 5.Esta respuesta no necesariamente escala, pero solo requiere ajustes menores a medida que crece la lista. Semánticamente, puede parecer un poco contraintuitivo, ya que son dos listas, pero aparte de eso, se verá como usted desea en cualquier navegador que se haya creado.
fuente
2020: hazlo simple, usa CSS Grid
Muchas de estas respuestas están desactualizadas, estamos en 2020 y no deberíamos habilitar a las personas que todavía usan IE9. Es mucho más simple usar la cuadrícula CSS .
El código es muy simple y puede ajustar fácilmente cuántas columnas hay usando
grid-template-columns
. Vea esto y luego juegue con este violín para satisfacer sus necesidades.fuente
Descubrí que (actualmente) Chrome (
Version 52.0.2743.116 m
) tiene toneladas de peculiaridades y problemas con CSS concolumn-count
respecto a los elementos de desbordamiento y los elementos de posición absoluta dentro de los elementos, especialmente con algunas transiciones de dimensiones.es un desastre total y no se puede arreglar, así que intenté abordar esto a través de un simple javascript y había creado una biblioteca que hace eso: https://github.com/yairEO/listBreaker
Página de demostración
fuente
Si puede admitirlo, CSS Grid es probablemente la forma más limpia de hacer una lista unidimensional en un diseño de dos columnas con interiores receptivos.
Estas son las dos líneas clave que le darán su diseño de 2 columnas
fuente
La forma móvil primero es usar columnas CSS para crear una experiencia para pantallas más pequeñas y luego usar consultas de medios para aumentar la cantidad de columnas en cada uno de los puntos de interrupción definidos de su diseño.
fuente
Aquí esta lo que hice
fuente