Pertimbangkan HTML berikut:
<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>
dan CSS berikut:
.x {
-moz-column-count: 3;
column-count: 3;
width: 30em;
}
Seperti berdiri, Firefox saat ini membuat ini mirip dengan yang berikut:
• Number one • Number three bit longer
• Number two • Number four is a • Number five
Perhatikan bahwa item keempat terpecah antara kolom kedua dan ketiga. Bagaimana saya mencegahnya?
Render yang diinginkan mungkin terlihat seperti:
• Number one • Number four is a
• Number two bit longer
• Number three • Number five
atau
• Number one • Number three • Number five
• Number two • Number four is a
bit longer
Sunting: Lebar hanya ditentukan untuk menunjukkan render yang tidak diinginkan. Dalam kasus nyata, tentu saja tidak ada lebar tetap.
html
css
css-multicolumn-layout
Timwi
sumber
sumber
Jawaban:
Cara yang benar untuk melakukan ini adalah dengan properti CSS pembobolan :
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:Tampilkan cuplikan kode
Seperti yang disebutkan orang lain, Anda dapat melakukan
overflow: hidden
ataudisplay: 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
dandisplay:inline-block
solusi yang dapat diandalkan tetapi non-semantik adalah untuk membungkus setiap item daftar dalam daftar sendiri dan menerapkan aturan gaya di sana:sumber
break-inside: avoid-column
page-break-inside:avoid
harus bekerja di 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
adalah pilihan yang lebih baik.display: inline-block;
sayangnya, menyebabkan kebiasaan baru dengan Chrome.Menambahkan;
elemen anak akan mencegah mereka terpecah antara kolom.
sumber
display:block
elemen. Ini kemungkinan akan menjadi solusi Firefox yang solid untuk saat ini.<li>
tetapi saya harus menambahkanwidth:100%;
untuk mencegah mereka menumpuk secara horizontal.atur mengikuti gaya elemen yang tidak ingin Anda hancurkan:
sumber
overflow:hidden
aturan ini tidak untuk memperbaiki aturan lain, adalah apa yang menyebabkan tata letak nonbreaking ...Pada Oktober 2014, pembobolan tampaknya masih bermasalah di Firefox dan IE 10-11. Namun, menambahkan overflow: disembunyikan ke elemen, bersama dengan break-inside: avoid, tampaknya membuatnya bekerja di Firefox dan IE 10-11. Saat ini saya menggunakan:
sumber
Firefox sekarang mendukung ini:
Ini memecahkan masalah elemen yang melanggar kolom.
sumber
page-break-before:
ataupage-break-after:
tetapi tidakpage-break-inside:
Jawaban yang diterima sekarang berusia dua tahun dan segala sesuatu tampaknya telah berubah.
Artikel ini menjelaskan penggunaan
column-break-inside
properti. Saya tidak bisa mengatakan bagaimana atau mengapa ini berbedabreak-inside
, karena hanya yang terakhir yang tampaknya didokumentasikan dalam spesifikasi W3. Namun, Chrome dan Firefox mendukung yang berikut:sumber
Ini bekerja untuk saya di 2015:
sumber
ul
elemen, yang diposting di trik CSS: css-tricks.com/almanac/properties/b/break-inside , dan tampaknya benar berdasarkan catatan kompatibilitas caniuse: "Dukungan parsial mengacu tidak mendukungbreak-before
,break-after
,break-inside
sifat Browser berbasis WebKit dan Blink memang memiliki dukungan setara untuk properti non-standar-webkit-column-break-*
untuk mencapai hasil yang sama (tetapi hanya nilaiauto
-always
nilai). Firefox tidak mendukungbreak-*
tetapi mendukungpage-break-*
properti untuk mencapai hasil yang sama. "Kode berikut berfungsi untuk mencegah pemutusan kolom di dalam elemen:
sumber
Pada tahun 2019, memiliki ini berfungsi untuk saya di Chrome, Firefox dan Opera (setelah banyak upaya gagal lainnya):
sumber
Firefox 26 tampaknya membutuhkan
Dan kebutuhan Chrome 32
sumber
Saya punya masalah yang sama saya pikir dan menemukan solusi dalam hal ini:
Bekerja juga di FF 38.0.5: http://jsfiddle.net/rkzj8qnv/
sumber
Solusi yang mungkin untuk Firefox adalah mengatur "tampilan" properti CSS dari elemen yang tidak ingin Anda hilangkan di dalamnya menjadi "tabel". Saya tidak tahu apakah itu bekerja untuk tag LI (Anda mungkin akan kehilangan daftar -item-style), tetapi berfungsi untuk tag P.
sumber
Saya baru saja memperbaiki beberapa
div
s yang membelah ke kolom berikutnya dengan menambahkanuntuk anak-anak
div
.* Menyadari itu hanya memperbaikinya di Firefox!
sumber
Saya menghadapi masalah yang sama saat menggunakan kolom kartu
saya memperbaikinya menggunakan
sumber
bekerja dengan sempurna
sumber
Saya membuat pembaruan dari jawaban yang sebenarnya.
Ini tampaknya bekerja pada firefox dan chrome: http://jsfiddle.net/gatsbimantico/QJeB7/1/embedded/result/
Catatan: The mengapung properti tampaknya menjadi orang yang membuat perilaku blok.
sumber
Jawaban ini mungkin hanya berlaku untuk keadaan tertentu; Jika Anda mengatur ketinggian ke elemen Anda, ini akan dipatuhi oleh gaya kolom. Di sana-dengan menjaga segala sesuatu yang terkandung dalam ketinggian itu menjadi satu baris.
Saya punya daftar, seperti op, tetapi berisi dua elemen, item dan tombol untuk bertindak atas item-item itu. Saya diperlakukan seperti meja
<ul> - table
,<li> - table-row
,<div> - table-cell
menempatkan UL dalam tata letak 4 kolom. Kolom kadang-kadang dibagi antara item dan tombolnya. Trik yang saya gunakan adalah memberi elemen Div ketinggian garis untuk menutupi tombol.sumber