Với flexbox, tạo máng xối là một nỗi đau, đặc biệt là khi có sự bao bọc.
Bạn cần sử dụng lề âm ( như trong câu hỏi ):
#box {
display: flex;
width: 100px;
margin: 0 -5px;
}
... hoặc thay đổi HTML ( như thể hiện trong câu trả lời khác ):
<div class='flex-wrapper'>
<div class='flex'>
<div class='box'></div>
<div class='box'></div>
...
</div>
</div>
... Hoặc một cái gì đó khác.
Trong mọi trường hợp, bạn cần một bản hack xấu xí để làm cho nó hoạt động vì flexbox không cung cấp flex-gap
tính năng "" ( ít nhất là bây giờ ).
Tuy nhiên, vấn đề về máng xối rất đơn giản và dễ dàng với CSS Grid Layout.
Thông số lưới cung cấp các thuộc tính tạo không gian giữa các mục lưới, trong khi bỏ qua khoảng trắng giữa các mục và vùng chứa. Những tính chất này là:
grid-column-gap
grid-row-gap
grid-gap
(tốc ký cho cả hai thuộc tính trên)
Gần đây, thông số kỹ thuật đã được cập nhật để phù hợp với Mô-đun căn chỉnh hộp CSS , cung cấp một tập hợp các thuộc tính căn chỉnh để sử dụng trên tất cả các mô hình hộp. Vì vậy, các thuộc tính bây giờ là:
column-gap
row-gap
gap
(tốc ký)
Tuy nhiên, không phải tất cả các trình duyệt hỗ trợ Grid đều hỗ trợ các thuộc tính mới hơn, vì vậy tôi sẽ sử dụng các phiên bản gốc trong bản demo bên dưới.
Ngoài ra, nếu khoảng cách là cần thiết giữa các mục và container, padding
trên container hoạt động tốt (xem ví dụ thứ ba trong bản demo bên dưới).
Từ thông số kỹ thuật:
10.1. Máng xối: các row-gap
, column-gap
và gap
thuộc tính
Các thuộc tính row-gap
và column-gap
(và tốc gap
ký của chúng ), khi được chỉ định trên một thùng chứa lưới, xác định máng xối giữa các hàng lưới và cột lưới. Cú pháp của chúng được định nghĩa trong Sắp xếp hộp CSS 3 §8 Khoảng cách giữa các hộp .
Ảnh hưởng của các tính chất này như thể các đường lưới bị ảnh hưởng có được độ dày: đường lưới giữa hai đường lưới là khoảng cách giữa các máng xối đại diện cho chúng.
.box {
display: inline-grid;
grid-auto-rows: 50px;
grid-template-columns: repeat(4, 50px);
border: 1px solid black;
}
.one {
grid-column-gap: 5px;
}
.two {
grid-column-gap: 10px;
grid-row-gap: 10px;
}
.three {
grid-gap: 10px;
padding: 10px;
}
.item {
background: lightgray;
}
<div class='box one'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
<hr>
<div class='box two'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
<hr>
<div class='box three'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
Thêm thông tin: