Ist es möglich, einen CSS-Grid-Wrap ohne Medienabfragen zu erstellen?
In meinem Fall habe ich eine nicht deterministische Anzahl von Elementen, die in ein Raster eingefügt werden sollen, und ich möchte, dass dieses Raster umbrochen wird. Mit Flexbox kann ich die Dinge nicht zuverlässig platzieren. Ich möchte auch eine Reihe von Medienabfragen vermeiden.
Hier ist ein Beispielcode :
.grid {
display: grid;
grid-gap: 10px;
grid-auto-flow: column;
grid-template-columns: 186px 186px 186px 186px;
}
.grid > * {
background-color: green;
height: 200px;
}
<div class="grid">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
Und hier ist ein GIF-Bild:
Als Randnotiz grid-template-columns
wäre es großartig , wenn mir jemand sagen könnte, wie ich es vermeiden könnte, die Breite aller Elemente anzugeben, mit denen ich zusammen bin . Ich würde es vorziehen, wenn die Kinder ihre eigene Breite angeben.
grid-template-columns: auto auto auto auto;
funktioniert in diesem Fall? =)Antworten:
Verwenden Sie entweder
auto-fill
oderauto-fit
als Wiederholungsnummer derrepeat()
Notation.auto-fill
Das Raster wiederholt so viele Spuren wie möglich, ohne dass der Container überläuft.
In diesem Fall können im obigen Beispiel (siehe Bild) nur 5 Spuren in den Gittercontainer passen, ohne überzulaufen. Es gibt nur 4 Elemente in unserem Raster, sodass ein fünftes als leere Spur innerhalb des verbleibenden Bereichs erstellt wird.
Der Rest des verbleibenden Platzes, Spur 6, beendet das explizite Raster. Dies bedeutet, dass nicht genügend Platz vorhanden war, um eine andere Spur zu platzieren.
auto-fit
Das
auto-fit
Schlüsselwort verhält sich wie das gleicheauto-fill
, außer dass nach dem Platzierungsalgorithmus für Rasterelemente alle leeren Spuren innerhalb des verbleibenden Bereichs reduziert werden0
.Das Raster wiederholt immer noch so viele Spuren wie möglich, ohne den Container zu überlaufen, aber die leeren Spuren werden auf reduziert
0
.Eine kollabierte Spur wird so behandelt, als hätte sie eine feste Spurgrößenfunktion von
0px
.Im Gegensatz zum
auto-fill
Bildbeispiel wird die leere fünfte Spur reduziert und das explizite Raster direkt nach dem vierten Element beendet.auto-fill
vs.auto-fit
Der Unterschied zwischen den beiden ist spürbar, wenn die
minmax()
Funktion verwendet wird.Verwenden
minmax(186px, 1fr)
diese Option, um die Elemente von186px
bis zu186px
einem Bruchteil des verbleibenden Platzes im Rastercontainer zu sortieren.Bei der Verwendung
auto-fill
wachsen die Elemente, sobald kein Platz mehr für leere Spuren vorhanden ist.Bei Verwendung
auto-fit
werden die Elemente vergrößert, um den verbleibenden Platz zu füllen, da alle leeren Spuren reduziert sind0px
.Spielplatz:
CodePen
Überprüfen der Spuren zum automatischen Ausfüllen
Überprüfen von Auto-Fit-Spuren
quelle
display: grid
Elementjustify-content: center
repeat(auto-fill, minmax(186px, 1fr));
ist nicht Pixel, aber nur solange das div Text enthält?Sie möchten entweder
auto-fit
oderauto-fill
innerhalb derrepeat()
Funktion:Der Unterschied zwischen den beiden wird deutlich, wenn Sie auch a verwenden
minmax()
, um flexible Spaltengrößen zu ermöglichen:Auf diese Weise können sich Ihre Spalten in der Größe von 186 Pixel bis zu Spalten gleicher Breite über die gesamte Breite des Containers biegen.
auto-fill
erstellt so viele Spalten, wie in die Breite passen. Wenn beispielsweise fünf Spalten passen, obwohl Sie nur vier Rasterelemente haben, gibt es eine fünfte leere Spalte:Wenn Sie
auto-fit
stattdessen verwenden, werden leere Spalten verhindert und Ihre Spalten bei Bedarf weiter gestreckt:quelle
Sie suchen vielleicht
auto-fill
:Demo: http://codepen.io/alanbuchanan/pen/wJRMox
Um den verfügbaren Speicherplatz effizienter zu nutzen, können Sie das zweite Argument verwenden
minmax
und übergebenauto
:Demo: http://codepen.io/alanbuchanan/pen/jBXWLR
Wenn Sie die leeren Spalten nicht möchten, können Sie
auto-fit
stattdessen verwendenauto-fill
.quelle
Ich hatte eine ähnliche Situation. Zusätzlich zu dem, was Sie getan haben, wollte ich meine Spalten im Container zentrieren, ohne dass leere Spalten für sie links oder rechts stehen:
quelle
Hier ist mein Versuch. Entschuldigen Sie den Flaum, ich fühlte mich besonders kreativ.
Meine Methode ist ein Elternteil
div
mit festen Abmessungen . Der Rest passt nur den Inhalt in diesem Div entsprechend an.Dies wird neu skaliert die Bilder unabhängig von dem Seitenverhältnis. Es wird auch kein hartes Zuschneiden geben .
quelle