Halaman web saya memiliki daftar 'kurus': misalnya, daftar 100 item yang masing-masing terdiri dari satu kata. Untuk mengurangi pengguliran, saya ingin menyajikan daftar ini dalam dua atau bahkan empat kolom di halaman. Bagaimana saya harus melakukan ini dengan CSS?
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
Saya lebih suka solusi yang fleksibel sehingga jika daftar bertambah menjadi 200 item, saya tidak perlu melakukan banyak penyesuaian manual untuk mengakomodasi daftar baru.
css
html-lists
pengguna776676
sumber
sumber
Jawaban:
Solusi CSS adalah: http://www.w3.org/TR/css3-multicol/
Dukungan browser persis seperti yang Anda harapkan ..
Ia bekerja "di mana saja" kecuali Internet Explorer 9 atau yang lebih lama: http://caniuse.com/multicolumn
Lihat: http://jsfiddle.net/pdExf/
Jika dukungan IE diperlukan, Anda harus menggunakan JavaScript, misalnya:
http://welcome.totheinter.net/columnizer-jquery-plugin/
Solusi lain adalah mengembalikan ke normal hanya
float: left
untuk IE . Urutannya akan salah, tetapi setidaknya akan terlihat serupa:Lihat: http://jsfiddle.net/NJ4Hw/
Anda dapat menerapkan fallback itu dengan Modernizr jika Anda sudah menggunakannya.
sumber
li
di setiap kolom?list-style-position: inside;
yang secara khusus menangani masalah yang ditunjukkan oleh @vsync yang saya yakini.li { break-inside: avoid; }
: jsfiddle.net/thirtydot/pdExf/903 . Saya tidak terlalu paham dengan kolom CSS, jadi mungkin ada cara yang lebih baik.Jika Anda mencari solusi yang juga berfungsi di IE, Anda dapat menempatkan elemen daftar ke kiri. Namun, ini akan menghasilkan daftar ular, seperti ini:
Alih-alih kolom rapi, seperti:
Kode untuk melakukannya adalah:
Anda bisa menambahkan border-bottom ke
li
s untuk membuat aliran item dari kiri ke kanan lebih jelas.sumber
Jika Anda menginginkan jumlah kolom yang telah ditentukan, Anda dapat menggunakan kolom-count dan kolom-gap, seperti yang disebutkan di atas.
Namun, jika Anda menginginkan satu kolom dengan ketinggian terbatas yang akan dibagi menjadi lebih banyak kolom jika diperlukan, ini dapat dicapai cukup dengan mengubah tampilan menjadi fleksibel.
Ini tidak akan berfungsi di IE9 dan beberapa browser lama lainnya. Anda dapat memeriksa dukungan di Can I use
sumber
column-count
akan melakukan jumlah baris yang tidak rata di dalam kolom. Seperti 6 item di kolom pertama, lalu 4, lalu 6, lalu 5.Jawaban ini tidak selalu berskala tetapi hanya membutuhkan sedikit penyesuaian seiring bertambahnya daftar. Secara semantik ini mungkin tampak sedikit kontra-intuitif karena ini adalah dua daftar, tetapi selain itu akan terlihat seperti yang Anda inginkan di browser apa pun yang pernah dibuat.
sumber
2020 - tetap sederhana, gunakan CSS Grid
Banyak dari jawaban ini sudah ketinggalan zaman, ini tahun 2020 dan kami seharusnya tidak mengaktifkan orang-orang yang masih menggunakan IE9. Jauh lebih sederhana dengan hanya menggunakan kisi CSS .
Kodenya sangat sederhana, dan Anda dapat dengan mudah menyesuaikan berapa banyak kolom yang ada menggunakan
grid-template-columns
. Lihat ini dan kemudian bermain-main dengan biola ini agar sesuai dengan kebutuhan Anda.sumber
Saya menemukan bahwa (saat ini) Chrome (
Version 52.0.2743.116 m
) memiliki banyak sekali kebiasaan dan masalah dengan csscolumn-count
terkait item overflow dan elemen posisi absolut di dalam item, terutama dengan beberapa transisi dimensi ..Ini benar-benar berantakan dan tidak dapat diperbaiki, jadi saya mencoba menangani ini melalui javascript sederhana, dan telah membuat perpustakaan yang melakukan itu - https://github.com/yairEO/listBreaker
Halaman demo
sumber
Jika Anda dapat mendukungnya, CSS Grid mungkin adalah cara terbersih untuk membuat daftar satu dimensi menjadi tata letak dua kolom dengan interior responsif.
Ini adalah dua baris kunci yang akan memberi Anda tata letak 2 kolom Anda
sumber
Cara pertama seluler adalah menggunakan Kolom CSS untuk menciptakan pengalaman layar yang lebih kecil, lalu menggunakan Media Queries untuk meningkatkan jumlah kolom di setiap breakpoint yang ditentukan tata letak Anda.
sumber
Inilah yang saya lakukan
sumber