Vollbreiten-Elemente mit Rand-zu-Rand Grid

Avatar of Chris Coyier
Chris Coyier am

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

Wenn Sie einen Container mit begrenzter Breite haben, z. B. eine zentrierte Textspalte, ist das „Ausbrechen“ aus diesem Container, um ein Element in voller Breite zu erstellen, eine Trickserei. Vielleicht ist der beste Trick der mit relativer Positionierung links und einem negativen, viewport-basierten linken Rand. Während er seine Vor- und Nachteile hat (z. B. erfordert er versteckten Überlauf auf der body, der Container muss zentriert sein usw.), ist er zumindest einfach durchzuführen und alles andere im Container macht fröhlich weiter.

Es gab einige Beiträge über einen anderen Weg, dies zu tun, nämlich mit CSS Grid

Das Einzige, was all diese gemeinsam haben, ist, dass sie ein Rand-zu-Rand-Grid voraussetzen. Ich dachte mir immer wieder: „Nutzen die Leute wirklich CSS Grid für ihre gesamte Seitenlayout?“ So im Grunde body { display: grid; }¹? Die Artikel selbst verwenden tendenziell einen Klassennamen, aber die Annahme ist, dass dieses Elternelement ein Vollbildschirm-Container ist.

Ich habe ein wenig herumgefragt, und es gab ein Murmeln von: „Ja, das mache ich total.“ Also, cool, es ist etwas, das Leute tun. Mein erster Gedanke war, dass das aus ein paar Gründen umständlich erscheint

  1. Ein typischer „Header“ und „Footer“ sind vollbreit, daher scheint es im Vergleich zu einem Header, der einfach nur ein Block-Level-<header> oben (oder unten) auf der Website ist, viel Arbeit zu sein, diese explizit im Grid zu platzieren, über die richtige Anzahl von Spalten zu strecken und das aktuell zu halten, während man an den Spalten herumfummelt. Sie können immer noch ein Rand-zu-Rand-Grid in der Mitte haben und Block-Level-Elemente darüber und darunter.
  2. Alle Elemente in einem „Artikel“ explizit in eine mittlere Spalte zu platzieren (z. B. article > * { grid-columns: 2 / 3; }, nur um etwas gelegentlich durch Überspannen von mehr Spalten zu „dehnen“, fühlt sich für mich seltsam an. Wenn 95 % des Inhalts in einer zentrierten Spalte leben, fühlt sich etwas sowohl robuster als auch entspannter an, diesen Inhalt einfach in ein Elternelement zu legen, das das Layout handhabt, anstatt dass jedes einzelne Element sich selbst im Grid platzieren muss und das Endergebnis so aussieht, als ob es sich alles in einem gemeinsamen Elternteil befindet.

Ich hasse die Technik nicht unbedingt, bemerke nur, dass sie mir irgendwie seltsam vorkommt. Aber ich bin wahrscheinlich alt.

  1. Ich würde davon abraten, display: grid; direkt auf dem body-Element zu verwenden. Ein häufiges Problem: Browser-Erweiterungen können Elemente in den DOM innerhalb des Body einfügen, die dann in Ihrem Grid platziert würden und Ihr Layout durcheinanderbringen könnten. Habe ich schon erlebt. Ich würde sagen, es ist genauso wie die React-Best-Practice, nicht den gesamten Body zu binden, sondern einen Div-Kindknoten zu verwenden, der effektiv dasselbe ist, nur auf einen Selektor beschränkt.