Das Holy Grail Layout mit CSS Grid

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Ein Leser schrieb und fragte spezifisch, wie man dieses Layout in CSS Flexbox aufbaut.

Meine Antwort: Das ist eigentlich kein Layout für CSS Flexbox. Man könnte es schaffen, wenn man müsste, aber man bräuchte eine Art Kniff, wie zum Beispiel die Gruppierung von Nav und Artikel in einem Elternelement (wenn nicht sogar mehr Gruppierungen). CSS Grid wurde geboren, um diese Art von Layout zu beschreiben, und es wird weitaus einfacher sein, damit zu arbeiten, ganz zu schweigen davon, dass die Browserunterstützung für beide heutzutage weitgehend dieselbe ist.

Was meinen Sie mit „Holy Grail“?

Sehen Sie, Kinder, Layouts im Web waren früher so wackelig, dass das unglaublich einfache Diagramm oben relativ schwierig zu realisieren war, besonders wenn man wollte, dass die „Spalten“ gleiche Höhen haben. Ich weiß, lächerlich, aber das war eben so. Wir haben super seltsame Hacks benutzt, um es hinzubekommen (wie riesige negative Margins gepaart mit positiven Abständen), die sich im Laufe der Zeit zu saubereren Tricks entwickelten (wie Hintergrundbilder, die Spalten simulierten). Techniken, die es schafften, es umzusetzen, nannten es den Heiligen Gral. (Nur zur Klarstellung, normalerweise bedeutete Holy Grail ein Drei-Spalten-Layout mit Inhalten in der Mitte, aber der Hauptpunkt waren Spalten mit gleicher Höhe).

CSS ist jetzt viel robuster, daher können wir es ohne Hacks verwenden, um vernünftige Dinge zu tun, wie z. B. dieses einfache Layout zu realisieren.

Hier ist es in CSS Grid

Dieses Grid wird sowohl mit grid-template-columns als auch mit grid-template-rows eingerichtet. Auf diese Weise können wir sehr genau festlegen, wo diese Hauptbereiche der Website platziert werden sollen.

Ich habe ein paar zusätzliche Dinge eingebaut

  • Ich hatte neulich eine weitere Frage zum Erstellen von 1px Linien zwischen Grid-Bereichen. Der Trick ist so einfach wie die Farbe des Elternelements und die Verwendung von gap: 1px;, also habe ich das im obigen Demo gemacht.
  • Es ist wahrscheinlich, dass kleine Bildschirme zu einem Ein-Spalten-Layout wechseln. Das habe ich in einer Medienabfrage oben gemacht. Manchmal verwende ich display: block; auf dem Elternelement, um das Grid auszuschalten, aber hier habe ich grid eingeschaltet gelassen und die Spalten und Zeilen zurückgesetzt. Auf diese Weise erhalten wir immer noch den Abstand und können die Dinge bei Bedarf neu anordnen.
  • Eine weitere kürzliche Frage, die mir gestellt wurde, betrifft den subtilen „Body-Rand“-Effekt, den Sie im obigen Demo sehen können. Ich habe es so einfach wie möglich gemacht, mit einem Hauch von Abstand zwischen dem Body und dem Grid-Wrapper. Ursprünglich habe ich es zwischen dem Body und dem HTML-Element gemacht, aber für Full-Page-Grids halte ich es für klüger, ein Wrapper-Div zu verwenden, anstatt den Body für das Grid zu verwenden. Auf diese Weise werden Drittanbieter-Dinge, die Elemente in den Body injizieren, keine Layout-Probleme verursachen.