Tôi có đánh dấu HTML bao gồm ba divs:Thay đổi bố cục của các yếu tố sử dụng CSS mà không thay đổi HTML
<div class="gallery">Gallery</div>
<div class="content">Content</div>
<div class="sidebar">Sidebar</div>
tôi muốn trình bày nó trong hai bố trí khác nhau sử dụng CSS (sẽ đẹp hơn nếu tôi có thể kiểm soát xem thanh bên xuất hiện ở bên trái hoặc bên phải):
+------------------+
| Gallery |
+------+-----------+
| Side | Content |
| | |
+------+-----------+
+------+-----------+
| Side | Gallery |
+ +-----------+
| | Content |
| | |
+------+-----------+
Trên thực tế, sẽ đẹp hơn nếu tôi có thể kiểm soát xem thanh bên xuất hiện bên trái hay phải.
Tôi có thể thêm các div bổ sung và/hoặc thay đổi thứ tự nguồn divs miễn là nội dung xuất hiện trước thanh bên. Nhưng HTML không thể thay đổi trên cơ sở từng bố cục.
Đây là nỗ lực không đầy đủ của tôi để giải quyết vấn đề bằng cách sử dụng tài sản đặt hàng flexbox +.
/* for demonstration */
.gallery { height: 100px; background-color: #CCC; }
.content { height: 200px; background-color: #EEE; }
.sidebar { height: 150px; background-color: #AAA; }
/* common */
.middle { display: flex; flex-direction: row; flex-wrap: wrap; }
/* layout-1 */
.middle.layout-1 .gallery { order: 1; width: 100%; }
.middle.layout-1 .content { order: 3; width: 75%; }
.middle.layout-1 .sidebar { order: 2; width: 25%; }
/* layout-2 */
.middle.layout-2 .gallery { order: 2; width: 75%; }
.middle.layout-2 .content { order: 3; width: 75%; }
.middle.layout-2 .sidebar { order: 1; width: 25%; }
<div class="middle layout-1">
<div class="gallery">Gallery</div>
<div class="content">Content (this layout works perfectly)</div>
<div class="sidebar">Sidebar</div>
</div>
<hr>
<div class="middle layout-2">
<div class="gallery">Gallery</div>
<div class="content">Content (should go below gallery)</div>
<div class="sidebar">Sidebar</div>
</div>
Trong cả hai ví dụ về các bạn, sidebar nằm bên tay trái, hay tôi thiếu một cái gì đó –
Tôi muốn (bố trí 1) hiển thị thư viện phía trên cả hai cột (bố cục 2) thư viện bên cạnh thanh bên + nội dung ở trên. Khả năng đặt thanh bên phải (tức là hai biến thể bổ sung) sẽ là tiền thưởng. –
Cách bố trí thứ hai, thật không may, không thể đạt được với flexbox một mình mà không cần đánh dấu bổ sung. – Shaggy