HTML5-Elemente, Grid-Layout und Flexbox
HTML5-Elemente
HTML5 bietet einige semantische Elemente, mit denen bestimmte Bereiche einer Seite ausgezeichnet werden können. Dazu zählen unter anderem: header
, main
, footer
, nav
, article
und section
.
Das Element main
sollte möglichst nur einmal auf der Seite verwendet werden. Die anderen Elemente können mehrfach auf einer Seite vorkommen. Es ist erlaubt die Elemente article
und section
beliebig ineinander zu verschachteln, wenn es Sinn macht.
Das Element article
soll für Inhalte verwendet werden, die für sich allein stehen können, dies kann zum Beispiel ein Beitrag in einem Blog sein. Wohingegen das Element section
einen Abschnitt eines Dokumentes beschreibt. Häufig steht innerhalb der beiden Elemente mindestens eine Überschrift. Wirkt sich ein Bereich nicht auf die Gliederung der Seite aus, ist die Verwendung eines div
-Elements oft die bessere Wahl.
Grid-Layout
Das CSS Grid-Layout erlaubt es, das Layout einer Seite mit einem zweidimensionalen Gitter zu beschreiben. Die Größe der einzelnen Zellen kann entweder fix oder flexibel festgelegt werden.
body {
display: grid;
grid-template-columns: 1fr 800px 1fr;
grid-template-rows: 30px 1fr 30px;
grid-row-gap: 30px;
grid-template-areas: "hd hd hd"
".. mn .."
"ft ft ft";
min-height: 100vh;
}
Der oben stehende CSS-Code erzeugt das folgende Layout:
1fr 800p 1fr
+----+----+----+
30px | hd | hd | hd |
+--------------+
1fr | | mn | |
+--------------+
30px | ft | ft | ft |
+----+----+----+
Die Einheit fr
steht für Fraction. Der freie Platz wird entsprechend zum Verhältnis der gesamten Fraction aufgeteilt. In dem gezeigten Fall bekommen sowohl die linke als auch die rechte Spalte die Hälfte der noch zur Verfügung stehenden Fläche, da die gesamte Fraction den Wert 2 hat. Bei der Definition der Reihen wurde nur eine Fraction angegeben. Also bekommt die mittlere Reihe die gesamte übrige freie Fläche.
Außerdem wurde das Grid mit in die verschiedene Bereiche hd
, mn
und ft
eingeteilt. In den oberen drei Spalten soll der Kopfzeile (Header) der Seite dargestellt werden. Der Hauptbereich (Main) befindet sich in der Mitte. Die Spalten links und rechts von der Mitte bleiben leer. Dies wird durch mindestens ein Punkt kenntlich gemacht. Am unteren Rand befindet sich schließlich die Fußzeile (Footer).
HTML-Elemente können einen der Bereiche zugeordnet werden. Wobei der Name für die Bereiche frei wählbar ist, jedoch müssen die in grid-template-areas
definierten Namen mit denen in grid-area
angegebenen übereinstimmen.
body > header {
grid-area: hd;
}
body > main {
grid-area: mn;
}
body > footer {
grid-area: ft;
}
Zusätzlich ist es möglich, die Elemente des Grids auszurichten. Dies kann auf verschiedenen Weisen erfolgen. Zunächst können die Elemente vertikal mit align-...
oder horizontal mit justify-...
ausgerichtet werden.
Ein bestimmtes Element kann innerhalb seines Bereichs mit align-self
bzw. justify-self
ausgerichtet werden. Sind alle Elemente eines Grids auf die gleiche Weise innerhalb ihres Bereichs auszurichten, kann dies durch die Angabe von align-items
bzw. justify-items
erfolgen.
Angewendet wird der Ausdruck ...-self
in dem umschließenden Element. Und der Ausdruck -items
steht entsprechend im Grid-Element, wo auch display: grid;
angegeben wurde.
Außerdem ist es möglich, Element innerhalb des Grid-Elements auszurichten. Dies kann mit dem Ausdruck align-content
bzw. justify-content
realisiert werden.
Ausrichtung
+
|
+--------+--------+
| |
v v
align- justify-
(vertikal) (horizontal)
+ +
| |
+---------+--------+--------+--------+
| | |
v v v
self items content
(einzelnes Element (alle Elemente (alle Elemente
innerhalb seines innerhalb ihres innerhalb des
Bereichs) Bereichs) umschließenden
Containers)
Je nach Eigenschaft können unter anderen die Werte auto
, flex-start
, flex-end
, center
, baseline
, space-between
, stretch
oder space-around
zugewiesen werden.
Flexbox
Flexbox funktioniert ähnlich wie das Grid-Layout. Allerdings können Elemente in einer Flexbox entweder horizontal oder vertikal angeordnet werden. Ist der Inhalt nicht in einer Zeile darstellbar, wird der Inhalt ggf. automatisch in die nächste Zeile umgebrochen. Für ein zweidimensionales Layout ist daher ein Grid-Layout oft besser geeignet.
Für die Verwendung von Flexbox muss in dem umschließenden Container, die Eigenschaft display: flex
gesetzt werden. Die enthaltenden Elemente können die Eigenschaft flex: <grow> <shrink> <basis>
zugewiesen bekommen. Mit flex-grow
und flex-shrink
kann festgelegt werden, wie das Element relativ zu den anderen Elementen des Containers wächst bzw. sich verkleinert. Mit flex-basis
wird die Breite des Elements angegeben werden, von dem aus dann evtl. wächst und sich verkleinert.
Mit align-self
kann das Element innerhalb seines Bereichs ausgerichtet werden. Je nachdem, ob in dem Container flex-direction: row
oder flex-direction: column
gesetzt ist, werden die Elemente horizontal oder vertikal angeordnet. Daher fällt justify-self
weg.
Die Ausdrücke align-content
und justify-content
beziehen sich, wie beim Grid Layout, auf die Position der Elemente innerhalb des Containers.