Saya sedang mengerjakan tata letak flexbox bersarang yang seharusnya berfungsi sebagai berikut:
Level terluar ( ul#main
) adalah daftar horizontal yang harus diperluas ke kanan ketika lebih banyak item ditambahkan ke dalamnya. Jika terlalu besar, harus ada bilah gulir horizontal.
#main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
/* ...and more... */
}
Setiap item dari daftar ini ( ul#main > li
) memiliki header ( ul#main > li > h2
) dan daftar dalam ( ul#main > li > ul.tasks
). Daftar dalam ini adalah vertikal dan harus membungkus ke dalam kolom saat diperlukan. Ketika membungkus lebih banyak kolom, lebarnya harus bertambah untuk memberi ruang bagi lebih banyak item. Peningkatan lebar ini harus berlaku juga untuk item yang berisi daftar luar.
.tasks {
flex-direction: column;
flex-wrap: wrap;
/* ...and more... */
}
Masalah saya adalah bahwa daftar bagian dalam tidak membungkus ketika ketinggian jendela terlalu kecil. Saya telah mencoba banyak gangguan dengan semua properti fleksibel, mencoba mengikuti panduan di CSS-Trik dengan cermat, tetapi tidak berhasil.
JSFiddle ini menunjukkan apa yang saya miliki sejauh ini.
Hasil yang diharapkan (apa yang saya inginkan) :
Hasil aktual (apa yang saya dapatkan) :
Hasil yang lebih lama (apa yang saya dapatkan di 2015) :
MEMPERBARUI
Setelah beberapa penyelidikan, ini mulai terlihat seperti masalah yang lebih besar. Semua browser utama berperilaku dengan cara yang sama , dan tidak ada hubungannya dengan desain flexbox saya yang bersarang. Layout kolom flexbox yang lebih sederhana menolak untuk menambah lebar daftar saat item dibungkus.
JSFiddle lainnya ini dengan jelas menunjukkan masalahnya. Dalam versi Chrome, Firefox dan IE11 saat ini, semua item terbungkus dengan benar; tinggi daftar bertambah dalam row
mode, tetapi lebarnya tidak bertambah dalam column
mode. Juga, tidak ada reflow langsung elemen sama sekali ketika mengubah ketinggian column
mode, tetapi ada dalam row
mode.
Namun, spesifikasi resmi (lihat contoh 5) tampaknya mengindikasikan bahwa apa yang ingin saya lakukan harus dimungkinkan.
Bisakah seseorang menemukan solusi untuk masalah ini?
PEMBARUAN 2
Setelah banyak bereksperimen menggunakan JavaScript untuk memperbarui tinggi dan lebar berbagai elemen selama acara pengubahan ukuran, saya sampai pada kesimpulan bahwa itu terlalu rumit dan terlalu banyak kesulitan untuk mencoba menyelesaikannya dengan cara itu. Juga, menambahkan JavaScript pasti merusak model flexbox, yang harus dijaga sebersih mungkin.
Untuk saat ini, saya jatuh kembali ke overflow-y: auto
bukan flex-wrap: wrap
sehingga wadah bagian dalam bergulir secara vertikal saat diperlukan. Ini tidak cantik, tetapi ini adalah salah satu cara maju yang setidaknya tidak terlalu merusak kegunaan.
column wrap
tidak memperluas lebarnya saat membungkus. Lihat code.google.com/p/chromium/issues/detail?id=247963 untuk informasi lebih lanjut.