Tôi đang làm việc trên một bố trí flexbox lồng nhau nên hoạt động như sau:
Cấp độ ngoài cùng ( ul#main
) là một danh sách ngang phải mở rộng sang bên phải khi thêm nhiều mục vào nó. Nếu nó phát triển quá lớn, cần có một thanh cuộn ngang.
#main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
/* ...and more... */
}
Mỗi mục của danh sách này ( ul#main > li
) có một tiêu đề ( ul#main > li > h2
) và một danh sách bên trong ( ul#main > li > ul.tasks
). Danh sách bên trong này là dọc và nên bọc thành các cột khi cần thiết. Khi gói vào nhiều cột hơn, chiều rộng của nó sẽ tăng lên để nhường chỗ cho nhiều vật phẩm hơn. Việc tăng chiều rộng này cũng nên áp dụng cho mục chứa của danh sách bên ngoài.
.tasks {
flex-direction: column;
flex-wrap: wrap;
/* ...and more... */
}
Vấn đề của tôi là danh sách bên trong không bao bọc khi chiều cao của cửa sổ quá nhỏ. Tôi đã thử làm xáo trộn tất cả các thuộc tính flex, cố gắng làm theo các hướng dẫn tại CSS-Tricks cách tỉ mỉ, nhưng không gặp may.
JSFiddle này cho thấy những gì tôi có cho đến nay.
Kết quả mong đợi (những gì tôi muốn) :
Kết quả thực tế (những gì tôi nhận được) :
Kết quả cũ hơn (những gì tôi nhận được trong năm 2015) :
CẬP NHẬT
Sau một số điều tra, điều này đang bắt đầu giống như một vấn đề lớn hơn. Tất cả các trình duyệt chính hoạt động theo cùng một cách và nó không liên quan gì đến thiết kế flexbox của tôi được lồng vào nhau. Ngay cả bố trí cột flexbox đơn giản hơn cũng từ chối tăng chiều rộng của danh sách khi các mục được bọc.
Điều này JSFiddle khác thể hiện rõ ràng vấn đề. Trong các phiên bản hiện tại của Chrome, Firefox và IE11, tất cả các mục đều được bọc chính xác; chiều cao của danh sách tăng trong row
chế độ, nhưng chiều rộng của nó không tăng trong column
chế độ. Ngoài ra, không có sự phản xạ tức thời của các yếu tố khi thay đổi độ cao của column
chế độ, nhưng có trongrow
chế độ.
Tuy nhiên, thông số kỹ thuật chính thức (xem cụ thể ở ví dụ 5) dường như chỉ ra rằng những gì tôi muốn làm nên có thể.
Ai đó có thể đưa ra một cách giải quyết cho vấn đề này?
CẬP NHẬT 2
Sau rất nhiều thử nghiệm sử dụng JavaScript để cập nhật chiều cao và chiều rộng của các yếu tố khác nhau trong quá trình thay đổi kích thước, tôi đã đi đến kết luận rằng nó quá phức tạp và quá nhiều rắc rối để cố gắng giải quyết theo cách đó. Ngoài ra, việc thêm JavaScript chắc chắn phá vỡ mô hình flexbox, cần được giữ sạch nhất có thể.
Hiện tại, tôi đang quay trở lại overflow-y: auto
thay vì flex-wrap: wrap
để container bên trong cuộn theo chiều dọc khi cần. Nó không đẹp, nhưng đó là một cách để ít nhất không phá vỡ khả năng sử dụng quá nhiều.
column wrap
không mở rộng chiều rộng của nó khi gói. Xem code.google.com/p/chromium/issues/detail?id=247963 để biết thêm thông tin.