ฉันกำลังทำงานกับโครงร่าง flexbox ที่ซ้อนกันซึ่งควรทำงานดังนี้:
ระดับนอกสุด ( ul#main
) เป็นรายการแนวนอนที่ต้องขยายไปทางขวาเมื่อมีการเพิ่มรายการเข้าไปในรายการเพิ่มเติม ถ้ามันใหญ่เกินไปมันควรจะมีแถบเลื่อนแนวนอน
#main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
/* ...and more... */
}
แต่ละรายการในรายการนี้ ( ul#main > li
) มีส่วนหัว ( ul#main > li > h2
) และรายการภายใน ( ul#main > li > ul.tasks
) รายการด้านในนี้เป็นแนวตั้งและควรตัดเข้าไปในคอลัมน์เมื่อจำเป็น เมื่อตัดเป็นคอลัมน์เพิ่มเติมความกว้างควรเพิ่มเพื่อให้มีที่ว่างสำหรับรายการเพิ่มเติม การเพิ่มความกว้างนี้ควรใช้กับรายการที่มีของรายการด้านนอกด้วย
.tasks {
flex-direction: column;
flex-wrap: wrap;
/* ...and more... */
}
ปัญหาของฉันคือรายการภายในไม่ห่อเมื่อความสูงของหน้าต่างเล็กเกินไป ฉันได้ลองยุ่งเกี่ยวกับคุณสมบัติยืดหยุ่นทั้งหมดพยายามทำตามแนวทางที่CSS-Tricksอย่างพิถีพิถัน แต่ไม่มีโชค
JSFiddleนี้แสดงสิ่งที่ฉันมีจนถึงตอนนี้
ผลลัพธ์ที่คาดหวัง (สิ่งที่ฉันต้องการ) :
ผลลัพธ์ที่แท้จริง (สิ่งที่ฉันได้รับ) :
ผลลัพธ์ที่เก่ากว่า (สิ่งที่ฉันได้ในปี 2558) :
UPDATE
หลังจากการตรวจสอบบางอย่างนี้เริ่มดูเหมือนเป็นปัญหาใหญ่ เบราว์เซอร์หลักทั้งหมดทำงานในลักษณะเดียวกันและไม่เกี่ยวข้องกับการออกแบบ flexbox ของฉัน แม้แต่โครงร่างคอลัมน์ flexbox ที่ง่ายกว่าปฏิเสธที่จะเพิ่มความกว้างของรายการเมื่อรายการถูกตัด
JSFiddle อื่นนี้แสดงให้เห็นถึงปัญหาอย่างชัดเจน ใน Chrome เวอร์ชันปัจจุบัน, Firefox และ IE11 รายการทั้งหมดจะถูกห่ออย่างถูกต้อง; ความสูงของรายการจะเพิ่มขึ้นในrow
โหมด แต่ความกว้างของรายการจะไม่เพิ่มขึ้นในcolumn
โหมด นอกจากนี้ยังไม่มีองค์ประกอบ reflow ทันทีเมื่อเปลี่ยนความสูงของcolumn
โหมด แต่มีในrow
โหมด
อย่างไรก็ตามสเป็คอย่างเป็นทางการ(ดูเฉพาะตัวอย่างที่ 5)ดูเหมือนจะระบุว่าสิ่งที่ฉันต้องการจะทำควรจะเป็นไปได้
บางคนสามารถแก้ไขปัญหานี้ได้หรือไม่
อัพเดท 2
หลังจากการทดลองใช้ JavaScript เพื่ออัปเดตความสูงและความกว้างขององค์ประกอบต่างๆในระหว่างการปรับขนาดเหตุการณ์ฉันได้ข้อสรุปว่ามันซับซ้อนเกินไปและมีปัญหามากเกินไปที่จะพยายามแก้ไขด้วยวิธีนี้ นอกจากนี้การเพิ่มจาวาสคริปต์จะทำให้แตกรุ่น flexbox อย่างแน่นอนซึ่งควรรักษาให้สะอาดที่สุดเท่าที่จะทำได้
สำหรับตอนนี้ฉันกลับไปoverflow-y: auto
แทนflex-wrap: wrap
เพื่อให้ภาชนะด้านในเลื่อนตามแนวตั้งเมื่อจำเป็น มันไม่ได้สวย แต่เป็นหนทางข้างหน้าอย่างน้อยก็ไม่ทำลายการใช้งานมากเกินไป
column wrap
ไม่ขยายความกว้างเมื่อห่อ ดูcode.google.com/p/chromium/issues/detail?id=247963สำหรับข้อมูลเพิ่มเติม