Dzięki Flexbox tworzenie rynien jest uciążliwe, szczególnie gdy chodzi o owijanie.
Musisz użyć ujemnych marginesów ( jak pokazano w pytaniu ):
#box {
display: flex;
width: 100px;
margin: 0 -5px;
}
... lub zmień HTML ( jak pokazano w innej odpowiedzi ):
<div class='flex-wrapper'>
<div class='flex'>
<div class='box'></div>
<div class='box'></div>
...
</div>
</div>
... albo coś innego.
W każdym razie potrzebujesz brzydkiego hacka, aby działał, ponieważ Flexbox nie zapewnia funkcji „ flex-gap
” ( przynajmniej na razie ).
Problem z rynnami jest jednak prosty i łatwy dzięki CSS Grid Layout.
Specyfikacja siatki zapewnia właściwości, które tworzą przestrzeń między elementami siatki, ignorując przestrzeń między elementami a kontenerem. Te właściwości to:
grid-column-gap
grid-row-gap
grid-gap
(skrót dla obu nieruchomości powyżej)
Ostatnio specyfikacja została zaktualizowana, aby była zgodna z CSS Box Alignment Module , który zapewnia zestaw właściwości wyrównania do użytku we wszystkich modelach pudełek. Więc właściwości są teraz:
column-gap
row-gap
gap
(stenografia)
Jednak nie wszystkie przeglądarki obsługujące Grid obsługują nowsze właściwości, więc użyję oryginalnych wersji w poniższej wersji demonstracyjnej.
Ponadto, jeśli potrzebny jest odstęp między przedmiotami a pojemnikiem, padding
na pojemniku działa dobrze (patrz trzeci przykład w pokazie poniżej).
Ze specyfikacji:
10.1 Rynny: te row-gap
, column-gap
oraz gap
ogłoszenia
Właściwości row-gap
i column-gap
(oraz ich gap
skróty), gdy są określone w kontenerze siatki, definiują rynny między rzędami siatki i kolumnami siatki. Ich składnia jest zdefiniowana w CSS Box Alignment 3 §8 Gaps Between Boxes .
Efekt tych właściwości jest taki, jakby grubość uzyskanych linii siatki: grubość linii między dwiema liniami siatki była przestrzenią między rynnami, które je reprezentują.
.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>
Więcej informacji: