Dengan flexbox, membuat selokan adalah hal yang menyakitkan, terutama ketika pembungkusnya terlibat.
Anda perlu menggunakan margin negatif ( seperti yang ditunjukkan dalam pertanyaan ):
#box {
display: flex;
width: 100px;
margin: 0 -5px;
}
... atau ubah HTML ( seperti yang ditunjukkan pada jawaban lain ):
<div class='flex-wrapper'>
<div class='flex'>
<div class='box'></div>
<div class='box'></div>
...
</div>
</div>
... atau sesuatu yang lain.
Bagaimanapun, Anda memerlukan peretasan yang jelek untuk membuatnya berfungsi karena flexbox tidak menyediakan fitur " flex-gap
" ( setidaknya untuk saat ini ).
Masalah talang, bagaimanapun, sederhana dan mudah dengan Layout Grid CSS.
Spesifikasi Grid menyediakan properti yang menciptakan ruang di antara item kotak, sambil mengabaikan ruang antara item dan wadah. Properti-properti ini adalah:
grid-column-gap
grid-row-gap
grid-gap
(singkatan untuk kedua properti di atas)
Baru-baru ini, spek telah diperbarui agar sesuai dengan Modul Alignment Kotak CSS , yang menyediakan seperangkat properti penyejajaran untuk digunakan di semua model kotak. Jadi propertinya sekarang:
column-gap
row-gap
gap
(steno)
Namun, tidak semua browser yang mendukung Grid mendukung properti yang lebih baru, jadi saya akan menggunakan versi asli dalam demo di bawah ini.
Juga, jika jarak diperlukan antara item dan wadah, padding
pada wadah berfungsi dengan baik (lihat contoh ketiga dalam demo di bawah).
Dari spec:
10.1. Talang: yang row-gap
, column-gap
dan gap
sifat
The row-gap
dan column-gap
properti (dan gap
singkatannya), saat ditentukan pada wadah kisi, menentukan talang antara baris kisi dan kolom kisi. Sintaks mereka didefinisikan dalam Kotak CSS Alignment 3 §8 Kesenjangan Antara Kotak .
Efek dari sifat-sifat ini adalah seolah-olah garis grid yang terpengaruh memperoleh ketebalan: jalur kisi antara dua garis kisi adalah ruang antara selokan yang mewakili mereka.
.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>
Informasi lebih lanjut: