Checkmark on Circle.png

Grid-Layout

Aus KGS-Wiki

Das Grid-Layout ist eine Technik zur Anordnung von Elementen auf einer Website. Dabei werden die Elemente entlang eines gedachten Gitternetzes (engl. grid) ausgerichtet. Um das Grid-Layout umzusetzen, werden HTML und CSS verwendet.

Die Idee ist, ein HTML-Element als Grid-Container zu kennzeichnen und alle Grid-Elemente, die an diesem Gitter ausgerichtet werden sollen, dort hinein zu platzieren. Wo genau die Elemente platziert werden sollen, wird dann in CSS festgelegt.

Screenshot von kn-online.de. Dieser Teil der Seite ist im Grid-Layout gestaltet, die Gitterlinien sind hervorgehoben.

Was in HTML zu tun ist

Im <body> der Webseite wird ein <div>-Element angelegt und diesem eine class zugewiesen. Dieses Element ist der Grind-Container und es bietet sich an, die class auch so oder so ähnlich zu nennen.

In diesem Grid-Container, also zwischen seinem öffnenden <div>- und seinem schließenden </div>-Tag werden dann die einzelnen Grid-Elemente platziert, ebenfalls in <div>-Tags eingeschlossen. Für jedes Element wird eine eigene class festgesetzt. Auch hier ist es sinnvoll, die Klassen so zu benennen, dass die Funktion als Grid-Element deutlich wird.

Was in CSS zu tun ist

Der Grid-Container

Für den Grid-Container muss festgelegt werden, dass in ihm alles am Gitter ausgerichtet wird. Dies bewirkt folgende Regel:

.grid-container {
  display: grid;
}

Zusätzlich kann auf die Gestaltung des Gitters Einfluss genommen werden: Mit den Attributen column-gap und row-gap kann beispielsweise der Abstand zwischen zwei Spalten bzw. zwischen zwei Zeilen festgelegt werden. Mit grid-template-rows und grid-template-columns kann zusätzlich die Anzahl und Breite der Zwischenräume zwischen den Gitternetzlinien definiert werden. Wenn man diese Attribute nicht festlegt, werden die Zeilen und Spalten lückenlos aneinandergesetzt und die Anzahl, Höhe und Breite der Spalten und Zeilen automatisch aus den Definitionen der Grid-Elemente berechnet.

Insgesamt könnten die CSS-Regeln für den Grid-Container dann so aussehen:

.grid-container {
  display: grid;
  column-gap: 20px;
  row-gap: 20px;
  grid-template-rows: 200px 200px 200px; /* drei Zeilen, jede 200px hoch */
  grid-template-columns: 15% 50% 20% 15%;/* vier Spalten, 15, 50, 20 und 15 Prozent der Container-Breite */
}


Die einzelnen Elemente

Für jedes Element muss festgelegt werden, an welcher Gitternetzlinie es beginnen und enden soll, sowohl waagerecht als auch senkrecht.

Dafür gibt es die Attribute grid-column-start, grid-column-end, grid-row-start und grid-row-end. Für den Artikel übers Schlittenfahren im oben abgebildeten Screenshot würden z.B. folgende Regeln gelten:

.schlittenfahren {
  grid-column-start: 2;
  grid-column-end: 3;
  grid-row-start: 1;
  grid-row-end: 2;
}

Diese Regeln können auch als grid-column: VON / BIS; bzw. grid-row: VON / BIS; zusammengefasst werden, wobei die Start- und End-Gitterlinien mit einem Schrägstrich getrennt angegeben werden.

Beispiel

Der folgende Code erzeugt vier Boxen mit breiten schwarzen Rahmen in zwei Zeilen:

 <html>
   <head>
     <style>
	   /* Regeln für die Rahmenlinien, damit man die Boxen sehen kann */
	   div {
	     border: 3px solid black;
	     padding: 20px;
	   }
	   
	   .grid-container {
	     display: grid;
	     row-gap: 20px;
	     column-gap: 20px;
	   }
	   
	   .grid-element-top-left {
	     grid-row: 1 / 2;
	     grid-column: 1 / 2;
	   }
	   
	   .grid-element-top-right {
	     grid-row: 1 / 2;
	     grid-column: 2 / 3;
	   }
	   
	   .grid-element-bottom-left {
	     grid-row: 2 / 3;
	     grid-column: 1 / 2;
	   }
	   
	   .grid-element-bottom-right {
	     grid-row: 2 / 3;
	     grid-column: 2 / 3;
	   }
	 </style>
   </head>
   <body>
     <div class="grid-container">
       <div class="grid-element-top-left"></div>
       <div class="grid-element-top-right"></div>
       <div class="grid-element-bottom-left"></div>
       <div class="grid-element-bottom-right"></div>
     </div>
  </body>
 </html>
<div class="grid-container">
<div class="grid-element-top-left">
<div class="grid-element-top-right">
<div class="grid-element-bottom-left">
<div class="grid-element-bottom-right">