2017-12-26 7 views
5

Die Verwendung von grid-template-columns: repeat(auto-fit, minmax(600px, 1fr)) macht es einfach, ein reaktionsfähiges CSS-Gitter zu erstellen. Der Container wird mit so vielen Elementen gefüllt, die in eine Zeile passen, ohne eine Medienabfrage zu verwenden.Vollständig reagierende Objekte mit CSS-Gitter und automatischer Anpassung. Minmax

.container { 
 
    display: grid; 
 
    grid-gap: 5px; 
 
    grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); 
 
} 
 

 
.item { 
 
    height: 100px; 
 
    background: #ccc; 
 
}
<div class="container"> 
 
    <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 class="item"></div> 
 
    <div class="item"></div> 
 
</div>

Das Problem ist, dass die Elemente als der Bildschirm breiter sind, wenn der Bildschirm kleiner als der in angegebenen minmax() min-Wert. Sie können dies beheben, indem Sie eine Medienabfrage unter 400px hinzufügen. Dies funktioniert jedoch nur, wenn Sie wissen, dass sich kein Inhalt um den Container herum befindet. Und das ist fast unmöglich, wenn der Container irgendwo aufgestellt werden könnte.

Gibt es einen Weg oder eine Eigenschaft, den Elementen zu sagen, dass sie niemals breiter als 100% sein sollten?

Etwas wie: Füllen Sie den Container mit so vielen 400px-Elemente wie möglich, aber stellen Sie sicher, dass keiner von ihnen breiter als 100% der Breite des Containers wird.

CodePen Demo

+0

Mehr über auto-fill und Auto-fit: https://blog.jonstodle.com/responsive-layout-with-css-grid-part-2-auto- fit-auto-fill/ – tobi

+0

Da sich auf der Seite andere Elemente befinden, müsste Ihre Medienabfrage auf dem gesamten Layout basieren, nicht nur auf diesem einen Container. Also wenn * alle Inhalte * auf der Seite diesen Container auf 400px drücken, dann triggern Sie die Medienabfrage ... –

+0

Verwenden Sie andernfalls ein Skript, das den Wert von 'grid-template-columns' wechselt, wenn es eine Breite von 400px erkennt der Kontainer. –

Antwort

0

Füllen Sie den Behälter mit so vielen 400px Gegenständen wie möglich, aber sicher, dass nicht von ihnen größer als 100% der Breite des Behälters gelangt.

, die für Sie das „max-content“ Eigentum verwenden können, in Ihrem Beispiel hierfür wäre:

.unresponsive { 
    grid-template-columns: repeat(auto-fit, minmax(400px, auto)); 
    grid-auto-columns: max-content; 
} 
+0

Gute Idee, aber es funktioniert nicht Ich denke es ist, weil es keine implizit erstellten Gitterspalten (grid-auto-columns) gibt, wenn die Template Spalten automatisch passen/füllen Max-Inhalt innerhalb der Minmax funktionierte auch nicht für mich. – tobi

0

Sie sollten grid-template-columns-grid-template-columns: repeat(auto-fit, minmax(min-content, 400px)) weil minmax Werke diese Art und Weise ändern: es versucht, max anzuwenden Wert und wenn es fehlschlägt, gilt es Minimum. Aber Sie können in Ihrem Gitter auf der rechten Seite Platz finden. Demo:

.container { 
 
    display: grid; 
 
    grid-gap: 5px; 
 
    grid-template-columns: repeat(auto-fit, minmax(min-content, 400px)); 
 
} 
 

 
.item { 
 
    height: 100px; 
 
    background: #ccc; 
 
}
<div class="container"> 
 
    <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 class="item"></div> 
 
    <div class="item"></div> 
 
</div>

Verwandte Themen