Saya sedang membangunkan susun atur Flexbox bersarang yang berfungsi seperti ini:
Tahap paling luar (ul#main
) ialah senarai mendatar yang mesti berkembang ke kanan apabila lebih banyak item ditambah. Jika ia menjadi terlalu besar, harus ada bar skrol mendatar.
#main { display: flex; flex-direction: row; flex-wrap: nowrap; overflow-x: auto; /* ...and more... */ }
Setiap item dalam senarai ini (ul#main > li
) 都有一个标头 (ul#main > li > h2
) 和一个内部列表 (ul#main > li > ul.tasks
). Senarai dalaman ini adalah menegak dan harus dibalut ke dalam lajur apabila diperlukan. Apabila ia membungkus lebih banyak lajur, lebarnya harus meningkat untuk memberi ruang kepada lebih banyak item. Peningkatan lebar ini juga harus digunakan pada item yang mengandungi senarai luar.
.tasks { flex-direction: column; flex-wrap: wrap; /* ...and more... */ }
Masalah saya ialah apabila ketinggian tingkap terlalu kecil, senarai dalam tidak membalut. Saya cuba banyak mengubah semua sifat Flex, cuba mengikuti garis panduan CSS-Tricks dengan ketat, tetapi tidak berjaya.
JSFiddle ini menunjukkan apa yang saya ada setakat ini.
Hasil yang dijangkakan (Apa yang saya mahu):
Hasil sebenar (apa yang saya dapat):
Keputusan yang lebih lama (keputusan yang saya dapat pada 2015):
Selepas beberapa siasatan, ini mula kelihatan seperti masalah yang lebih besar. Semua pelayar utama berkelakuan dengan cara yang sama, ini tiada kaitan dengan reka bentuk Flexbox bersarang saya. Malah susun atur lajur Flexbox yang lebih ringkas tidak menambah lebar senarai sebagai item yang dibalut.
Satu lagi JSFiddle jelas menunjukkan masalah itu. Dalam versi semasa Chrome, Firefox dan IE11, semua item dibalut dengan betul; row
模式下列表的高度会增加,但在 column
模式下其宽度不会增加。另外,当更改 column
模式的高度时,根本不会立即回流元素,但在 row
(lihat contoh 5 untuk butiran) nampaknya menunjukkan bahawa apa yang saya mahu lakukan sepatutnya boleh dilakukan.
Bolehkah sesiapa mencari penyelesaian untuk masalah ini?Kemas kini 2
Sekarang, saya kembali ke
supaya bekas dalam menatal secara menegak jika diperlukan. Ia tidak cantik, tetapi ia adalah pendekatan yang sekurang-kurangnya tidak merosakkan kebolehgunaan terlalu banyak. overflow-y: auto
而不是 flex-wrap:wrapper
Lewat ke parti tetapi masih mengalami masalah ini bertahun-tahun kemudian. Akhirnya menemui penyelesaian menggunakan grid. Pada bekas boleh guna
Saya ada contoh pada CodePen untuk menukar antara isu Flexbox dan pembetulan jaringan: https://codepen .io/MandeeD/pen/JVLdLd
Soalan
Ini kelihatan seperti kecacatan asas dalam reka letak fleksibel.
Bekas fleksibel berorientasikan lajur tidak mengembang untuk menampung lajur tambahan. (Ini bukan masalah dalam
flex-direction: row
.)Soalan ini telah ditanya berkali-kali (lihat senarai di bawah) dan tiada jawapan yang jelas dalam CSS.
Sukar untuk menentukan ini sebagai pepijat kerana masalah berlaku dalam semua pelayar utama. Tetapi ia menimbulkan persoalan:
Anda fikir sekurang-kurangnya salah seorang daripada mereka akan melakukannya dengan betul. Saya hanya boleh membuat spekulasi mengapa. Mungkin ini adalah pelaksanaan teknikal yang sukar dan oleh itu ditangguhkan untuk lelaran ini.
Kemas kini: Isu ini nampaknya telah diselesaikan dalam Edge v16.
Penerangan masalah
OP mencipta demo yang berguna untuk menggambarkan masalah. Saya menyalinnya di sini: http://jsfiddle.net/nwccdwLw/1/ p>
Pilihan Penyelesaian
Penyelesaian hacky daripada komuniti Stack Overflow:
"Nampaknya masalah ini tidak boleh diselesaikan dengan CSS sahaja, jadi saya mengesyorkan anda menggunakan penyelesaian JQuery."
Siaran lain yang menerangkan isu yang sama
saya tidak mengembang lebar untuk meliputi semua- ?