Bunu yapmanın doğru yolu, içeri giren CSS özelliğidir :
.x li {
break-inside: avoid-column;
}
Ne yazık ki, Ekim 2019'dan itibaren bu Firefox'ta desteklenmiyor, ancak diğer tüm büyük tarayıcılar tarafından destekleniyor . Chrome ile yukarıdaki kodu kullanabildim, ancak Firefox için hiçbir şey yapamadım ( Bkz. Hata 549114 ).
Gerekirse Firefox için yapabileceğiniz geçici çözüm, kırılmaz içeriğinizi bir tabloya sarmaktır, ancak bu, kaçınabiliyorsanız gerçekten korkunç bir çözümdür.
GÜNCELLEME
Yukarıda belirtilen hata raporuna göre, Firefox 20+ page-break-inside: avoid
bir öğenin içindeki sütun kırılmalarını önlemek için bir mekanizma olarak destekliyor , ancak aşağıdaki kod snippet'i hala listelerle çalışmadığını gösteriyor:
.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>
Diğerlerinin de belirttiği gibi, yapabilirsiniz overflow: hidden
veya display: inline-block
ancak bu, orijinal soruda gösterilen mermileri kaldırır. Çözümünüz, hedeflerinizin ne olduğuna bağlı olarak değişecektir.
GÜNCELLEME 2 Firefox kırılmayı önlediğinden display:table
ve display:inline-block
güvenilir ancak anlamsız bir çözüm, her liste öğesini kendi listesine sarmak ve stil kuralını oraya uygulamak olacaktır:
.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>