Considere el siguiente HTML:
<div class='x'>
<ul>
<li>Number one</li>
<li>Number two</li>
<li>Number three</li>
<li>Number four is a bit longer</li>
<li>Number five</li>
</ul>
</div>
y el siguiente CSS:
.x {
-moz-column-count: 3;
column-count: 3;
width: 30em;
}
Tal como está, Firefox actualmente representa esto de manera similar a lo siguiente:
• Number one • Number three bit longer
• Number two • Number four is a • Number five
Observe que el cuarto elemento se dividió entre la segunda y la tercera columna. ¿Cómo evito eso?
El renderizado deseado podría parecerse más a:
• Number one • Number four is a
• Number two bit longer
• Number three • Number five
o
• Number one • Number three • Number five
• Number two • Number four is a
bit longer
Editar: el ancho solo se especifica para demostrar la representación no deseada. En el caso real, por supuesto, no hay un ancho fijo.
html
css
css-multicolumn-layout
Timwi
fuente
fuente
Respuestas:
La forma correcta de hacerlo es con la propiedad CSS de ruptura :
Desafortunadamente, a partir de octubre de 2019, esto no es compatible con Firefox, pero es compatible con todos los demás navegadores principales . Con Chrome, pude usar el código anterior, pero no pude hacer que nada funcionara para Firefox ( ver error 549114 ).
La solución alternativa que puede hacer para Firefox si es necesario es envolver su contenido sin interrupciones en una tabla, pero esa es una solución realmente terrible si puede evitarlo.
ACTUALIZAR
Según el informe de error mencionado anteriormente, Firefox 20+ es compatible
page-break-inside: avoid
como un mecanismo para evitar saltos de columna dentro de un elemento, pero el fragmento de código a continuación demuestra que todavía no funciona con listas:Mostrar fragmento de código
Como otros mencionan, puede hacer
overflow: hidden
odisplay: inline-block
pero esto elimina las viñetas que se muestran en la pregunta original. Su solución variará según cuáles sean sus objetivos.ACTUALIZACIÓN 2 Dado que Firefox evita la ruptura
display:table
ydisplay:inline-block
una solución confiable pero no semántica sería envolver cada elemento de la lista en su propia lista y aplicar la regla de estilo allí:fuente
break-inside: avoid-column
page-break-inside:avoid
debería funcionar en FF 20.-webkit-column-break-inside:avoid; -moz-column-break-inside:avoid; -o-column-break-inside:avoid; -ms-column-break-inside:avoid; column-break-inside:avoid;
overflow: hidden
es la mejor opción.display: inline-block;
Causa nuevas peculiaridades con Chrome, desafortunadamente.Sumando;
a los elementos secundarios evitará que se dividan entre columnas.
fuente
display:block
elemento. Es probable que por ahora sea una solución sólida para Firefox.<li>
pero tuve que agregarwidth:100%;
para evitar que se apilen horizontalmente.establezca lo siguiente en el estilo del elemento que no desea romper:
fuente
overflow:hidden
regla no es una solución para las otras reglas, es lo que causa el diseño sin interrupciones ...A partir de octubre de 2014, la intrusión todavía parece estar defectuosa en Firefox e IE 10-11. Sin embargo, agregar overflow: oculto al elemento, junto con el break-inside: evitar, parece que funciona en Firefox e IE 10-11. Actualmente estoy usando:
fuente
Firefox ahora es compatible con esto:
Esto resuelve el problema de los elementos que se rompen a través de las columnas.
fuente
page-break-before:
opage-break-after:
nopage-break-inside:
La respuesta aceptada ahora tiene dos años y las cosas parecen haber cambiado.
Este artículo explica el uso de la
column-break-inside
propiedad. No puedo decir cómo o por qué esto difierebreak-inside
, porque solo este último parece estar documentado en la especificación W3. Sin embargo, Chrome y Firefox admiten lo siguiente:fuente
Esto funciona para mí en 2015:
fuente
ul
los elementos, se publica en trucos CSS: css-tricks.com/almanac/properties/b/break-inside , y parece correcto basado en las notas de compatibilidad caniuse: "Apoyo parcial se refiere a no apoyar labreak-before
,break-after
,break-inside
propiedades . Los navegadores basados en WebKit y Blink tienen compatibilidad equivalente para las-webkit-column-break-*
propiedades no estándar para lograr el mismo resultado (pero solo los valoresauto
yalways
). Firefox no admitebreak-*
pero admite laspage-break-*
propiedades para lograr el mismo resultado ".El siguiente código funciona para evitar saltos de columna dentro de los elementos:
fuente
En 2019, tener esto funciona para mí en Chrome, Firefox y Opera (después de muchos otros intentos fallidos):
fuente
Firefox 26 parece requerir
Y Chrome 32 necesita
fuente
Creo que tuve el mismo problema y encontré una solución en esto:
Trabajando también en FF 38.0.5: http://jsfiddle.net/rkzj8qnv/
fuente
Una posible solución para Firefox es establecer la propiedad CSS "mostrar" del elemento que no desea que tenga un descanso dentro de "tabla". No sé si funciona para la etiqueta LI (probablemente perderá la lista -item-style), pero funciona para la etiqueta P.
fuente
Acabo de corregir algunos
div
mensajes que se estaban dividiendo en la siguiente columna agregandoal niño
div
s.* ¡Se dio cuenta de que solo lo corrige en Firefox!
fuente
Enfrenté el mismo problema al usar columnas de tarjeta
Lo arreglé usando
fuente
funciona perfectamente
fuente
Hice una actualización de la respuesta real.
Esto parece estar funcionando en Firefox y Chrome: http://jsfiddle.net/gatsbimantico/QJeB7/1/embedded/result/
Nota: La propiedad float parece ser la que hace el comportamiento del bloque.
fuente
Esta respuesta solo puede aplicarse a ciertas circunstancias; Si establece una altura para sus elementos, esto será obedecido por el estilo de columna. Ahí, manteniendo todo lo que está contenido dentro de esa altura en una fila.
Tenía una lista, como la operación, pero contenía dos elementos, elementos y botones para actuar sobre esos elementos. Lo tratan como una mesa
<ul> - table
,<li> - table-row
,<div> - table-cell
puse la UL en un diseño de 4 columnas. Las columnas a veces se dividían entre el elemento y sus botones. El truco que usé fue darle a los elementos Div una altura de línea para cubrir los botones.fuente