Cara yang benar untuk melakukan ini adalah dengan properti CSS pembobolan :
.x li {
break-inside: avoid-column;
}
Sayangnya, pada Oktober 2019, ini tidak didukung di Firefox tetapi didukung oleh setiap browser utama lainnya . Dengan Chrome, saya dapat menggunakan kode di atas, tetapi saya tidak dapat membuat apa pun berfungsi untuk Firefox ( Lihat Bug 549114 ).
Solusi yang dapat Anda lakukan untuk Firefox jika perlu adalah membungkus konten Anda yang tidak melanggar dalam sebuah tabel, tetapi itu adalah solusi yang sangat, sangat mengerikan jika Anda bisa menghindarinya.
MEMPERBARUI
Menurut laporan bug yang disebutkan di atas, Firefox 20+ mendukung page-break-inside: avoid
sebagai mekanisme untuk menghindari jeda kolom di dalam suatu elemen tetapi potongan kode di bawah ini menunjukkan masih tidak berfungsi dengan daftar:
.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>
Seperti yang disebutkan orang lain, Anda dapat melakukan overflow: hidden
atau display: inline-block
tetapi ini menghilangkan peluru yang ditunjukkan dalam pertanyaan asli. Solusi Anda akan bervariasi berdasarkan pada apa tujuan Anda.
UPDATE 2 Karena Firefox tidak mencegah kerusakan display:table
dan display:inline-block
solusi yang dapat diandalkan tetapi non-semantik adalah untuk membungkus setiap item daftar dalam daftar sendiri dan menerapkan aturan gaya di sana:
.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>