Grid-Layout
Einführung
Mithilfe des Grid-Layouts können Elemente einer Webseite visuell spaltenbasiert arrangiert werden. Eine Grid-Layout-Komposition (technisch ausgezeichnet durch die HTML-/CSS-Klasse .row
) besteht aus bis zu zwölf Spalten (Columns, HTML-/CSS-Klasse .col
). In jeder Spalte können dann beliebig viele (HTML-)Elemente platziert werden.
Wenn viel horizontaler Platz zur Verfügung steht, werden Grid-Layout-Spalten nebeneinander dargestellt, beispielsweise in Desktop-Browsern in bildschirmfüllender Vollansicht. Demgegenüber werden bei wenig horizontalem Platz die Spalten eines Grid-Layouts untereinander arrangiert, beispielsweise auf Smartphones in Hochformat-Ansicht oder in schmalgestellten Desktop-Browser-Fenstern.
Diese Anpassung ermöglicht es, dass ein und dieselbe Webseite auf verschiedensten Bildschirmformaten stets adäquat dargestellt wird und bedient werden kann. Auch erübrigt sich damit die Entwicklung und der Betrieb dedizierter Desktop- und mobiloptimierter Versionen einer Webseite, wie es beispielsweise Wikipedia für Desktop und für Mobilgeräte (noch) macht.
Für die Bestimmung der aktuell zur Verfügung stehenden horizontalen Breite bezieht sich das Grid-Layout nicht auf die Bildschirmweite, sondern auf die Browser-Fensterweite. Die Übergangsstellen, bei denen das Spalten-Arrangement anpasst wird, nennt man Breakpoints. Im GESIS-Web-Frontend-Framework gibt es fünf definierte Breakpoints, wodurch fünf typische Klassen an Darstellungsbreiten abgedeckt werden.
Dieses adaptive Verhalten ist ein elementares Element in der Umsetzung von Responsive Design im GESIS-Web-Frontend-Framework.
Hervorzuheben ist außerdem, dass sich das Grid-Layout automatisch ohne Seitenneuladen an veränderte Breitenzustände anpasst. Neue Breitenzustände ergeben sich beispielsweise beim Wechsel zwischen Hoch- zu Querformatdarstellung (Smartphones und Tablets) oder beim Anpassen der Browser-Fensterbreite (Desktopumgebungen).
Das Grid-Layout im GESIS-Web-Frontend-Framework nutzt das Grid-System von Bootstrap 5. Daher können neben den auf dieser Seite gezeigten Beispielen auch Grid-Layouts mit anderen Spaltenanzahlen und individuellen Spaltenbreiten umgesetzt werden, um bedarfsgerechten Bedingungen und Anforderungen zu genügen. Bootstrap bietet auf seinen Dokumentationsseiten weitere Informationen und zeigt Konfigurationsmöglichkeiten, beispielsweise zur Spaltenanzahl und -breite.
Das GESIS-Web-Frondend-Framework übernimmt folgende Breakpoints von Bootstrap 5 (mit Beispielen typischer Bildschirmgrößen):
xs (≥ 0px)
: alle Smartphones in Hochformat, bei kleineren Smartphones (iPhone 4) auch im Querformat – und breitersm (≥ 576px)
: Standard-Smartphones im Querformat (iPhone SE, Pixel 4) – und breitermd (≥ 768px)
: größere Smartphones im Querformat (iPhone 12 Pro, Pixel 5), Standard-Tablets im Hochformat (iPads ohne Pro) – und breiterlg (≥
992px)
: Standard-Tablets im Querformat (iPads ohne Pro), größere Tablets im Hochformat (iPad Pro) – und breiterxl (≥
1200px)
: Laptop- und Desktop-Bildschirme, größere Tablets im Querformat (iPad Pro) – und breiter
Der Breakpoint xxl (≥ 1400px)
wird vorerst nicht übernommen.
Best Practices, Barrierefreiheit und Responsive Design
Grid-Layouts dienen lediglich der
- optionalen,
- an verfügbarer Breite angepassten,
- visuellen Darstellung
von Inhalten.
Demgegenüber existiert eine Vielfalt darin,
- wer (Menschen mit und ohne Behinderungen) oder was (Maschinen wie beispielsweise Webcrawler) auf Inhalte zugreift
- und wie auf diese Inhalte zugegriffen wird (großer, kleiner oder gar kein Bildschirm; Screenreader; Braille-Zeile).
Um dieser Vielfalt der Inhaltserschließung und -interaktion gerecht zu werden, soll der Inhalt einer Webseite stets auch
- linear, eindimensional,
- ohne Notwendigkeit einer visuellen Darstelllung und ohne Bezug auf eine solche
erschlossen werden können.
Falsch eingesetzt erschweren oder verhindern Grid-Layouts, dass Inhalte erschlossen, verstanden und bedient werden können. Solche Probleme fallen bei der technischen Entwicklung und dem Verfassen von Inhalten häufig nicht auf, da sie meistens "sehend, auf großem Bildschirm" erstellt werden. Daher bietet sich folgende Strategie zum korrekten Einsatz eines Grid-Layouts an:
Bei der technischen Umsetzung einer Webseite und dem Verfassen ihres Inhaltes geht man stets von einer rein linearen (also effektiv einspaltigen) Darstellung aus. Die einspaltige Darstellung als kleinster gemeinsamer Nenner wird allen Benutzern und Wiedergabeformen gerecht.
Inhalte können in Grid-Layout-Spalten arrangiert werden, solange stets gewährleistet ist, dass der gesamte Inhalt weiterhin auch in einspaltiger Darstellung verständlich ist.
Durch das Verkleinern der Browser-Fensterbreite oder durch Betrachtung auf einem Smartphone kann und soll überprüft werden, ob der Inhalt weiterhin in linearer, eindimensionaler Darstellung verständlich ist.
Beschreibungen und Verweise, die auf einer räumlichen Darstellung einer Webseite beruhen, müssen vermieden werden: Eine Formulierung wie beispielsweise
"In der linken Spalte finden Sie Informationen zum Standort Mannheim, in der rechten Spalte Informationen zum Standort Köln"
ist nur für einen (sehenden) Bildschirmbenutzer bei ausreichend breitem Browser-Fenster verständlich.
Solche räumlichen Beschreibungen werden spätestens dann unverständlich, sobald die "linke" und "rechte" Spalte untereinander, also effektiv einspaltig ohne Möglichkeit einer Links-Rechts-Unterscheidung, angezeigt werden; desweiteren ergeben räumliche Beschreibungen für blinde Benutzer grundsätzlich keinen Sinn, da sie Seiteninhalte nichtvisuell erschließen (keine zweidimensionale Bildschirmdarstellung, sondern lineare, eindimensionale Darstellung per Sprachausgabe oder Braille-Zeile).
Statt solcher problematischen visuellen/layout-abhängigen Angaben soll die Bedeutung oder Funktion einer Spalte in ihr, durch sie selbst ausgedrückt wird.
Im folgenden Do-Beispiel werden dazu in jeder Spalte einleitende, die jeweilige Spalte beschreibende Überschriften verwendet ("Standdort Mannheim", "Standort Köln").
Zusätzlich erlauben Verlinkungen die direkte Navigation zum erwähnten (Spalten)inhalt. Solche Verlinkungen errmöglichen es außerdem, andere, zwischengelagerte und durchaus längere Spalten und Inhalten zu überspringen, was insbesondere der Barrierefreiheit und der Orientierung auf kleinen Bildschirmen zuträglich ist.
Außerdem sei angemerkt, dass erst gar nicht von "Spalten" gesprochen wird – Spalten sind ein reines Layout-Konzept und sollen daher nicht für inhaltliche Beschreibungen oder Referenzierungen genannt und genutzt werden.
Genereller HTML-Aufbau
Grid-Layout mit gleichmäßigen Spalten
<div class="row [row-Klassen mit Angabe eines Breakpoints und der Anzahl der ab diesem Breakpoint nebeneinander anzuzeigenden Spalten]">
<div class="col">
<!-- Elemente der ersten Spalte -->
</div>
<div class="col">
<!-- Elemente der zweiten Spalte -->
</div>
<!-- ggf. weitere Spalten -->
</div>
Grid-Layout mit individuellen Spaltenbreiten (siehe Beispiel zweispaltiges Grid-Layout (⅓-⅔-Spalten))
<div class="row">
<div class="col [col-Klassen mit Angabe eines Breakpoints und der ab diesem Breakpoint von dieser Spalte anzunehmenden zwölf-teiligen Breite">
<!-- Elemente der ersten Spalte -->
</div>
<div class="col [col-Klassen mit Angabe eines Breakpoints und der ab diesem Breakpoint von dieser Spalte anzunehmenden zwölf-teiligen Breite">
<!-- Elemente der zweiten Spalte -->
</div>
<!-- ggf. weitere Spalten -->
</div>
Beispiel zweispaltiges Grid-Layout (gleichmäßige Spalten)
Breite ≥ sm
: Darstellung der Spalten nebeneinander:1
2
1
2
Breite < sm
: Darstellung der Spalten untereinander:1
1
2
2
Live-Beispiel
HTML-Quelltext
<div class="row row-cols-1 row-cols-sm-2 g-gesis-2">
<div class="col">
<div id="c105349" data-ce-original-uid="105349" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>erste Spalte, erstes Element</span> </div>
</div>
<div id="c105350" data-ce-original-uid="105350" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>erste Spalte, zweites Element</span> </div>
</div>
</div>
<div class="col">
<div id="c105347" data-ce-original-uid="105347" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>zweite Spalte, erstes Element</span> </div>
</div>
<div id="c105348" data-ce-original-uid="105348" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>zweite Spalte, zweites Element</span> </div>
</div>
</div>
</div>
Beispiel zweispaltiges Grid-Layout (⅓-⅔-Spalten)
Breite ≥ lg
: Darstellung der Spalten nebeneinander. Spalte1
nimmt 4 von 12 Teilen ein (⅓), Spalte2
nimmt 8 von 12 Teilen ein (⅔).1--- 2-------
1
2
1
2
Breite < lg
: Darstellung der Spalten untereinander: Spalte1
nimmt 12 von 12 Teilen ein (effektiv einspaltig), Spalte2
nimmt 12 von 12 Teilen ein (effektiv einspaltig)1
1
2
2
Live-Beispiel
HTML-Quelltext
<div class="row g-gesis-2">
<div class="col col-12 col-lg-4">
<div id="c105157" data-ce-original-uid="105157" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>erste Spalte, erstes Element</span> </div>
</div>
<div id="c105156" data-ce-original-uid="105156" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>erste Spalte, zweites Element</span> </div>
</div>
</div>
<div class="col col-12 col-lg-8">
<div id="c105158" data-ce-original-uid="105158" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>zweite Spalte, erstes Element</span> </div>
</div>
<div id="c105159" data-ce-original-uid="105159" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>zweite Spalte, zweites Element</span> </div>
</div>
</div>
</div>
Beispiel dreispaltiges Grid-Layout (gleichmäßige Spalten)
Breite ≥ md
: Darstellung aller Spalten nebeneinander:1
2
3
1
2
3
Breite < md
: Darstellung aller Spalten untereinander:1
1
2
2
3
3
Live-Beispiel
HTML-Quelltext
<div class="row row-cols-1 row-cols-md-3 g-gesis-2">
<div class="col">
<div id="c105356" data-ce-original-uid="105356" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>erste Spalte, erstes Element</span> </div>
</div>
<div id="c105357" data-ce-original-uid="105357" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>erste Spalte, zweites Element</span> </div>
</div>
</div>
<div class="col">
<div id="c105354" data-ce-original-uid="105354" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>zweite Spalte, erstes Element</span> </div>
</div>
<div id="c105355" data-ce-original-uid="105355" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>zweite Spalte, zweites Element</span> </div>
</div>
</div>
<div class="col">
<div id="c105360" data-ce-original-uid="105360" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>dritte Spalte, erstes Element</span> </div>
</div>
<div id="c105361" data-ce-original-uid="105361" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>dritte Spalte, zweites Element</span> </div>
</div>
</div>
</div>
Beispiel vierspaltiges Grid-Layout (gleichmäßige Spalten)
Breite ≥ lg
: Darstellung aller Spalten nebeneinander:1
2
3
4
1
2
3
4
sm ≤ Breite < lg
: Darstellung von jeweils zwei Spalten nebeneinander:1
2
1
2
3
4
3
4
Breite < sm
: Darstellung aller Spalten untereinander:1
1
2
2
3
3
4
4
Live-Beispiel
HTML-Quelltext
<div class="row row-cols-1 row-cols-sm-2 row-cols-lg-4 g-gesis-2">
<div class="col">
<div id="c105367" data-ce-original-uid="105367" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>erste Spalte, erstes Element</span> </div>
</div>
<div id="c105368" data-ce-original-uid="105368" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>erste Spalte, zweites Element</span> </div>
</div>
</div>
<div class="col">
<div id="c105365" data-ce-original-uid="105365" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>zweite Spalte, erstes Element</span> </div>
</div>
<div id="c105366" data-ce-original-uid="105366" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>zweite Spalte, zweites Element</span> </div>
</div>
</div>
<div class="col">
<div id="c105363" data-ce-original-uid="105363" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>dritte Spalte, erstes Element</span> </div>
</div>
<div id="c105364" data-ce-original-uid="105364" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>dritte Spalte, zweites Element</span> </div>
</div>
</div>
<div class="col">
<div id="c105371" data-ce-original-uid="105371" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>vierte Spalte, erstes Element</span> </div>
</div>
<div id="c105372" data-ce-original-uid="105372" class="frame frame-default frame-type-gesis-web-mouseoverbox frame-layout-0">
<div class="gs_mouseover_box"> <span>vierte Spalte, zweites Element</span> </div>
</div>
</div>
</div>