A maneira correta de fazer isso é com a propriedade CSS invasora :
.x li {
break-inside: avoid-column;
}
Infelizmente, a partir de outubro de 2019, isso não é suportado no Firefox, mas é suportado por todos os outros principais navegadores . Com o Chrome, eu pude usar o código acima, mas não consegui fazer nada funcionar no Firefox ( consulte Bug 549114 ).
A solução alternativa que você pode fazer para o Firefox, se necessário, é agrupar seu conteúdo ininterrupto em uma tabela, mas essa é uma solução realmente terrível se você puder evitá-lo.
ATUALIZAR
De acordo com o relatório de bug mencionado acima, o Firefox 20+ suporta page-break-inside: avoid
como um mecanismo para evitar quebras de coluna dentro de um elemento, mas o trecho de código abaixo demonstra que ele ainda não está funcionando com listas:
.x {
column-count: 3;
width: 30em;
}
.x ul {
margin: 0;
}
.x li {
-webkit-column-break-inside: avoid;
-moz-column-break-inside:avoid;
-moz-page-break-inside:avoid;
page-break-inside: avoid;
break-inside: avoid-column;
}
<div class='x'>
<ul>
<li>Number one, one, one, one, one</li>
<li>Number two, two, two, two, two, two, two, two, two, two, two, two</li>
<li>Number three</li>
</ul>
</div>
Como outros mencionar, você pode fazer overflow: hidden
ou display: inline-block
mas isso remove as balas mostrados na pergunta original. Sua solução variará de acordo com quais são seus objetivos.
ATUALIZAÇÃO 2 Como o Firefox impede a interrupção display:table
e display:inline-block
uma solução confiável, mas semântica, seria agrupar cada item da lista em sua própria lista e aplicar a regra de estilo:
.x {
-moz-column-count: 3;
-webkit-column-count: 3;
column-count: 3;
width: 30em;
}
.x ul {
margin: 0;
-webkit-column-break-inside: avoid; /* Chrome, Safari */
page-break-inside: avoid; /* Theoretically FF 20+ */
break-inside: avoid-column; /* IE 11 */
display:table; /* Actually FF 20+ */
}
<div class='x'>
<ul>
<li>Number one, one, one, one, one</li>
</ul>
<ul>
<li>Number two, two, two, two, two, two, two, two, two, two, two, two</li>
</ul>
<ul>
<li>Number three</li>
</ul>
</div>