Dies ist der dritte und letzte Teil einer dreiteiligen Serie über die sichere Verwendung von CSS Grid im Internet Explorer 11 (IE11), ohne verrückt zu werden.
In Teil 1 habe ich einige der gängigen Missverständnisse über die native CSS-Grid-Implementierung von IE11 behandelt. In Teil 2 habe ich gezeigt, wie einfach es tatsächlich ist, IE-freundlichen CSS-Grid-Code zu schreiben.
Heute trete ich kurz vom CSS Grid zurück, um Ihnen eine Flexbox-Technik zu zeigen, die die grundlegende Funktionalität der automatischen Platzierung von CSS Grid nachbildet. Diese CSS-Grid-Replik wird sogar so aussehen, als wären grid-gap angewendet worden. Ich muss jedoch sehr klar sein: Hier geht es nicht darum, wie die tatsächliche automatische Platzierung von CSS Grid in IE funktioniert.
Artikelserie
- Entlarvung gängiger IE Grid-Missverständnisse
- CSS Grid und der neue Autoprefixer
- Eine automatische Platzierung mit Lücken simulieren (Dieser Beitrag)
- Doppelte Bereichsnamen werden jetzt unterstützt!
So erstellen Sie ein Dummy-Grid mit Zelllücken
Schritt 1: HTML
Ich werde diesen einfachen HTML-Code als Beispiel verwenden
<div class="grid-wrapper">
<div class="grid">
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
</div>
</div>
Schritt 2: Border-box Box-Sizing
Das Erste, was wir im CSS tun müssen, ist sicherzustellen, dass alle Boxen anhand von border-box und nicht content-box dimensioniert werden. Der beste Weg, dies zu tun, ist die Vererbungstechnik box-sizing: border-box
html {
box-sizing: border-box;
}
*, *::before, *::after {
box-sizing: inherit;
}
Dies wird global angewendet. Wenn Sie an einem bestehenden Projekt arbeiten, bei dem box-sizing nicht auf border-box gesetzt ist, ändern Sie html im Snippet zu einem Selektor, der das Element auswählt, das Sie in ein Grid umwandeln möchten.
Schritt 3: Flexbox
Als Nächstes müssen Sie einige Flexbox-Einstellungen aktivieren
.grid {
/* Forces equal cell heights */
display: flex;
flex-wrap: wrap;
}
Schritt 4: Breiten
Nun richten Sie Ihre Spaltenbreiten ein. Wir erstellen ein einfaches Drei-Spalten-Grid
.grid-cell {
/* Sets column count */
width: calc(100% / 3); /* calc() method */
width: 33.33%; /* percentage method */
}
Die calc()-Methode ermöglicht es, die Spaltenbreiten etwas einfacher zu ändern. Sie geben die gewünschte Anzahl von Spalten an und der Browser erledigt die Berechnung für Sie. Dies ist besonders nützlich, wenn Sie eine größere Anzahl von Spalten benötigen, z. B. 7 oder 8. Die Browserunterstützung für calc() ist gut, aber nicht so stark wie bei einem reinen Prozentwert, der seit Anbeginn von CSS von Browsern unterstützt wird.
Diese Browser-Supportdaten stammen von Caniuse, das mehr Details enthält. Eine Zahl zeigt an, dass der Browser das Feature ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 19* | 4* | 11 | 12 | 6* |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 127 | 6.0-6.1* |
Die Prozentmethode hat eine etwas bessere Browserunterstützung und kann in IE stabiler sein. Wenn Sie Opera Mini nicht unterstützen müssen, empfehle ich dennoch, zuerst die calc()-Methode zu verwenden. Testen Sie in IE und wenn das Layout fehlschlägt, versuchen Sie zuerst, 99.999% anstelle von 100% in der Calc-Funktion zu verwenden (calc(99.999% / 3)). Wenn das nicht funktioniert, wechseln Sie zur Prozentmethode. Ich werde die calc()-Methode in all meinen Beispielen verwenden. Beachten Sie, dass Sie, wenn Sie einen CSS-Präprozessor wie SCSS verwenden, das Beste aus beiden Welten haben können, indem Sie den Präprozessor die Berechnungen für Sie durchführen lassen. Dies geht jedoch auf Kosten einer weniger einfachen Bearbeitung oder Überprüfung der Spaltenanzahl in den Browser-Entwicklertools.
/* Set column count using SCSS */
.grid-cell {
width: (100% / 3);
}
/* CSS output into the browser */
.grid-cell {
width: 33.3333333333%;
}
Geben wir den Grid-Zellen eine Höhe und einen inneren box-shadow, damit wir sehen können, was vor sich geht. Ich füge keine Umrandung hinzu – die werde ich später verwenden. 😉
.grid-cell {
/* So that we can see the grid cells */
box-shadow: inset 0 0 0 1px #000;
height: 100px;
}
.grid-wrapper {
/* Allows us to see the edges of the grid */
box-shadow: 0 0 10px 2px green;
}
Sie sollten jetzt etwas haben, das so aussieht

Das ist aber langweilig, oder? Jeder weiß, wie das geht. Wo sind diese Grid-Lücken, von denen ich spreche? Ich will meine Lücken!!!
Schritt 5: Rand
Hier kommen wir zum interessanten Teil. Da wir box-sizing auf border-box gesetzt haben, beinhaltet die 33,33% Breite jetzt den Rand. Das bedeutet, wir können sicher feste und prozentuale Einheiten mischen! 😃
.grid {
/* Creates an equal outer gap */
padding: 20px 0 0 20px;
}
.grid-cell {
/* Creates gaps */
border: 0 solid transparent;
border-width: 0 20px 20px 0;
}
Dies ergibt etwas, das wie ein Grid mit gleichmäßigen Abständen überall aussieht

Um Ihnen eine bessere Vorstellung davon zu geben, was passiert, sehen Sie sich das folgende Bild an

Der blaue Bereich oben und links im Grid ist der Innenabstand (Padding) des .grid-Elements. Die gelben Umrisse zeigen den Bereich, den jedes .grid-cell-Element einnimmt. Die roten Bereiche unten und rechts jeder Zelle sind der Rand jedes .grid-cell-Elements.
Das könnte das gewünschte Aussehen sein. Auf der anderen Seite ist das nicht das Aussehen eines Grids mit einer grid-gap-Einstellung. Deshalb haben wir noch einen Schritt.
Schritt 6: Margin und Overflow
Um das Grid bündig mit den Rändern seines Containers abschließen zu lassen, benötigen wir etwas Hilfe von negativen Rändern und overflow: hidden
.grid {
/* Pulls grid cells hard against edges */
margin: -20px;
}
.grid-wrapper {
/* Prevents odd margin behavior */
overflow: hidden;
}
Wir müssen overflow: hidden anwenden, um zu verhindern, dass dies geschieht

Die Anwendung des negativen Rands und overflow: hidden bringt uns zu dieser schönen Nachbildung der grundlegenden grid-gap-Funktionalität

Der obere und linke Innenabstand (Padding) des Grids ist optional. Sie können den Innenabstand weglassen und stattdessen den Randwert wie unten gezeigt ändern, wenn Sie möchten
.grid {
/* Margin needs to be this if leaving off the top and left .grid padding */
margin: 0 -20px -20px 0;
}
Aber warten Sie! Die Arbeit ist noch nicht ganz erledigt. Sehen Sie, was passiert, wenn wir einer der Grid-Zellen eine Hintergrundfarbe geben

Nicht ganz das, was wir wollen, also gibt es noch einen Schritt.
Schritt 7: background-clip
Damit der Hintergrund der Grid-Zellen nicht in unsere simulierte grid-gap fließt, müssen wir background-clip: padding-box hinzufügen.
.grid-cell {
/* Prevents background bleed */
background-clip: padding-box;
}
Jetzt haben wir das

Wenn Sie noch nie von der background-clip-Eigenschaft gehört haben, machen Sie sich vielleicht Sorgen um die Browserunterstützung… nun, machen Sie sich keine Sorgen. background-clip gibt es seit IE9!
Diese Browserunterstützungsdaten stammen von Caniuse, wo weitere Details zu finden sind. Eine Zahl zeigt an, dass der Browser das Feature ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 15 | 4 | 9 | 12 | 7 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 4.4 | 7.0-7.1 |
Schritt 8: Media Queries!
In den meisten Fällen müssen sich Grids beim Wachsen und Schrumpfen ändern können, um die Anzahl der Spalten anzupassen. Mit anderen Methoden kann das eine enorme Plage sein. Sie müssen möglicherweise viele nth-childs berechnen, um den richtigen Rand zu entfernen oder was auch immer. Mit dieser Methode müssen Sie nur einen einzigen Wert ändern! 😃
.grid-cell {
/* Sets the default column count */
width: calc(100% / 1); /* 1 column */
}
@media (min-width: 400px){
.grid-cell {
width: calc(100% / 2); /* 2 columns */
}
}
@media (min-width: 600px){
.grid-cell {
width: calc(100% / 3); /* 3 columns */
}
}



Hier ist, wie es aussieht, wenn wir alles zusammenfügen
Siehe den Pen Fake grid von Daniel Tonon (@daniel-tonon) auf CodePen.
Keiner hat Zeit dafür!
Das ist viel Arbeit im Vergleich zu dem, was modernes Grid in nur drei Zeilen CSS leisten kann! Um die Aufgabe zu erleichtern, habe ich einen SCSS-basierten Mixin erstellt, den ich Gutter Grid nenne. Sobald Gutter Grid im Projekt installiert ist, können Sie schnell ein Drei-Spalten-Grid mit 20-Pixel-Lücken mit dem folgenden SCSS-Code erstellen
.grid-wrapper {
overflow: hidden; /* Need this for the chrome bug */
}
.grid {
@include grid($cols: 3, $gutter: 20px);
}
Sie können es auch noch kürzer schreiben, wenn das zu ausführlich erscheint
.grid-wrapper {
overflow: hidden;
}
.grid {
@include grid(3, 20px);
}
Gutter Grid wird mit einigen vorgefertigten Breakpoint-Sets geliefert, sodass Sie möglicherweise gar keine Breakpoints schreiben müssen, wenn Ihr Grid die gesamte Seite überspannt! Wenn Sie jedoch benutzerdefinierte Breakpoints benötigen, können Sie diese mit Gutter Grid einfach wie folgt anpassen
// Verbose custom breakpoints
@include grid($cols: 7, $gutter: 20px, $breakpoints: (
4 : 960px, // At 960px or below, there will be 4 columns
2 : (max, 600px), // You can use mq-scss syntax here as well
1 : 480px,
));
// Short version
@include grid(7, 20px, (
4 : 960px,
2 : 600px,
1 : 480px,
));
Wie Sie vielleicht im Beispiel bemerkt haben, unterstützt Gutter Grid auch die gleiche Media-Query-Syntax, die dieses Ding namens mq-scss verwendet. Wenn Sie sich fragen, was das ist, nun, es ist ein Sass-Mixin, das ich erstellt habe und das das Schreiben und Verwalten von Media Queries um das Millionenfache erleichtert. Die Verwendung von mq-scss-Anweisungen zur Steuerung der Spaltenanzahl ermöglicht eine sehr feine Kontrolle darüber, wann sich die Spaltenanzahl ändert.
Hinzufügen von Schatten zu den Grid-Zellen
Da wir uns jetzt mit Schatten beschäftigen, nehme ich den Box-Schatten aus dem Beispielbild heraus. Unser Start-Grid sieht jetzt so aus

Wenn wir versuchen, jeder Grid-Zelle einen äußeren box-shadow hinzuzufügen, sieht das nicht so gut aus

Lassen Sie uns das beheben.
Schritt 1: Neuer HTML
Um schöne Schatten zu erstellen, müssen wir jeder Grid-Zelle ein zusätzliches Div hinzufügen. Sie können nicht wirklich ::before oder ::after dafür verwenden, da diese keine HTML-Inhalte enthalten können.
<div class="grid-wrapper">
<div class="grid">
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
</div>
</div>
Schritt 2: Flexbox
Nun müssen wir jede Grid-Zelle zu einem Flex-Container machen. Dies ermöglicht es dem inneren Teil der Grid-Zelle, die volle Höhe ihres Elternelements einzunehmen. Wir müssen auch dem inneren Element eine Breite von 100% geben. Dies stellt sicher, dass es die vollen Abmessungen seines Elternelements sowohl horizontal als auch vertikal einnimmt.
.grid-cell {
/* Forces inner to take up full grid cell height */
display: flex;
}
.grid-cell-inner {
/* Forces inner to take up full grid cell width */
width: 100%;
}
Sehen wir uns an, was passiert, wenn wir versuchen, Box-Schatten zu den inneren Elementen hinzuzufügen
.grid-cell-inner {
box-shadow: 0 0 10px 3px blue;
}

Das ist schon viel besser, aber es ist noch nicht ganz perfekt. Der versteckte Überlauf, den wir verwenden, um den Chrome-Bug zu verhindern, stört.
Schritt 3: Hacky Padding
Wir müssen also Overflow zulassen, aber trotzdem dieses seltsame Margin-Verhalten vermeiden. Der einzige andere sichere Weg, den ich gefunden habe, ist mit Padding. Indem wir dem äußeren Grid-Wrapper-Element oben und unten 1px Padding hinzufügen, wird der Chrome-Bug behoben.
.grid-wrapper {
/* Prevents odd margin behaviour in Chrome */
padding: 1px 0;
}
Dies geht auf Kosten von zusätzlichen 1 Pixel Platz oben und unten im Grid. Das Bild unten zeigt, wie das aussieht. Die Schatten wurden aufgehellt, um die 1-Pixel-Lücke deutlicher zu zeigen.

Hinweis: Sie können den 1-Pixel-Top-Padding vermeiden, indem Sie den oberen Padding-Wert für die Lücke auf dem Grid-Element weglassen. Der 1-Pixel-Bottom-Padding kann jedoch nicht vermieden werden.
Eine Randbreite, die auf den äußeren Grid-Wrapper angewendet wird, funktioniert ebenfalls. Technisch gesehen musste ich dem obigen Beispiel kein Padding hinzufügen. Meistens, wenn wir Schatten auf Grid-Zellen anwenden, wollen wir wahrscheinlich keinen Rand darum sehen. Das obige Beispiel zeigte eher, wie gering das Padding ist.
Update: Sie können das seltsame Margin-Verhalten vollständig vermeiden, indem Sie 0,1 Pixel Padding anstelle von 1 Pixel verwenden. Dies wird im Browser auf 0px gerundet, verhindert aber dennoch das seltsame Margin-Verhalten. Das bedeutet, dass die Kanten des Grids bündig mit den Kanten seines Containers abschließen können, während überlaufende Inhalte weiterhin sichtbar sind! Vielen Dank an Lu Nelson für seinen Vorschlag in den Kommentaren! 😁
So sieht das Grid ohne den äußeren Rand aus



Hier ist ein Pen, der das Endergebnis zeigt
Siehe den Pen Fake grid with shadows von Daniel Tonon (@daniel-tonon) auf CodePen.
Gutter Grid Schatten
Lassen Sie uns besprechen, wie man Schatten auf Gutter Grid-Zellen hinzufügt. Sie können dieselbe HTML-Struktur wie im vorherigen Beispiel verwenden.
Wenden Sie nun diese SCSS an, um ein Drei-Spalten-Grid mit einer 20-Pixel-Spalte zu erstellen
.grid {
@include grid(3, 20px, $inners: true);
}
Diese neue Eigenschaft $inners: true teilt Gutter Grid mit, dass die Grid-Zellen jeweils ein einzelnes Kindelement haben, das die volle Höhe und Breite seiner übergeordneten Grid-Zelle einnehmen muss.
Anstatt overflow: hidden zu verwenden, verwenden Sie 0,1 Pixel bottom padding auf dem Wrapper-Element (aktualisiert basierend auf Nelsons Vorschlag).
.grid-wrapper {
padding-bottom: 0.1px;
}
Gutter Grid gibt keinen oberen äußeren Spalt aus, wenn er nicht benötigt wird. Dies hilft, Probleme mit dem negativen Margin-Eigenheiten zu vermeiden. Wenn es keinen oberen äußeren Spalt gibt, der mit einem fehlerhaften negativen Margin negiert werden muss, gibt es kein Problem. Der untere äußere Spalt ist jedoch immer noch ein Problem, weshalb wir die 0,1 Pixel bottom padding benötigen. Diese 0,1 Pixel bottom padding werden im Browser auf 0px gerundet, beheben aber dennoch die Margin-Eigenheit, die zu keiner Lücke am unteren Rand des Grids führt.
Fügen Sie nun Ihre Schatten hinzu und schon haben Sie ein Gutter Grid mit Schattenzellen!
.grid-cell-inner {
box-shadow: 0 0 10px 3px blue;
}

Ich habe in diesem Artikel nur an der Oberfläche dessen gekratzt, was Gutter Grid leisten kann. Lesen Sie unbedingt die vollständige Dokumentation, um zu erfahren, was es sonst noch kann.
Wir kommen zum Ende unseres IE-Grid-Abenteuers
Ich hoffe, Sie haben diesen Ausflug in die Welt von IE und CSS Grid genossen. Lesen Sie unbedingt Teil 1 und Teil 2, wenn Sie dies noch nicht getan haben. Nach der Lektüre aller drei Artikel sind Sie nun bestens gerüstet, um wirklich beeindruckende Layouts zu erstellen, die in IE genauso gut aussehen wie in modernen Browsern.
Wenn Sie jemals jemanden sehen, der sich darüber beschwert, dass er CSS Grid wegen IE nicht verwenden kann, wissen Sie, was zu tun ist. Klapsen Sie ihm spielerisch auf den Kopf, weil er so töricht ist, und schicken Sie ihn hierher, um die Wahrheit zu erfahren.
Nun geht hinaus, meine Freunde, und baut einige Grids! 😃🎉
Artikelserie
- Entlarvung gängiger IE Grid-Missverständnisse
- CSS Grid und der neue Autoprefixer
- Eine automatische Platzierung mit Lücken simulieren (Dieser Beitrag)
- Doppelte Bereichsnamen werden jetzt unterstützt!
Danke! Toller, informativer Beitrag..
Ich bin mir nicht sicher, warum Sie oben links Padding und negativen Rand am Container und unten rechts Rand an den Kindern verwenden, um Abstände zu schaffen. Eine Regel von
margin: -10pxam Flex-Flow-Container undpadding: 10pxan allen Kindern führt ebenfalls zu einem Grid mit 20px Lücken.Außerdem sollte die 1px Padding-Regel am Wrapper, um die Margin-Kollaps-Weiterleitung zu unterbinden, auch mit einem Wert kleiner als 1px funktionieren: Zum Beispiel wird 0,01px nicht angezeigt, weil es auf 0px gerundet wird, aber die Margin-Effekte werden trotzdem unterbunden.
Das obere und linke Padding am Container ist optional. Es vereinfacht die Regel für den negativen Rand etwas, da Sie einfach
margin: -20px;anstelle vonmargin: 0 -20px -20px 0;schreiben können. Es ermöglicht mir auch, einen weiteren Anwendungsfall im Artikel zu demonstrieren (gleichmäßige Abstände an allen Seiten).Ja, das kann funktionieren, aber jetzt haben Sie Ihr Padding aufgebraucht und können kein Padding im Inneren jeder Grid-Zelle hinzufügen, ohne ein zusätzliches inneres Element hinzuzufügen. Meine Gutter Grid-Technik bewahrt die Möglichkeit, Padding für die Grid-Zellenelemente zu verwenden.
Ein weiteres Problem sind Subpixel-Rendering-Fehler. Wenn Sie ein Grid mit einer 5px Lücke erstellen, bedeutet dies, dass das Padding jeweils 2,5px auf jeder Grid-Zelle betragen muss. Dies könnte auf 3px aufgerundet oder auf 2px abgerundet werden (es sei denn, es ist ein hochauflösender Bildschirm) und zu vorzeitigem Umbruch oder Fehlausrichtung im Layout führen. Meine Methode vermeidet das Problem des Subpixel-Renderings.
Danke für den Tipp! Daran hatte ich nicht gedacht. Ich werde es ausprobieren und sehen, was passiert
Wenn es funktioniert, werde ich Gutter Grid aktualisieren, damit es immer das Padding hinzufügt, um das Problem zu verhindern.
Oh, und noch etwas. Die Verwendung des Padding-Wegs bedeutet, dass Sie keine Dummy-Ränder für die Grid-Zellen mit der Inset-Box-Schatten-Technik erstellen können.
Ich habe Ihre 0,01px Theorie jetzt getestet.
0,01px funktionierte nicht… aber 0,1px schon!
Es wurde auf 0 gerundet, genau wie Sie dachten. Ich habe es in Gutter Grid Version 7 integriert und den Artikel mit diesen neuen Informationen aktualisiert.
Danke für den Tipp!
Diese Serie war eine interessante Lektüre, bestätigt aber meine ersten Vermutungen: Sie bauen das Grid in Flexbox neu auf und versuchen, ein paar Extras (wie die Lücken und den Hintergrund) auf sehr komplizierte Weise einzubauen, damit es sich „irgendwie wie CSS Grid anfühlt, aber nicht ganz“.
Ein interessantes Experiment auf jeden Fall, aber für praktische Zwecke ist es immer noch besser, es gleich in Flexbox zu machen und sich nicht mit dem Nachbilden von Lücken im „CSS Grid“-Stil zu befassen, sondern einfach Paddings/Margins schlicht zu verwenden und vielleicht verschachtelte Divs, wo nötig. Dauert weniger Zeit zum Erstellen und Erklären für Junior-Entwickler, wie es funktioniert.
Ich erkenne an, dass diese Flexbox-Methode etwas kompliziert ist, aber sie ermöglicht leichter zu verwaltende Layouts als weniger komplizierte Methoden, da die Lücken solide Lücken sind (anstatt 50-50 Lücken), sie die volle Nutzung von Padding & Hintergrund ermöglicht und sie eng in ihrem Container eingeschlossen bleibt.
Sie stimmt auch perfekt mit echten Grid-Lücken überein. Einige Teile des Layouts können mit CSS Grid und andere Teile mit dieser Technik erstellt werden, und alles wird immer noch perfekt übereinstimmen.
Die Verwendung des Gutter Grid Plugins, das ich erstellt habe, vereinfacht die Implementierung auf etwas, das selbst die juniorsten Entwickler beherrschen können, nachdem es in das Projekt installiert wurde.
Ich muss Ihnen wohl widersprechen. Ich habe in den letzten Wochen mehrere Grid-Systeme für ein Starter-Theme erstellt und ausprobiert, und das einfachste und beste bisher ist das reine Flex-System mit calc() Breiten, damit Sie feste Margins an den Spalten verwenden können, und negative Margins, um Lücken zu erzwingen. Warum habe ich mich gegen CSS Grid mit Flex-Fallbacks entschieden? Weil Sie keine der CSS Grid-Funktionen nutzen können, wie z. B. 2-dimensionale Grids (alias das Dehnen von Divs über mehrere Zeilen) oder die vereinfachte Syntax. Und bei der Verwendung von Mixins berühren die Junior-Entwickler sowieso nie die CSS Grid-Syntax, sodass sie nichts daraus lernen.
Also danke für das interessante Experiment. Ich bin froh, dass Sie sich die Zeit nehmen, die Grenzen zu testen und das Wissen weiterzugeben, aber es ist falsche Werbung. Das praktische Ergebnis ist immer noch, dass Sie CSS Grid nicht „wirklich“ seinem gewünschten Potenzial entsprechend nutzen und Sie faken sicherlich keine automatische Platzierung. Am Ende des Tages ist dies aus praktischer Sicht nur ein Flex Grid.
Es klingt für mich **sehr** so, als hätten Sie Teil 2 nicht gelesen. Teil 2 ist der Hauptartikel der Serie und zeigt Ihnen, wie Sie **echtes** CSS Grid **sicher** in IE11 verwenden können. Dieser Artikel ist nur für den einen Anwendungsfall gedacht, bei dem Sie eine automatische Platzierung benötigen, weil Sie die Anzahl der Zeilen, Spalten und Zellen nicht kennen.
Nein, Sie können nicht **jede** Funktion in CSS Grid nutzen, aber Sie können damit in IE wesentlich mehr tun, als die Leute ihm zutrauen. Es ist auch schneller und einfacher, Layouts mit IE-freundlichem CSS Grid zu erstellen, als sich mit älteren Methoden behelfen zu müssen.
Lesen Sie Teil 2 hier: https://css-tricks.de/css-grid-in-ie-css-grid-and-the-new-autoprefixer/
Das ist keine falsche Werbung! Ich habe in Teil 2 genau erklärt, wie man **echtes** CSS Grid sicher in IE verwendet, und ich habe in keinem der Beiträge gesagt, dass der automatische Platzierungs-Flexbox-Hack in Teil 3 echtes CSS Grid verwendet.
Ich habe Teil 2 gelesen und genau deshalb argumentiere ich dagegen. Autoplacement ist der meistgewünschte und am häufigsten verwendete Teil eines Grid-Systems. Es ist nicht „nur eine Funktion“. Ohne dies bricht alles zusammen und man kann Grid in IE11 wirklich nicht effektiv und sicher nutzen.
Nochmals vielen Dank, dass Sie gezeigt haben, was möglich ist, aber für mich zeigt es deutlich, dass es in den meisten Fällen nicht das ist, was benötigt wird, und dass der Overhead zu hoch ist, als dass es in den meisten Projekten praktisch nutzbar wäre.
Aus meiner Sicht muss ich IE11 identisch zu allen modernen Browsern aussehen lassen. Das Schreiben von Autoplacement-Grid-Code mit einer Flexbox-Fallback-Lösung ist keine Option.
Ich habe 2 Möglichkeiten. Entweder ich verwende gar kein CSS Grid mehr in irgendeinem Projekt für weitere 10 Jahre (oder wie lange auch immer es dauert, bis IE endlich stirbt).
Alternativ kann ich CSS Grid so viel nutzen, wie ich möchte, *jetzt*, solange ich mich auf Techniken beschränke, die IE11 verarbeiten kann.
Ich würde *viel lieber* zumindest **etwas** CSS Grid verwenden können, als **gar kein** CSS Grid.
Nein, Sie können Autoplacement nicht nutzen, was ärgerlich ist. Wenn Sie genau wissen, wie viele Zeilen und Spalten und Grid-Zellen es im Grid gibt, dann ist die IE-Implementierung absolut nutzbar. Das ist die Botschaft, die ich in diesen Artikeln vermitteln wollte.
Hallo Daniel, danke für die großartige Serie.
Der 2. Teil eröffnet gerade alle Möglichkeiten für die Verwendung von IE/Edge CSS Grid, was wiederum mein Entwicklerleben ENORM vereinfacht. Denn Grid kann Dinge mühelos erledigen, die Flexbox umständlich macht (und umgekehrt).
Was diesen dritten Teil betrifft, so ist es eine leichte, gute Lektüre darüber, wie man Flexbox auf eine nette, etwas "hacky" Weise nutzt, um nützliche, weit verbreitete Layouts zu realisieren. Nochmals vielen Dank.
Ich freue mich, dass es Ihnen gefallen hat.
Wir haben auch erst kürzlich herausgefunden, wie Autoprefixer doppelte Bereichsnamen in IE unterstützen kann. Wir arbeiten gerade an der Implementierung. Sobald dies erledigt ist, wird sich eine ganz neue Welt der CSS Grid-Möglichkeiten in IE eröffnen.
Konnte nicht widerstehen.
„Autoplacement ist der meistgewünschte und am häufigsten verwendete Teil eines Grid-Systems.“
Manchmal.
Ich würde sagen, in 50 % der Fälle. Und Autoplacement ist für Layouts erforderlich, bei denen Flexbox die Autoplacement-Aufgabe geradezu großartig erledigt.
CSS Grid geht nicht um Autoplacement. Benutzen Sie es nicht dafür. Es geht um das willkürliche (!) Neuanordnen von Grid-Items.
Nur eine einfache Regel, um zu unterscheiden, wann Flexbox und wann CSS Grid verwendet werden soll.
Wenn Sie einen HTML-Container mit nicht-eindeutigen, nicht unterscheidbaren Elementen unbestimmter Menge haben und daraus ein einfach umfließendes responsives Layout erstellen möchten, verwenden Sie Flexbox.
Z. B. Fotogalerien, Listen und dergleichen.
Wenn Sie einen Container mit Elementen haben, denen Sie persönliche Namen geben können, alle weil sie nicht einheitlich, völlig unterschiedlich in Funktionalität und Bedeutung und leicht aufzählbar sind, und Sie eine willkürliche (nach Ihrem Belieben) neu anordenbare (neues Englisch, das ich kenne) Platzierung für jedes Element unter einem responsiven Webseitenblock wünschen, verwenden Sie CSS Grid.
Z. B. ein Webseiten-Header-Block mit Logo, Adresse, Telefon, Menü, Suchfeld. Wo Sie beim Verringern der Seitenbreite das Such-Element an die Stelle des Adress-Elements verschieben, das Logo hinter das Telefon setzen möchten. Wenn die Breite weiter abnimmt, möchten Sie die Elemente wieder anders anordnen usw.
In diesem Sinne ist das Video von Rachel Andrew, das Daniel im ersten Teil erwähnt hat, etwas irreführend (Rachel, es tut mir leid, keine Beleidigung, aller Respekt und Dank für die Vermittlung von Grid). Es zeigt den Anwendungsfall, für den Flexbox verwendet werden sollte.
Deshalb gibt es so viele Fragen wie „Warum sollte ich CSS Grid verwenden, während Flexbox da ist?“. Die Antwort liegt oben. Verwenden Sie das richtige Werkzeug für den richtigen Fall.
Wenn Sie es aus der Perspektive der maximalen IE-Kompatibilität betrachten, dann ja, stimme ich Ihren Ausführungen in diesem Kommentar zu.
Wenn Sie IE jedoch aus der Gleichung herausnehmen, ist modernes CSS Grid die weitaus einfachere und weniger umständliche Methode, um diese Art von Layout zu erstellen. Autoplacement ist ebenfalls ein grundlegender Aspekt des modernen CSS Grid. Es dient nicht nur zum „willkürlichen Neuanordnen von Grid-Items“.
Daniel, auch ohne IE, was ich bei CSS Grid im Vergleich zu Flexbox einzigartig fand, ist die Möglichkeit, die Grid-Container-Elemente zu benennen und sie responsiv nach Belieben neu anzuordnen. Das fehlt in all diesen Lehren. Selbst Ihr dreiteiliger Abschnitt „Kein Autoplacement“ impliziert wahrscheinlich teilweise „Wir wünschten, es wäre hier“. Oder zumindest lese ich es bis zu einem gewissen Grad so.
Ich stehe für die Aussage „CSS Grid zum Neuanordnen nach Belieben, Flexbox für Autoplacement“. Die Abwesenheit von Autoplacement in IE, die Anwesenheit von Autoplacement in modernen Browsern in CSS Grid ist mir egal. Was mich ärgerte war, dass ich mit Flexbox vor CSS Grid keine neuanordnungsfähigen Layouts erstellen konnte (na ja, konnte ich, aber es war weit jenseits der praktischen Grenzen).
Autoplacement wird von Flexbox (mit Ausnahme von hängenden Zeilen) mit 2 Zeilen Code (etwas) gut erledigt. Also keine Notwendigkeit für CSS Grid hier.
Ja, CSS Grid kann, IE ausgenommen, Dinge gut erledigen, die Flexbox kann. Aber sollte es so verwendet werden?
Ich liebe die Fähigkeit von CSS Grid, Inhalte über Area-Namen neu anzuordnen, aber die Behauptung, dass die Neubearbeitung von Bereichen das *einzige* ist, wofür Grid verwendet werden sollte, ist ziemlich kurzsichtig.
Modernes Grid ist für jede Situation konzipiert, in der Dinge in zwei Dimensionen ausgerichtet werden müssen.
Flexbox ist nur dafür ausgelegt, Dinge in einer Dimension auszurichten.
Wenn IE keine Rolle spielt, macht CSS Grid das in diesem Artikel erwähnte Layout *weitaus* einfacher als die Umsetzung über Flexbox, da Grid Unterstützung für Abstände hat und standardmäßig versucht, alles sowohl horizontal als auch vertikal auszurichten. Sie brauchen nicht einmal Media Queries!
Das war's! Drei Zeilen modernen CSS Grid-Codes und Sie haben ein Grid, das perfekt ausgerichtet ist und sogar die Anzahl der Spalten je nach verfügbarem Platz anpasst.
Flexbox war nicht dafür konzipiert, solche Layouts zu erstellen. Sie müssen Flexbox dazu zwingen, gleiche Spaltenbreiten zu erzeugen. Flexbox mag Freiheit. Grid genießt eine starre Struktur.
gapkommt technisch gesehen auch zu Flexbox, aber wie erwarten Sie, dassgapmit Prozentwerten funktioniert? Wenn Sie 33,33% Spaltenbreiten haben, wohin geht dann ein 20px-Abstand? Flexbox hat keine fr-Einheiten (es sei denn, sie planen, diese hinzuzufügen), daher führt das Hinzufügen eines 20px-Abstands zu einem 33,33% breiten Flex-Item zu vorzeitigem Umbruch. Wenn Sie stattdessen meine Gutter Grid-Technik implementieren, um die Abstände hinzuzufügen, ist das weitaus schwieriger und umständlicher als die Methode von CSS Gridgrid-gapzum Hinzufügen von Abständen.Ich versuche Ihnen nur zu zeigen, dass das CSS Grid Autoplacement ein wichtiger und wesentlicher Bestandteil der CSS Grid-Spezifikation ist und nicht übersehen werden sollte. Es ist nur schade, dass IE es nicht unterstützt. ☹
Daniel, alles ist sehr wahr.
Allerdings kann ich IE/Edge nicht außer Acht lassen, da alle von mir erstellten Websites IE10+ erforderten. Und es gibt keine Anzeichen dafür, dass sich die Situation für mich ändert.
Nochmals vielen Dank für das Teilen weiterer Snippets und die Erklärungen. Diese 3 Beiträge mit Ihren Kommentaren liegen sozusagen auf meinem Desktop. Prost :)