Mit der Flexbox ist das Erstellen von Dachrinnen ein Problem, insbesondere wenn es um das Wickeln geht.
Sie müssen negative Ränder verwenden ( wie in der Frage gezeigt ):
#box {
display: flex;
width: 100px;
margin: 0 -5px;
}
... oder ändern Sie den HTML-Code ( wie in einer anderen Antwort gezeigt ):
<div class='flex-wrapper'>
<div class='flex'>
<div class='box'></div>
<div class='box'></div>
...
</div>
</div>
... oder etwas anderes.
In jedem Fall benötigen Sie einen hässlichen Hack, damit es funktioniert, da die Flexbox flex-gap
( zumindest für den Moment) keine " " -Funktion bietet .
Das Problem der Dachrinnen ist jedoch mit CSS Grid Layout einfach und unkompliziert.
Die Rasterspezifikation bietet Eigenschaften, die Platz zwischen Rasterelementen schaffen, während der Abstand zwischen Elementen und dem Container ignoriert wird. Diese Eigenschaften sind:
grid-column-gap
grid-row-gap
grid-gap
(die Abkürzung für beide Eigenschaften oben)
Vor kurzem wurde die Spezifikation aktualisiert, um sie an das CSS-Box-Ausrichtungsmodul anzupassen , das eine Reihe von Ausrichtungseigenschaften für alle Box-Modelle bereitstellt. Die Eigenschaften sind also jetzt:
column-gap
row-gap
gap
(Stenografie)
Da jedoch nicht alle Grid-unterstützenden Browser die neueren Eigenschaften unterstützen, verwende ich die Originalversionen in der folgenden Demo.
Wenn zwischen den Elementen und dem Container ein Abstand erforderlich ist, padding
funktioniert der Container einwandfrei (siehe das dritte Beispiel in der Demo unten).
Aus der Spezifikation:
10.1. Dachrinnen: dierow-gap
, column-gap
und gap
Eigenschaften
Das row-gap
undcolumn-gap
Eigenschaften (und ihre gap
Kurzform) definieren, wenn sie in einem Rastercontainer angegeben werden, die Rinnen zwischen Rasterzeilen und Rasterspalten. Ihre Syntax ist in CSS Box Alignment 3 §8 Lücken zwischen Boxen definiert .
Diese Eigenschaften wirken so, als ob die betroffenen Gitterlinien an Dicke gewonnen hätten: Die Gitterbahn zwischen zwei Gitterlinien ist der Abstand zwischen den Dachrinnen, die sie darstellen.
.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>
Mehr Informationen: