Dies ist eine Frage, die ich bereits eine Lösung haben, aber ich frage mich, ob es einen besseren Weg gibt. Was ich will, ist, flexbox zu verwenden, um Reihen von Gegenständen mit gleichmäßigem Raum dazwischen und einer Linie zwischen Reihen zu haben. Das erste und das zweite Beispiel im Snippet unten erreichen dies mit einem :after
, aber ich muss eine Menge CSS verwenden, um es in der letzten Zeile zu verstecken.Flexbox Abstand zwischen mit Zeile zwischen Zeilen
.item:nth-child(4n + 1):nth-last-child(4):after,
.item:nth-child(4n + 1):nth-last-child(4):after,
.item:nth-child(4n + 1):nth-last-child(2):after,
.item:nth-child(4n + 1):nth-last-child(1):after{
display: none;
}
Sicher gibt es einen besseren Weg (mit flexbox) Weiß jemand?
Ich habe versucht, einen Rahmen für jedes Element verwenden, aber offensichtlich hat dies Platz zwischen ihnen, die nicht funktioniert, und dann würde ich es immer noch mit :nth-last-child
verstecken müssen.
.outer{
background-color: #ccc;
margin-bottom: 15px;
}
.wrap{
overflow: hidden;
flex: 4;
justify-content: space-between;
flex-flow: row wrap;
width: 80%;
margin: 0 auto;
background-color: #cdcdcd;
display: flex;
}
.item{
width: 23%;
padding-bottom: 30px;
margin-bottom: 30px;
position: relative;
}
.item2{
width: 23%;
padding-bottom: 30px;
margin-bottom: 30px;
position: relative;
border-bottom: 1px solid red;
}
.item:nth-child(4n + 1):after{
content: "";
position: absolute;
left: 0;
width: 500%;
bottom: 0;
border-bottom: 1px solid red;
}
@media (max-width: 768px) {
.item:nth-child(2n + 1):nth-last-child(2):after,
.item:nth-child(2n + 1):nth-last-child(1):after{
display: none;
}
.item{
width: 43%;
}
}
@media (min-width: 768px) {
.item:nth-child(4n + 1):nth-last-child(4):after,
.item:nth-child(4n + 1):nth-last-child(4):after,
.item:nth-child(4n + 1):nth-last-child(2):after,
.item:nth-child(4n + 1):nth-last-child(1):after{
display: none;
}
}
<div class="outer">
<h3>Working example - 8 Items</h3>
<div class="wrap">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
<div class="item">Item 8</div>
</div>
</div>
<div class="outer">
<h3>Working example - 5 Items</h3>
<div class="wrap">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
</div>
</div>
<div class="outer">
<h3>Using normal border</h3>
<div class="wrap">
<div class="item2">Item 1</div>
<div class="item2">Item 2</div>
<div class="item2">Item 3</div>
<div class="item2">Item 4</div>
<div class="item2">Item 5</div>
</div>
</div>
vier Artikel für jede Zeile fest oder ändert sich zu ziehen? –
Es wird sich für kleinere Geräte ändern, was mehr Komplexität hinzufügt, also habe ich das im Beispiel nicht erwähnt :) –
Wenn sie 3 Reihen in einem kleinen Gerät sind, haben wir also 3 rote Lins? Wenn es ist, glaube ich nicht, dass Ihr Code genug ist. –