Werden wir unser HTML für CSS Grids abflachen?

Avatar of Chris Coyier
Chris Coyier am

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

Ich habe gestern Rachel Andrew bei An Event Apart über CSS Grid Layout sprechen hören. Grid ist erstaunlich und der Tag wird bald kommen, an dem es das dominante Werkzeug für Web-Layouts sein wird. Dieser Tag ist jedoch noch nicht da, da kein stabiler Browser die neueste Version der Spezifikation ausliefert (höchstens hinter einem Flag).

Die gute Nachricht ist, dass die Spezifikation seit einigen Tagen sehr stabil ist und den Status „Candidate Recommendation“ erreicht hat. Da *alle* Browser auf Basis der Spezifikation entwickelt haben, ist es wahrscheinlich, dass eine weit verbreitete Unterstützung ohne Präfixe bald in allen stabilen Browsern verfügbar sein wird.

Die schlechte Nachricht ist, dass sie wahrscheinlich ohne Subgrid-Unterstützung kommen wird, ein Punkt, den Rachel in ihrem Vortrag gut hervorgehoben hat.

Hier ist ein typisches HTML für ein „Seitenlayout“

<body>
  <header class="site-header"></header>
  <main class="main-content"></main>
  <aside class="sidebar"></aside>
  <footer class="site-footer"></footer>
</body>

Alle diese wichtigen Elemente sind direkte Kinder von <body>, sodass <body> das Grid sein kann und die vier Hauptobjekte auf diesem Grid angeordnet sind. Das ist so ähnlich wie bei einem von Rachels Beispielen bei GridByExample

Aber…

… sagen wir, wir wollten ein Grid aus Elementen erstellen, die nicht unbedingt in einer vollständig flachen HTML-Struktur wie gerade gesehen waren.

<body>
  <header class="site-header">
    <h1>I want to use the grid.</h1>
    <nav>Me too!</nav>
  </header>
  <main class="main-content">
    <ul class="schedule">
       <li>Me three!</li>
       <li>Me four!</li>
    </ul>
  </main>
  ...
</body>

Wir können Grids *verschachteln*, genauso wie wir Flexbox in eine Grid-Zelle oder Flexbox in Flexbox verschachteln können, aber im obigen Beispiel können wir diese Kindelemente nicht gemeinsam am selben Grid teilnehmen lassen.

Sie können einige davon in Aktion sehen in Jen Simmons’ Jazz Poster Beispiel. Es gibt einige Elemente im DOM, die man sehen kann, und es wäre schön, wenn sie alle auf demselben Grid positioniert werden könnten, stattdessen werden sie auf verschiedenen Grids platziert.

Subgridding könnte etwas mühsam werden, da es irgendwie *„Subgrids bis zum Ende“* sind. Um selbst mein kleines Beispiel oben zum Laufen zu bringen, müsste es so aussehen…

body {
  display: grid;
}
.site-header {
  /* current spec way... */
  display: subgrid;

  /* old way... */
  display: grid;
  grid: subgrid;
}
.main-content {
  display: subgrid;
}
.main-content > ul {
  display: subgrid;
}

Und das, ohne zu definieren, wie das Grid tatsächlich funktioniert.

Eric Meyer hat auch diese Notwendigkeit für Subgrids hervorgehoben

Ohne Subgrids müssten Sie entweder jedes Element, das Sie anordnen möchten, zu einem Kind des Body-Elements machen (oder was auch immer Sie zur Erstellung des Seiten-Grids verwendet haben), oder Sie müssten Segmente des Seiten-Grids in jedem verschachtelten Grid neu erstellen und jegliche Hoffnung auf Spalten aufgeben, die sich mit dem Inhalt mehrerer Seitenabschnitte dehnen können. Keine der beiden Lösungen ist attraktiv.

Er verwendete <form> Markup als Beispiel, bei dem <label>/<input> Paare notwendigerweise innerhalb von Containerelementen gruppiert sind, was bedeutet, dass sie nicht gemeinsam am selben Grid teilnehmen können.

Jede dieser Zeilen muss ihr eigener Grid-Kontext sein, was bedeutet, dass sie bei weitem nicht so nützlich ist, wie wenn sie dasselbe Grid teilen könnten.

Er forderte, dass Grid überhaupt nicht ausgeliefert wird, bis dies behandelt werden kann

Subgrids sind eine Hauptkomponente des Grid-Layouts und sollten Teil jeder Grid-Layout-Implementierung sein, sobald diese den Status „Developer Preview“ verlässt. Wenn das bedeutet, die Einführung von Grids zu verzögern, halte ich das für lohnenswert.

Dieses Schiff ist wahrscheinlich abgefahren …

… was die vollständige Subgrid-Unterstützung am Tag des „Ships“ von CSS Grid betrifft. Aber es lohnt sich wahrscheinlich, Lärm zu machen (wie dieses Blogposting zu schreiben), um anzuzeigen, dass dies ziemlich wichtig ist und so schnell wie möglich nach der ersten Runde von CSS Grid bearbeitet und veröffentlicht werden sollte. Das ist nicht meine Meinung, das ist, was Jen Simmons gesagt hat, sie wird sich bei Mozilla dafür einsetzen.

Und eine noch größere Gefahr ist, dass Subgrid als „gefährdet“ eingestuft wird und „während der CR-Phase fallen gelassen werden könnte“.

Und mit „Browser-Maker-Leuten“ sind, als interessanter Nebeneffekt, nicht immer *Mitarbeiter von Browser-Unternehmen*, die diese Arbeit machen, sondern oft externe Committer. Hier ist ein Blogposting über all dies von einem dieser externen Committer.

Das Risiko…

… ist, dass wir Grid-Layout so sehr lieben, dass wir unser HTML verformen, um es zum Laufen zu bringen. Wir machen unser HTML weniger zugänglich, um unsere Grid-Idee zum Laufen zu bringen. Wir ignorieren Semantik und flachen unser HTML ab.

Oder vielleicht macht das niemand. Aber hey, es wäre schön, die Werkzeuge zu haben, damit es nicht einmal ein Problem ist.