Auch wenn gap zu Flexbox kommt, werde ich eine Lösung hinzufügen, die funktioniert.
Es verwendet den Geschwister-Kombinator, um 2 Bedingungen zu überprüfen.
Die erste Bedingung, die überprüft wird, ist, ob ein Element das zweitletzte div:nth-last-child(2)
ist.
Für 4-Spalten-Layouts müssen wir die Positionen 2 & 3 überprüfen Überprüfen Sie, ob es in der zweiten Reihe von 4 div:nth-of-type(4n+2)
oder dritter in einer Reihe div:nth-of-type(4n+3)
ist.
Für 3-Spalten-Layouts müssen wir nur Position 2 überprüfen
div:nth-of-type(3n+2)
Dann können wir wie unten kombinieren für 4-Spalten-Layouts
div:nth-last-child(2) + div:nth-of-type(4n+2)
div:nth-last-child(2) + div:nth-of-type(4n+3)
Wir müssen uns auch um einen Randfall kümmern. Jede Zahl, die 3n+2 & Vielfaches von 4 ist, erhält den 35%igen margin-right div:nth-last-child(2) + div:nth-of-type(4n+4)
3-Spalten-Layouts werden sein
div:nth-last-child(2) + div:nth-of-type(3n+2)
Dann müssen wir dem oben genannten Selektor einen Rand hinzufügen. Der margin-right muss berechnet werden und hängt vom flex-basis ab.
Ich habe ein Beispiel mit 3 und 4 Spalten und einer Media Query hinzugefügt. Ich habe auch einen kleinen JavaScript-Button hinzugefügt, der ein neues div hinzufügt, damit Sie überprüfen können, ob es funktioniert.
Es ist ein bisschen CSS, aber es funktioniert. Ich habe auch darüber auf meiner Website geschrieben, wenn Sie eine etwas ausführlichere Erklärung möchten. https://designkojo.com/css-programming-using-css-pseudo-classes-and-combinators
var number = 11;
$("#add").on("click", function() {
number = number + 1;
$("#main").append("" + number + "");
});
body {
margin: 0;
}
main{
display: flex;
flex-wrap: wrap;
align-items: flex-start;
align-content: flex-start; /* vertikal */
justify-content: space-between;
min-width: 300px;
max-width: 1200px;
margin: 20px auto;
background-color: lightgrey;
height: 100vh;
}
div {
flex-basis: 30%;
background-color: #5F3BB3;
min-height: 20px;
height: 50px;
margin-bottom: 20px;
display: flex;
justify-content: center;
align-items: center;
color: #9af3ff;
font-size: 3em;
}
div:nth-last-child(2) + div:nth-of-type(3n+2) {
background-color: #f1b73e;
margin-right: 35%;
}
@media screen and (min-width: 720px) {
div {
flex-basis: 22%;
}
div:nth-last-child(2) {
background-color: greenyellow;
}
div:nth-of-type(4n+2) {
background-color: deeppink;
}
/* Die Verwendung des Plus-Kombinators gilt für direkte Geschwister */
div:nth-last-child(2) + div:nth-of-type(4n+2) {
background-color: #f1b73e;
margin-right: 52%;
}
div:nth-last-child(2) + div:nth-of-type(4n+3) {
background-color: #f1b73e;
margin-right: 26%;
}
/* Es muss auch das letzte auf 0% gesetzt werden, um zu überschreiben, wenn es (3n+2) wird
* Jede Zahl, die 3n+2 & Vielfaches von 4 ist, erhält den 35% margin-right
* div:nth-last-child(2) + div:nth-of-type(3n+2)
*/
div:nth-last-child(2) + div:nth-of-type(4n+4) {
background-color: #f1b73e;
margin-right: 0;
}
}
Mein neues Projekt
Hinzufügen
1
2
3
4
5
6
7
8
9
10
11