Mauerwerk-layout mit css-raster
Ich versuche zu schaffen, Mauerwerk-layout mit css grid layout. Alle Elemente im grid haben variable Höhen. Und ich weiß nicht, was posten wird. So kann ich nicht definieren grid-row
für jedes Element. Ist es möglich zu Beginn jeden neuen Artikel direkt nach Ende der vorherigen Spalte?
Code, den ich versuche:
CSS:
.wrapper {
display: grid;
grid-template-columns: repeat(auto-fill, 330px);
align-items: flex-start;
grid-column-gap: 10px;
grid-row-gap: 50px;
}
.item {
background: black;
border-radius: 5px;
}
HTML:
<div class="wrapper">
<div class="item" style="height:50px"></div>
<div class="item" style="height:100px"></div>
<div class="item" style="height:30px"></div>
<div class="item" style="height:90px"></div>
<div class="item" style="height:80px"></div>
<div class="item" style="height:50px"></div>
<div class="item" style="height:70px"></div>
<div class="item" style="height:40px"></div>
</div>
- AFAIK, CSS-Grid nicht tun, Mauerwerk-Stil, nicht mehr, als andere layout-Methoden tun.
- Ok, kannst du sagen, welche Methoden?
- CSS-Grid-tun können, Mauerwerk ganz gut, wenn Sie definieren können, die die Höhen in der Startaufstellung. Es kann nicht vollständig automatisiert, aber es kann nützlich sein in vielen Fällen. stackoverflow.com/a/43903119/3597276
- wenn Sie 're auf der Suche nach anderen Optionen, siehe meine Antwort hier: stackoverflow.com/q/34480760/3597276
- Problem ist, dass ich nicht bestimmen kann Höhe. Vielen Dank für den link zu den anderen Optionen
- Es wäre cool, wenn man einstellen können implizite Zeilen können sagen, 5px. Die grid-Elemente konnte nur erstrecken sich über so viele, wie Sie benötigen. In das aktuelle layout, das heißt, die vertikalen Leerraum Weg ist, aber es macht auch die grid-Elemente überlappen. Aber wenn Gitter hatte eine Eigenschaft, angewiesen, jedes Element zu finden, unbesetzte Zellen, dann die überlappung gelöst würden, die vertikalen Lücken gegangen wäre, und
grid-gap
odermargin
verwendet werden könnten, um die Kontrolle der Trennung. Ach, ich weiß nicht, ob die Skillung bietet, aber wäre genial wenn es das täte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage, legen Sie die Höhe von jedem Element einzeln. Wenn Sie glücklich sind, dies zu tun, dann eine Mauerwerk-layout kann leicht erreicht werden, mit grid.
Statt der Festlegung einer Höhe für jedes Element festgelegt
grid-row-end
so, dass jedes Element umfasst eine bestimmte Anzahl von Zeilen.Die Höhe des Elements wird dann davon abhängen, die Werte von
grid-auto-rows
undgrid-row-gap
die Sie für das raster.Ich habe ein Codepen hier: https://codepen.io/andybarefoot/pen/NaprOB
Wenn Sie nicht möchten, individuell einstellen
grid-row-end
Wert für jedes Element, das Sie verwenden können, ein bisschen JavaScript zu tun, sondern dynamisch. Habe ich eine weitere "container" - div in jede Position und Messen Sie die Höhe dieses Containers zu berechnen, wie viele Zeilen der Artikel muss span. Ich Sie auf die Seite laden und noch einmal für jedes Element, wenn alle Bilder geladen sind (wie die Höhe der Inhalte wird nicht geändert haben). Wenn Sie kombinieren diesen Ansatz mit einem responsive layout, dann sollten Sie auch neu berechnen auf der Seite passen Sie die Breite der Spalten verändert haben kann und dies wirkt sich auf die Höhe des Inhalts.Hier mein vollständiges Beispiel mit responsive Spalte Größenanpassung: https://codepen.io/andybarefoot/pen/QMeZda
Wenn Sie Elemente mit Variablen breiten können Sie dennoch einen ähnlichen Effekt erzielen, aber die Verpackung der Gitter wird nicht perfekt sein und das Element der Bestellung kann geändert werden, um die Optimierung der Verpackung.
Ich schrieb einen blog auf Medium, über diesen Ansatz im Fall es von Interesse ist: Eine Mauerwerk-Stil-layout mit CSS-Grid -
Dies ist ein Weg, um erstellen Sie das Mauerwerk layout nur mit CSS.
CSS:
HTML:
Hinweis: habe ich keinen code gefunden habe ich es ein paar kleinere Anpassung,
der ursprüngliche code kann gefunden werden hier.
Bitte beachten Sie, dass, wie bereits von Zen:
Können Sie festlegen
span
Werte fürgrid-row-end
dynamisch (mit ein wenig JS, wie man basierend auf meinen Codepen-experiment im Beispiel unten) und verwenden Sie diedense
Schlüsselwort fürgrid-auto-placement
:JS:
CSS:
HTML:
Erreichen Sie dies mit die
Spalte
.Es sieht aus wie Sie versuchen, verwenden Sie eine Kombination von
flex
undgrid
, die möglicherweise verwirrende Dinge. Soweit ich weiß, flex ist im Vergleich zu dem rest der Elemente auf der Seite, wo die Einstellung einer Spalte betrifft Elemente fallen in die Spalten.aktualisiert codepen
display:flex
.