CSS-Layout mit Flexbox und Grid

Lerne, wie Browser Boxen auf einer Seite anordnen und wie du diese Anordnung steuerst. Beginne mit dem normalen Dokumentfluss, der display-Eigenschaft und Floats. Positioniere anschließend Elemente relativ, absolut, fixiert und haftend und steuere überlappende Ebenen mit z-index. Erstelle mit Flexbox Zeilen und Spalten von Elementen und mit CSS Grid zweidimensionale Layouts. Lege dabei Größen und Abstände fest und richte Elemente aus. Wähle zum Abschluss für jeden Teil einer Seite das passende Verfahren, erstelle gängige Seiten- und Komponentenlayouts und behebe Layoutfehler mit den Entwicklerwerkzeugen des Browsers.

AnfängerEinheit 5 von 8 in Kurs: HTML und CSS – barrierefreie, responsive Webseiten erstellen

Was du lernst

  1. Beschreibe, wie ein Browser Boxen ohne Layout-CSS platziert, ändere dieses Verhalten mit der display-Eigenschaft und lass Text mithilfe von Floats um ein Element fließen.
    • Vollziehe den normalen Dokumentfluss mit Blockboxen und Inlineboxen nach
      Bestimme, wo Blockboxen und Inlineboxen im normalen Dokumentfluss erscheinen, wie sich ihre Größen verhalten und wann vertikale Außenabstände zusammenfallen.
    • Ändere das Layout mit der display-Eigenschaft
      Ändere mit display, wie ein Element am Layout seines Elternelements teilnimmt und wie seine eigenen Kindelemente angeordnet werden, und blende Elemente richtig aus.
    • Lass Text mit float um ein Element fließen
      Lass ein Bild oder Zitat umfließen, platziere Inhalt unter Floats und sorge dafür, dass ein Elternelement seine Floats einschließt.
  2. Verschiebe Elemente von ihrem normalen Platz, hefte sie an einen Container oder den Viewport, halte sie beim Scrollen sichtbar und steuere, welches überlappende Element oben erscheint.
    • Verschiebe Elemente durch relative und absolute Positionierung
      Verschiebe Elemente mit relativer und absoluter Positionierung und platziere Überlagerungen wie Kennzeichnungen genau innerhalb eines ausgewählten Containers.
    • Halte Elemente durch fixierte und haftende Positionierung im sichtbaren Bereich
      Hefte Elemente durch fixierte Positionierung an den Viewport, lass Kopfbereiche und Überschriften beim Scrollen durch haftende Positionierung haften und vermeide die jeweiligen Probleme.
    • Steuere mit z-index, welche Elemente im Vordergrund erscheinen
      Bestimme die Stapelreihenfolge überlappender Elemente, verwende z-index innerhalb von Stapelkontexten und behebe die klassischen Probleme, bei denen „z-index nicht funktioniert“.
  3. Ordne mit Flexbox Elemente in einer Zeile oder Spalte an: Lege Richtung und Zeilenumbruch fest, steuere das Wachsen und Schrumpfen der Elemente und richte sie aus und lege ihre Abstände fest.
    • Richte einen Flex-Container und seine Achsen ein
      Mache ein Element zu einem Flex-Container, erkläre Haupt- und Querachse und steuere Richtung, Zeilenumbruch und visuelle Reihenfolge, ohne die Lesereihenfolge zu beeinträchtigen.
    • Lege die Größe von Flex-Elementen mit flex-grow, flex-shrink und flex-basis fest
      Berechne, wie Flexbox freien Platz und Überlauf mithilfe von flex-basis, flex-grow und flex-shrink auf Elemente aufteilt, und verwende die flex-Kurzschreibweise sicher.
    • Richte Flex-Elemente aus und lege ihre Abstände fest
      Verteile Platz entlang der Hauptachse, richte Elemente an der Querachse aus, schiebe sie mit automatischen Außenabständen auseinander und lege ihre Abstände mit gap fest.
  4. Definiere mit CSS Grid Zeilen und Spalten, platziere Elemente anhand von Linien und benannten Bereichen, lass das Raster Elemente automatisch platzieren und richte Elemente und Rasterspuren aus.
    • Definiere Rasterspuren mit fr, repeat und minmax
      Erstelle die Zeilen und Spalten eines Rasters, berechne Rasterspurgrößen mit der fr-Einheit und verwende repeat(), minmax() und gap.
    • Platziere Elemente anhand von Liniennummern, Spannweiten und benannten Rasterbereichen
      Platziere Grid-Elemente mit Liniennummern, span und benannten Vorlagenbereichen und halte visuelle Reihenfolge und Lesereihenfolge in Übereinstimmung.
    • Lass Elemente automatisch im Raster platzieren
      Platziere mit automatischer Platzierung und dem impliziten Raster beliebig viele Elemente und erstelle Kartenraster, die ihre Spaltenzahl mit auto-fill und auto-fit anpassen.
    • Richte Elemente und Rasterspuren im Raster aus
      Richte jedes Element innerhalb seines Rasterbereichs und alle Rasterspuren zusammen innerhalb des Containers aus und zentriere Inhalt mit den place--Kurzschreibweisen.
  5. Wähle für jeden Teil einer Seite das passende Layoutverfahren, erstelle gängige Seiten- und Komponentenlayouts und finde und behebe Layoutfehler.
    • Wähle das passende Layoutverfahren
      Entscheide für ein bestimmtes Layout zwischen normalem Dokumentfluss, Flexbox, Grid, Positionierung, Floats und Mehrspaltenlayout und kombiniere sie auf einer Seite.
    • Erstelle Layouts für ganze Seiten
      Erstelle eine gut lesbare Inhaltsspalte, eine Seite mit Kopfbereich, Seitenleiste, Haupt- und Fußbereich, einen am unteren Rand bleibenden Fußbereich und eine haftende Seitenleiste.
    • Erstelle gängige Komponentenlayouts
      Ordne wiederkehrende Teile der Benutzeroberfläche an: zentrierten Inhalt, Navigationsleisten, Blöcke mit Bild neben Text, Kartenraster mit ausgerichteten Teilen, Überlagerungen, Formulare und Eingabegruppen.
    • Finde und behebe Layoutprobleme
      Finde mit den Entwicklerwerkzeugen des Browsers und einer Liste häufiger Ursachen heraus, warum ein Layout nicht funktioniert oder eine Eigenschaft keine Wirkung hat, und teste Layouts mit echten Inhalten.

CSS-Layout mit Flexbox und Grid einfach erklärt

5 Kapitel

1

Wie Boxen im Dokumentfluss angeordnet werden

Browser ordnen lesbare Seiten an, bevor besondere Layoutregeln hinzukommen. Block- und Inlineboxen erklären diese Ausgangsanordnung, unter anderem, warum ein schmaler Absatz trotzdem eine eigene Zeile belegt und warum manche Außenabstände zusammenfallen. Lerne, wie display die Außen- und Innenseite einer Box verändert, und nutze Floats anschließend gezielt, um Text um ein Bild fließen zu lassen. Mit diesen Regeln kannst du vorhersagen, was sich ändert, wenn du später Flexbox oder Grid einsetzt.

1.1 Wie Block- und Inlineboxen eine Seite aufteilen

Eine Seite hat bereits ein Layout, bevor du Flexbox oder Grid hinzufügst. Der normale Dokumentfluss platziert Boxen in HTML-Reihenfolge. Bei horizontalem deutschem Text stehen Blöcke untereinander und Inline-Inhalt verläuft von links nach rechts und bricht um, wenn eine Zeile voll ist.

Blöcke belegen eine Zeile

Absätze, Überschriften, div-Elemente und Abschnitte sind standardmäßig Blockboxen. Ein Block mit width: auto füllt die verfügbare Breite seines Containers und wächst mit seinem Inhalt in die Höhe. Wenn du seine Breite festlegst, rückt der nächste Block deshalb nicht in dieselbe Zeile.

<p>Read the <a href="/guide">setup guide</a> first.</p>
<p>Then install it.</p>

Die Absätze beginnen in getrennten Zeilen. Der Link ist eine Inlinebox innerhalb des ersten Absatzes. Selbst wenn der erste Absatz nur 300px breit ist, beginnt der zweite weiterhin darunter.

Inlineboxen folgen dem Text

Ein <span>, <a>, <strong> oder <em> nimmt normalerweise nur die Breite seines Textes ein. Eine nicht ersetzte Inlinebox ignoriert width und height. Ergänzt du a { width: 200px; }, wird der Link daher nicht 200px breit.

Horizontale Innenabstände, Rahmen und Außenabstände schieben benachbarten Text zur Seite. Vertikale Innenabstände und Rahmen werden gezeichnet, vergrößern aber nicht den Abstand zwischen den umgebenden Zeilen; ein großer Hintergrund kann die Zeile darüber oder darunter überlappen. Vertikale Außenabstände haben keine Wirkung. Ein Bild ist ein ersetztes Element: Es ist standardmäßig inline, doch width und height wirken darauf.

Vertikale Außenabstände können zusammenfallen

Im normalen Dokumentfluss können sich berührende vertikale Außenabstände von Blockboxen zusammenfallen, sodass ein Abstand entsteht. Auf einen Absatz mit margin-bottom: 24px, dem eine Überschrift mit margin-top: 32px folgt, entsteht ein Abstand von 32px. Der größere positive Außenabstand setzt sich durch; der Abstand beträgt nicht 56px. Bei einem positiven Außenabstand von 24px und einem Außenabstand von −10px beträgt das Ergebnis 14px. Horizontale Außenabstände bleiben getrennt.

Der obere Außenabstand eines ersten Kindelements kann auch mit dem oberen Außenabstand seines Elternelements zusammenfallen, wenn kein Rahmen, Innenabstand oder Inline-Inhalt sie trennt. Ein oberer Außenabstand von 20px an einer Überschrift kann einen ganzen Kopfbereich ohne Innenabstand nach unten verschieben, ohne darin Platz zu schaffen. Verwende einen oberen Innenabstand für Platz im Inneren, ergänze einen Rahmen oder gib dem Elternelement display: flow-root. Auch der untere Außenabstand eines letzten Kindelements kann mit dem seines Elternelements zusammenfallen.

Außenabstände von Flex- und Grid-Elementen fallen untereinander nicht zusammen. Stellst du ein Elternelement vom normalen Dokumentfluss auf Flexbox um, können sich dieselben beiden positiven Außenabstände nun addieren. Auch gefloatete und absolut positionierte Boxen behalten getrennte Außenabstände.

Die Richtungen folgen der Schreibrichtung

Die Blockrichtung gibt an, wo aufeinanderfolgende Blöcke stehen; die Inline-Richtung gibt den Verlauf des Textes an. Auch Arabisch und Hebräisch verwenden horizontale Zeilen, ihre Inline-Richtung verläuft aber von rechts nach links. Logische Eigenschaften folgen diesen Richtungen: margin-inline-start: 16px ergibt im Deutschen einen linken und im Arabischen einen rechten Außenabstand. padding-block legt den Innenabstand entlang der Blockrichtung fest.

Wichtige Erkenntnisse

  • Blöcke beginnen neue Zeilen, auch wenn sie eine geringe Breite haben.
  • Nicht ersetzte Inlineboxen ignorieren width und height; Bilder sind eine Ausnahme.
  • Sich berührende vertikale Außenabstände von Blöcken können zusammenfallen; horizontale nicht.
  • Logische Eigenschaften folgen der Block- und Inline-Richtung.
  • Innenabstand oder flow-root kann verhindern, dass der Außenabstand eines Kindelements mit dem seines Elternelements zusammenfällt.

1.2 Was display verändert

Die display-Eigenschaft steuert das Verhältnis einer Box zu ihrem Elternelement und die Anordnung ihrer Kindelemente. Das sind getrennte Entscheidungen. Ein Flex-Container kann eine ganze Zeile belegen und zugleich seine eigenen Kindelemente nebeneinander anordnen.

display von außen nach innen lesen

Der äußere Anzeigetyp ist Block oder Inline. Der innere Anzeigetyp beschreibt das Layout innerhalb der Box, etwa Flow, Flex oder Grid.

WertAußenInnen
blockBlockNormaler Dokumentfluss
inline-blockInlineGetrennter Flussbereich
flexBlockFlex-Layout
inline-flexInlineFlex-Layout
gridBlockGrid-Layout
inline-gridInlineGrid-Layout

Die moderne Syntax mit zwei Schlüsselwörtern macht den Unterschied sichtbar: display: inline flex bedeutet dasselbe wie inline-flex. display: block flow-root bedeutet dasselbe wie flow-root. Ein einzelner Wert wie grid legt standardmäßig einen äußeren Blocktyp fest.

Einer Inlinebox eine Größe geben
nav a {
  display: inline-block;
  padding: 12px 16px;
}

Jeder Link steht weiterhin in einer Textzeile, nimmt nun aber Breite, Höhe und vertikale Außenabstände an. Sein vertikaler Innenabstand schafft Platz im Zeilenlayout, statt lediglich über benachbarte Zeilen zu zeichnen. So erhält ein Link eine größere Klickfläche.

Leerraum zwischen Inline-Blockelementen im HTML erscheint als kleiner Abstand zwischen den Boxen. Benötigst du eine kontrollierte Zeile mit einem genauen Abstand, bietet Flexbox dies direkt.

Eine Änderung von display verändert nicht die Bedeutung des HTML-Elements. Ein inline gestaltetes div-Element bleibt ein allgemeiner Container. Wähle eine Liste, einen Link oder eine Schaltfläche nach ihrem Zweck und gestalte dann ihre Box.

Eine Box mit der richtigen Wirkung ausblenden
RegelWirkung auf das Layout
display: noneDas Element und seine Nachfahren erzeugen keine Boxen.
visibility: hiddenDie Box behält ihren Platz im Layout, während sie ausgeblendet ist.

Eine mit display: none ausgeblendete Fehlermeldung hinterlässt keine Lücke. Wird sie angezeigt, schiebt sie nachfolgenden Inhalt nach unten. visibility: hidden reserviert die Lücke, sodass sich beim Einblenden der Meldung nichts bewegen muss. display: none verhindert außerdem den Tastaturfokus und entfernt den ausgeblendeten Inhalt aus der Screenreader-Ausgabe. Eine Klasse zum visuellen Ausblenden erfüllt einen anderen Zweck: Sie hält Text für Screenreader verfügbar, während sie ihn visuell ausblendet.

Kindelemente und unabhängige Bereiche

Mit ul { display: grid; } werden die Listeneinträge zu Grid-Elementen. Links innerhalb dieser Listeneinträge bleiben im Layout ihres jeweiligen Elternelements. Um diese Links anzuordnen, gib dem Listeneintrag ein eigenes Layout oder verwende Subgrid, wenn gemeinsame Rasterspuren benötigt werden.

display: contents entfernt die eigene Box des umschließenden Elements, sodass dessen Kindelemente am umgebenden Layout teilnehmen. Das Barrierefreiheitsverhalten des Browsers kann dabei auch die Rolle des umschließenden Elements entfernen. Vermeide dies daher bei bedeutungstragenden Steuerelementen, Listen und Tabellen.

display: flow-root erzeugt einen Blockformatierungskontext, einen unabhängigen Flussbereich. Er schließt gefloatete Kindelemente ein und verhindert, dass die Außenabstände des Elternelements mit denen seiner Kindelemente zusammenfallen. Diese Wirkungen werden erreicht, ohne Inhalte abzuschneiden oder Bildlaufleisten hinzuzufügen.

Wichtige Erkenntnisse

  • Display hat einen äußeren und einen inneren Anzeigetyp.
  • Flex und Grid wirken auf direkte Kindelemente.
  • inline-block behält die Inline-Platzierung bei und nimmt zugleich Boxmaße an.
  • display: none entfernt den Platz im Layout; visibility: hidden behält ihn bei.
  • flow-root schließt Floats ein und trennt die Außenabstände von Eltern- und Kindelement.
  • Verwende display: contents vorsichtig, weil das Browserverhalten die zugängliche Rolle des umschließenden Elements entfernen kann.

1.3 Textfluss um Floats

Bei einem Porträt in einem Artikel soll der Text oft einige Zeilen lang daneben und darunter wieder in voller Breite verlaufen. Ein Float erzeugt diese Form des Textflusses. Er hat eine andere Aufgabe als eine Seitenleiste, die in einer eigenen Spalte bleibt.

Ein Bild neben Fließtext setzen
img.portrait {
  float: left;
  width: 160px;
  margin: 0 16px 8px 0;
}

Setze das Bild vor die Absätze, die es umfließen sollen. Das Bild bewegt sich an den linken Rand seines Containers. Der folgende Text nutzt den Platz rechts daneben und hält horizontal 16px sowie unter der Unterkante 8px Abstand. Sobald der Text am Bild vorbei ist, nehmen die Zeilen wieder die volle Containerbreite ein. Verwende float: right für den gegenüberliegenden Rand und float: none, um das Float-Verhalten aufzuheben.

Ein Float wird aus dem normalen Dokumentfluss entfernt, doch benachbarter Inline-Inhalt fließt weiterhin um ihn herum. Nachfolgende Blockboxen selbst ignorieren den Float: Ihre Hintergründe und Rahmen können sich hinter ihm fortsetzen. Ein Absatzhintergrund unter dem Bild bedeutet nicht, dass sein Text das Bild nicht umfließt.

Ein gefloatetes Element wird zu einer Box auf Blockebene. Ein gefloatetes <span> kann daher Breite und Höhe annehmen. Ohne festgelegte Breite schrumpft eine gefloatete Textbox auf die Größe ihres Inhalts; ein Bild hat eigene Abmessungen.

Den nächsten Abschnitt unter dem Bild beginnen

Angenommen, der Text ist kürzer als das Porträt und eine neue Abschnittsüberschrift beginnt neben dem Porträt. Die clear-Eigenschaft steuert diese Anordnung:

.next-section {
  clear: both;
}

Die Überschrift rückt unter vorhergehende Floats auf beiden Seiten. clear: left berücksichtigt nur linke Floats, clear: right nur rechte. Die clear-Eigenschaft auf einer späteren Überschrift macht das vorhergehende Bild nicht selbst wieder zu einem gewöhnlichen Block.

Das Elternelement seine Floats einschließen lassen

Ein Elternelement mit ausschließlich gefloateten Kindelementen erhält durch sie keine Höhe im normalen Dokumentfluss. Sein Hintergrund und Rahmen können zusammengefallen aussehen und der nächste Inhalt kann neben die Floats rücken. Lass das Elternelement sie einschließen:

.profile {
  display: flow-root;
}

Die Höhe des Elternelements umschließt nun das gefloatete Bild. Das unterscheidet sich von clear: flow-root verändert den Flussbereich des Elternelements, während clear ein nachfolgendes Element unter Floats verschiebt.

Ältere Stylesheets enthalten oft einen Clearfix: ein ::after-Pseudoelement mit content: "", display: block und clear: both. Du kannst auch overflow: auto antreffen, um Floats einzuschließen. Das kann bei zu großem Inhalt Bildlauf hinzufügen; flow-root drückt die Aufgabe des Einschließens unmittelbar aus.

Ältere Spaltenlayouts erkennen

Vor Flexbox und Grid wurden Seitenspalten häufig mit prozentualen Breiten und Clear-Regeln gefloatet. Warte solche Regeln mit einem Verständnis für Floats, wähle aber Flexbox oder Grid für neue Spalten, deren Größe und Ausrichtung festgelegt werden müssen.

Ein direktes Kindelement eines Flex- oder Grid-Containers folgt diesem Layout, sodass float auf dieses Element keine Wirkung hat. Fließt Text nicht mehr um ein gefloatetes Bild, nachdem du dem Elternelement display: flex gegeben hast, prüfe zuerst das Layout des Elternelements.

Wichtige Erkenntnisse

  • Ein Float lässt nachfolgenden Inline-Inhalt um sich herumfließen.
  • clear verschiebt eine spätere Box unter vorhergehende Floats.
  • flow-root sorgt dafür, dass ein Elternelement seine gefloateten Kindelemente einschließt.
  • Floats haben keine Wirkung auf Flex- oder Grid-Elemente.
2

Positionierung und überlappende Ebenen

Positionierung steuert Versatz, Überlagerungen und Elemente, die beim Scrollen sichtbar bleiben. Entscheidend ist, welchen Platz eine Box behält und welches Vorfahrenelement ihren Bezug liefert. Beginne mit einer Kennzeichnung in einer Karte, gehe zu fixierten Steuerelementen und haftenden Überschriften über und untersuche dann überlappende Ebenen. Stapelkontexte erklären, warum ein Dropdown-Menü selbst bei einem sehr großen eigenen z-index verborgen bleiben kann, und zeigen, welches Vorfahrenelement tatsächlich geändert werden muss.

2.1 Versatzwerte und ihre Bezugsbox

Mit Positionierung kann eine Box eine andere überlappen oder sich von ihrer normalen Position wegbewegen. Entscheide vor dem Festlegen eines Versatzes, ob die Box ihren ursprünglichen Platz behalten soll und welches Vorfahrenelement als Bezug dienen soll.

Statisch, relativ und absolut
PositionPlatz im normalen DokumentflussBezug für Versatzwerte
staticBleibt erhaltenVersatzwerte haben keine Wirkung
relativeBleibt erhaltenUrsprüngliche Position der Box
absoluteEntfälltUmschließender Block

Mit position: relative; top: 10px; left: 20px wird eine Box 10px unterhalb und 20px rechts von ihrer ursprünglichen Position gezeichnet. Ihre Nachbarn bleiben an ihrem Platz. Die ursprüngliche Lücke bleibt bestehen, sodass die Box bei einem großen Versatz ihre Nachbarn überlappen kann.

Ein relativ positioniertes Elternelement benötigt keine Versatzwerte, um als Bezug für ein absolut positioniertes Kindelement zu dienen. Das ist eine häufige Anwendung der relativen Positionierung.

Eine Kennzeichnung an einer Karte verankern
.card {
  position: relative;
}
.badge {
  position: absolute;
  top: 8px;
  right: 8px;
}

Die Kennzeichnung ist aus dem normalen Dokumentfluss genommen, sodass die Karte keinen Platz für sie reserviert. Ihre obere und rechte Kante liegen jeweils 8px von den Innenabstandskanten der Karte nach innen versetzt. Lass im Inhalt der Karte genügend Platz, damit ein langer Titel nicht unter die Kennzeichnung läuft.

Der umschließende Block einer absolut positionierten Box ist gewöhnlich die Innenabstandsbox ihres nächsten positionierten Vorfahrenelements. Ein positioniertes Element hat einen beliebigen position-Wert außer static. Bleibt die Karte statisch, sucht die Kennzeichnung weiter oben in der Vorfahrenkette. Gibt es kein geeignetes Vorfahrenelement, dient der anfängliche umschließende Block als Bezug: ein Rechteck in Viewport-Größe am Anfang des Dokuments, das mit der Seite scrollt. Auch ein anderer Wert als none für transform, filter oder perspective auf einem Vorfahrenelement kann diesen Bezug herstellen.

Eine Überlagerung strecken oder zentrieren

Eine absolute Box mit automatischer Größe und Versatzwerten, die sie nicht strecken, schrumpft auf die Größe ihres Inhalts. Legst du bei automatischer Breite sowohl den linken als auch den rechten Versatz fest, füllt sie den Platz dazwischen; das obere und untere Wertepaar funktioniert bei automatischer Höhe entsprechend.

.overlay {
  position: absolute;
  inset: 0;
}

inset legt oben, rechts, unten und links gleichzeitig fest. Bei automatischen Abmessungen und ohne Außenabstände füllt diese Überlagerung den umschließenden Block. Eine festgelegte Breite oder Höhe verändert die Größenberechnung. Entferne daher diese Begrenzungen, wenn die Ebene die ganze Box bedecken soll.

Für eine zentrierte Kennzeichnung unbekannter Größe verwende top: 50%; left: 50%; transform: translate(-50%, -50%). Die Versatzwerte verschieben ihre obere linke Ecke in die Mitte des umschließenden Blocks. Die Verschiebung bewegt sie um die Hälfte ihrer eigenen Breite und Höhe zurück. Bei bekannter Breite und Höhe ist inset: 0; margin: auto eine weitere Methode zum Zentrieren.

Den Bezug für Prozentangaben prüfen

Ein Elternelement mit content-box, width: 400px und einem horizontalen Innenabstand von 20px hat eine 440px breite Innenabstandsbox. Ein absolut positioniertes Kindelement mit width: 50% hat daher eine Inhaltsbreite von 220px. Misst du nur die 400px breite Inhaltsbox des Elternelements, erhältst du das falsche Ergebnis.

Verwende absolute Positionierung für eine Kennzeichnung, eine Kurzinfo oder eine Überlagerung. Seitenspalten benötigen Boxen, die auf die Größe der jeweils anderen reagieren; Flexbox, Grid und normaler Dokumentfluss stellen diese Beziehung her.

Wichtige Erkenntnisse

  • Relative Positionierung behält den ursprünglichen Platz bei; absolute Positionierung entfernt ihn.
  • Eine absolute Box misst Versatzwerte gewöhnlich von der Innenabstandsbox ihres nächsten positionierten Vorfahrenelements aus.
  • inset: 0 streckt eine automatisch dimensionierte absolute Überlagerung auf ihren umschließenden Block.
  • Prozentangaben für Versatz und Verschiebung verwenden unterschiedliche Bezugsboxen.
  • Verwende für die Hauptstruktur der Seite normalen Dokumentfluss, Flexbox oder Grid.

2.2 Elemente, die beim Scrollen sichtbar bleiben

Ein Steuerelement zum Seitenanfang und eine Tabellenüberschrift sollen beide sichtbar bleiben, haben aber unterschiedliche Beziehungen zur Seite. Fixierte Positionierung bindet ein Steuerelement an ein Bezugsfenster. Haftende Positionierung belässt eine Box im Dokumentfluss und begrenzt ihre Bewegung auf ihren Abschnitt.

Ein Steuerelement am Viewport anheften
.back-to-top {
  position: fixed;
  right: 16px;
  bottom: 16px;
}

Die Schaltfläche bleibt beim Scrollen des Dokuments in der rechten unteren Ecke des Fensters. Sie beansprucht keinen Platz im normalen Dokumentfluss. Auch ein fixierter Kopfbereich reserviert keinen Platz und kann den ersten Absatz verdecken.

Für einen 64px hohen fixierten Kopfbereich lässt body { padding-top: 64px; } Platz für den ersten Inhalt. Setze außerdem html { scroll-padding-top: 64px; }, damit Abschnittslinks ihre Zielüberschriften nicht unter dem Kopfbereich platzieren. Gib dem Kopfbereich einen Hintergrund, damit Text, der dahinter scrollt, nicht durchscheint.

Ein anderer Wert als none für transform, filter oder perspective auf einem Vorfahrenelement kann dieses zum umschließenden Block des fixierten Elements machen. Das Element bleibt dann innerhalb dieses Vorfahrenelements und kann mit ihm wegscrollen. Untersuche die Vorfahrenelemente, wenn sich ein fixiertes Steuerelement unerwartet mit der Seite bewegt.

Eine Überschrift innerhalb eines Abschnitts haften lassen
thead th {
  position: sticky;
  top: 0;
  background: white;
}

Eine haftende Überschrift nimmt zunächst ihren normalen Platz ein. Wenn sie beim Scrollen die Schwelle top: 0 nach oben überschreiten würde, bleibt sie dort stehen. Sie kann sich nicht über ihren umschließenden Block hinaus bewegen: Das Ende ihres Abschnitts schiebt sie schließlich aus dem sichtbaren Bereich. Das ist für lange Tabellen und Abschnittsnavigationen nützlich.

VerhaltenFixiertHaftend
Platz im normalen DokumentflussEntfälltReserviert
Beginnt an der gewöhnlichen PositionNeinJa
Stoppt am Ende des AbschnittsNeinJa

Der Viewport ist der übliche Bezug für fixierte Elemente. Haftende Elemente nutzen das nächste relevante scrollende Vorfahrenelement; die Seite dient als Bezug, wenn keine nähere scrollende Box dazwischenliegt.

Eine Box untersuchen, die nicht haftet

Prüfe diese Ursachen der Reihe nach:

  1. Setze auf der Achse, auf der das Element haften soll, einen anderen Versatzwert als auto, etwa top: 0 für vertikales Scrollen. Das Schlüsselwort sticky allein legt keine Schwelle fest.
  2. Prüfe Vorfahrenelemente auf overflow: hidden, auto oder scroll. Sie können zum Bezug für das haftende Element werden, selbst wenn tatsächlich eine andere Box scrollt.
  3. Vergleiche die Höhe der haftenden Box mit der ihres umschließenden Blocks. Ein umschließendes Element, das nur so hoch wie seine Überschrift ist, lässt der Überschrift keinen Platz zur Bewegung.

Eine haftende Seitenleiste in einem Raster kann ebenfalls auf die volle Höhe der Zeile gestreckt werden. align-self: start lässt sie ihre Inhaltshöhe behalten und schafft Platz zur Bewegung.

Inhalt und Fokus sichtbar halten

Fixierte und haftende Leisten beanspruchen einen Teil des sichtbaren Bildschirms. Bei 200 % Textvergrößerung kann eine Navigationsleiste deutlich höher werden. Teste neben dem Scrollen auch die Tastaturnavigation. Das WCAG-2.2-Kriterium 2.4.11, Fokus nicht verdeckt (Minimum), verlangt, dass vom Autor hinzugefügter Inhalt ein fokussiertes Element nicht vollständig verdeckt. Halte Leisten niedrig und sorge für geeigneten Scrollraum um Ziele.

Wichtige Erkenntnisse

  • Fixierte Positionierung entfernt die Box aus dem Dokumentfluss; haftende Positionierung behält ihren Platz bei.
  • Haftende Positionierung benötigt einen Versatz und Bewegungsraum innerhalb des umschließenden Blocks.
  • Überlauf auf einem Vorfahrenelement kann den Bezug für haftende Positionierung ändern.
  • Reserviere Platz für fixierte Kopfbereiche und prüfe, ob fokussierter Inhalt sichtbar bleibt.

2.3 Stapelebenen und Stapelkontexte

Wenn Boxen überlappen, bestimmt die Stapelreihenfolge, welche du vorne siehst. Ein größerer z-index kann eine Box nach vorne bringen, aber nur innerhalb der Gruppe, in der dieser Wert verglichen wird.

z-index zur Wirkung bringen

z-index wirkt auf positionierte Elemente und auf Flex- oder Grid-Elemente. Ein statischer Absatz im normalen Dokumentfluss ignoriert die Eigenschaft. Ein statisches Grid-Element kann sie nutzen, ohne position: relative hinzuzufügen.

Ohne ausdrücklich festgelegte Ebenen werden positionierte Boxen über gewöhnlichen nicht positionierten Boxen gezeichnet. Bei vergleichbaren Boxen auf derselben Ebene wird die später im HTML stehende oben gezeichnet. Positive z-index-Werte, null und negative Werte geben dir mehr Kontrolle über diese Reihenfolge.

Ein Kontext wird als Einheit gestapelt

Ein Stapelkontext enthält eine Gruppe, die der Browser als Ganzes stapelt. Die Ebene eines Kindelements kann die Gruppe nicht über einen höher liegenden benachbarten Kontext heben.

.site-header {
  position: relative;
  z-index: 1;
}
.menu {
  position: absolute;
  z-index: 9999;
}
main {
  position: relative;
  z-index: 2;
}

Hier liegt .menu innerhalb von .site-header, während main dessen Geschwisterelement ist. Vergleiche zuerst die äußeren Gruppen: Der Kopfbereich liegt auf Ebene 1 und main auf Ebene 2. Main wird über dem gesamten Kopfbereich einschließlich des Menüs gezeichnet. Eine Erhöhung von 9999 ändert nur den Platz des Menüs innerhalb des Kopfbereichs.

Hebe den Kopfbereich selbst an, zum Beispiel auf z-index: 3, oder entferne die unnötige Ebene auf main. Wähle die Änderung, die zur gewünschten Reihenfolge der gesamten Seite passt.

Finden, was die Gruppe erzeugt

Das Wurzelelement erzeugt einen Stapelkontext. Häufige weitere Ursachen sind:

  • Eine relative oder absolute Box mit einem anderen z-index als auto.
  • Ein Flex- oder Grid-Element mit einem anderen z-index als auto.
  • Jede fixierte oder haftende Box.
  • opacity unter 1 oder ein anderer Wert als none für transform oder filter.
  • isolation: isolate.

Ein Elternelement mit opacity: 0.9 kann daher ein Dropdown-Menü einschließen, auch wenn niemand auf diesem Elternelement eine Ebene festgelegt hat. Gehe in den Entwicklerwerkzeugen die Vorfahrenelemente nach oben durch, wenn eine höhere Zahl keinen sichtbaren Unterschied macht. Suche nach dem ersten Paar benachbarter Gruppen, deren Reihenfolge falsch ist.

Dekorationen innerhalb einer Komponente halten
.panel {
  position: relative;
  isolation: isolate;
}
.panel-decoration {
  position: absolute;
  inset: 0;
  z-index: -1;
}

isolation: isolate erzeugt einen Kontext, ohne das Aussehen des Panels zu verändern. Das Kindelement mit negativem Wert wird hinter dem Text des Panels, aber über dessen Hintergrund gezeichnet. Ohne den lokalen Kontext kann es hinter den Hintergrund des Elternelements fallen und verschwinden.

Verwende für die gewünschten Seitenebenen eine kleine gemeinsame Skala, zum Beispiel 1 für angehobene Karten, 10 für einen haftenden Kopfbereich, 100 für Dropdown-Menüs und 1000 für einen modalen Dialog. Benutzerdefinierte CSS-Eigenschaften wie --z-dropdown: 100 erleichtern die Pflege dieser Entscheidungen.

Wichtige Erkenntnisse

  • z-index gilt für positionierte Boxen und Flex- oder Grid-Elemente.
  • Ein Stapelkontext wird als Einheit mit benachbarten Kontexten verglichen.
  • Eine hohe Ebene eines Kindelements kann einen niedriger liegenden Kontext seines Vorfahrenelements nicht verlassen.
  • Deckkraft und Transformationen können unerwartete Stapelkontexte erzeugen.
  • isolation: isolate hält die Stapelebenen einer Komponente innerhalb ihres Kontexts.
  • Verwende nach der Prüfung der Vorfahrenkontexte eine kleine gemeinsame Skala.
3

Zeilen und Spalten mit Flexbox

Flexbox macht aus einer Gruppe von Kindelementen eine Zeile oder Spalte, die den verfügbaren Platz aufteilen kann. Ihre Achsen erklären Richtung und Ausrichtung, während Basis, Wachstum und Schrumpfung die endgültigen Größen erklären. Verfolge eine umbrochene Zeile und rechne die Größen durch, bevor du Abstände, automatische Außenabstände und Ausrichtung festlegst. Du siehst auch, warum eine visuelle Umordnung die Tastaturnavigation stören und warum eine lange Codezeile das Schrumpfen einer flexiblen Spalte verhindern kann.

3.1 Flex-Zeilen, Spalten und Zeilenumbruch

Flexbox ordnet eine Gruppe entlang einer Hauptrichtung an. Es eignet sich für Navigationslinks, Werkzeugleisten und andere Elemente, deren Größe sich aus ihrem Inhalt ergibt. Ein umgebrochenes Flex-Layout kann mehrere Zeilen haben, aber jede Zeile teilt ihren Platz unabhängig auf.

Den Container erstellen
.nav {
  display: flex;
}

Die direkten Kindelemente der Navigation werden zu Flex-Elementen. Ein Link innerhalb eines Listeneintrags ist kein Flex-Element der Navigation, sofern er nicht auch ein direktes Kindelement ist. Text direkt innerhalb des Containers bildet ein anonymes Flex-Element.

Standardmäßig werden die Elemente in einer Zeile ohne Umbruch angeordnet, wachsen nicht und dürfen schrumpfen. Sie beginnen an der Anfangskante der Hauptachse. In einer horizontalen Zeile werden Elemente mit automatischer Höhe auf die Zeilenhöhe gestreckt und erscheinen daher oft gleich hoch.

Vor dem Ausrichten die Achsen benennen

Die Hauptachse folgt flex-direction. Die Querachse verläuft senkrecht dazu. Bei horizontalem deutschem Text:

RichtungHauptachseDas erste Element beginnt
rowHorizontalLinks
row-reverseHorizontalRechts
columnVertikalOben
column-reverseVertikalUnten

Eine Zeile folgt der Inline-Richtung, ihr Anfang liegt bei Text von rechts nach links also rechts. Eine Spalte folgt der Blockrichtung. Haupt- und Querachse beschreiben Rollen, keine dauerhaft horizontalen und vertikalen Richtungen.

justify-content wirkt auf der Hauptachse. align-items wirkt auf der Querachse. Nach dem Wechsel von Zeile zu Spalte zentriert justify-content: center vertikal, sofern Höhe übrig ist.

Ermitteln, welche Elemente hineinpassen
.cards {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}
.card {
  flex: 1 1 200px;
}

Betrachte fünf Karten bei einer Inhaltsbreite von 700px. Jede beginnt bei 200px und kann wachsen oder schrumpfen. Drei Karten plus zwei Abstände benötigen 632px; vier plus drei Abstände benötigen 848px. Drei passen in die erste Zeile.

Die erste Zeile teilt 700px abzüglich 32px für Abstände auf: Jede Karte wird etwa 222,7px breit. Die verbleibenden zwei teilen sich 700px abzüglich eines Abstands von 16px: Jede wird 342px breit. Elemente in der zweiten Zeile übernehmen nicht die Breiten der ersten. Verwende Grid, wenn Spalten über Zeilen hinweg auf einer Linie stehen müssen.

flex-flow: row wrap ist eine Kurzschreibweise für Richtung und Zeilenumbruch. Ohne Umbruch hält Flexbox alle Elemente in einer Zeile und lässt sie schrumpfen, soweit ihre Größenbegrenzungen es erlauben.

Eine sinnvolle Lesereihenfolge erhalten

order hat den Standardwert 0. Niedrigere Werte erscheinen zuerst; order: -1 bringt ein Element vor gewöhnliche Elemente. Umgekehrte Richtungen und order ändern die Zeichenreihenfolge, während Screenreader und der normale Tastaturfokus weiterhin dem HTML folgen.

Halte wichtige Abfolgen in einer sinnvollen HTML-Reihenfolge. Eine visuelle Umordnung kann dazu führen, dass eine Person mit Tastatur auf dem Bildschirm hin- und herspringt. Sie kann gegen WCAG 1.3.2, Bedeutungsvolle Reihenfolge, oder 2.4.3, Fokus-Reihenfolge, verstoßen, wenn Bedeutung oder Bedienung beeinträchtigt werden.

Ein Element kann auch ein Container sein. Eine Karte in einer Flex-Zeile kann mit eigenem display: flex; flex-direction: column ihre Inhalte untereinander anordnen. Verwende inline-flex, wenn der äußere Container innerhalb einer Textzeile stehen soll, etwa bei einer Schaltfläche mit Symbol und Beschriftung.

Wichtige Erkenntnisse

  • Flexbox ändert das Layout direkter Kindelemente.
  • Die Richtung bestimmt die Hauptachse; die Querachse steht senkrecht dazu.
  • Umgebrochene Flex-Zeilen erhalten ihre Größen unabhängig voneinander.
  • Änderungen der visuellen Reihenfolge ändern weder die Lesereihenfolge noch die Fokusreihenfolge im HTML.
  • Ein Flex-Element kann ein eigenes Flex-Layout enthalten.

3.2 Wie Flex-Elemente wachsen und schrumpfen

Flexbox beginnt mit einer Größe für jedes Element und passt diese Größen dann an den Container an. Die drei Teile von flex steuern diese Anpassung: Wachstum, Schrumpfung und Basis, in dieser Reihenfolge.

Mit der Basis beginnen

flex-basis liefert die Ausgangsgröße entlang der Hauptachse. Bei auto wird in einer Zeile die Breite und in einer Spalte die Höhe des Elements genommen; ist auch diese Größe automatisch, bestimmt der Inhalt die Größe. Eine explizite Basis hat Vorrang vor der Breite, während Mindest- und Maximalgrößen das Endergebnis weiterhin begrenzen.

Ziehe alle Basisgrößen und Abstände von der Inhaltsgröße des Containers ab. Ein positives Ergebnis ist freier Platz zum Wachsen. Ein negatives Ergebnis ist Platz, den die Elemente abgeben müssen.

Positiven Platz aufteilen

Drei Elemente in einer 600px breiten Zeile haben Basisgrößen von je 100px und Wachstumsfaktoren 1, 1 und 2. Ohne Abstände beanspruchen die Basisgrößen 300px, sodass 300px bleiben. Vier Wachstumsanteile teilen diesen Rest in je 75px auf. Die endgültigen Größen sind 175px, 175px und 250px.

Füge nun gap: 20px hinzu. Zwei Abstände beanspruchen 40px, sodass nach Abzug der Basisgrößen 260px bleiben. Jeder Anteil beträgt 65px; die endgültigen Breiten werden 165px, 165px und 230px. Ein Faktor von 2 verdoppelt den hinzugefügten Platz, nicht die gesamte endgültige Breite.

Platz durch gewichtetes Schrumpfen abgeben

Zwei Elemente mit Basisgrößen von 300px und 400px belegen einen 500px breiten Container ohne Abstand. Sie müssen 200px abgeben. Haben beide flex-shrink: 1, betragen ihre Schrumpfgewichte 300 und 400: Jeder Faktor wird mit seiner Basisgröße multipliziert.

Das erste verliert etwa 85,7px und endet bei etwa 214,3px. Das zweite verliert etwa 114,3px und endet bei etwa 285,7px. Gleiche Schrumpffaktoren bedeuten keine gleichen Verluste in Pixeln. flex-shrink: 0 schützt die Basisgröße eines Elements, was für einen Avatar oder ein Logo nützlich ist.

Diese Berechnungen beschreiben Elemente ohne Innenabstände, Rahmen, Außenabstände oder Größenbegrenzungen, die das Ergebnis verändern. Prüfe diese Bedingungen, wenn ein tatsächliches Layout davon abweicht.

Gängige Werte der Kurzschreibweise lesen
DeklarationAusgeschriebener WertAusgangspunkt
flex: initial0 1 autoBreite oder Inhalt; kann schrumpfen
flex: auto1 1 autoBreite oder Inhalt; kann wachsen oder schrumpfen
flex: none0 0 autoBreite oder Inhalt; behält diese Größe
flex: 11 1 0%Basis null in einer Zeile mit bestimmter Breite

Zwei Elemente mit Inhaltsbreiten von 80px und 200px in einer 600px breiten Zeile werden mit flex: auto 240px und 360px breit: Beide erhalten die Hälfte des Rests von 320px. Mit flex: 1 und ohne begrenzende Mindestgrößen beginnen beide bei null und werden 300px breit.

Eine flexible Spalte schmal werden lassen

Das automatische Minimum eines Flex-Elements kann es so breit wie eine ununterbrochene URL oder Codezeile halten. Erlaube dem Element zu schrumpfen und kümmere dich um den Inhalt darin:

.sidebar { flex: 0 0 240px; }
.main { flex: 1; min-width: 0; }
.main pre { overflow-x: auto; }

Die Seitenleiste bleibt 240px breit. Der Hauptbereich nimmt den Rest ein. Der Code scrollt innerhalb des Hauptbereichs, statt die ganze Seite breiter zu machen. Für gewöhnlichen langen Text erlaubt overflow-wrap: anywhere Umbrüche. Ein Minimum von null stellt Platz bereit; es lässt den Inhalt nicht selbst umbrechen oder scrollen.

Wichtige Erkenntnisse

  • Die Reihenfolge in der Kurzschreibweise ist Wachstum, Schrumpfung, Basis.
  • Wachstumsfaktoren teilen den hinzugefügten Platz auf, nicht die endgültigen Breiten.
  • Die Schrumpfverluste hängen vom jeweiligen Faktor multipliziert mit seiner Basisgröße ab.
  • Eine Basis mit einem anderen Wert als auto hat Vorrang vor der Breite.
  • flex: 1 und flex: auto verwenden unterschiedliche Ausgangsgrößen.
  • min-width: 0 erlaubt das Schrumpfen; der innere Inhalt benötigt weiterhin einen geeigneten Umgang mit Überlauf.

3.3 Abstände und Ausrichtung in Flexbox

Die Ausrichtung beginnt nach der Größenfestlegung. Bestimme die Hauptachse, die Querachse und den jeweils verbleibenden Platz. Eine Eigenschaft kann gültig sein und dennoch keinen sichtbaren Unterschied machen, wenn kein Platz zum Verteilen übrig ist.

Platz auf der Hauptachse aufteilen

justify-content positioniert die Gruppe entlang der Hauptachse. Bei drei 100px breiten Elementen in einer 600px breiten Zeile ohne Abstände bleiben 300px:

WertErgebnis
center150px vor und nach der Gruppe
space-between150px zwischen Nachbarn; nichts an den Enden
space-around50px an jedem äußeren Ende; 100px zwischen Nachbarn
space-evenlyVier gleiche Abstände von 75px

flex-start ordnet Elemente dicht am Anfang der Hauptachse an; flex-end dicht an ihrem Ende. start und end folgen dagegen der Schreibrichtung. In einem deutschen row-reverse ordnet flex-start die Elemente am rechten Rand an, start dagegen am linken.

Wenn Elemente mit flex: 1 den gesamten Platz der Zeile beanspruchen, bleibt für justify-content nichts zum Verteilen. Weniger Wachstum oder der Verzicht darauf ändert diese Situation.

Innerhalb jeder Zeile ausrichten

align-items positioniert Elemente auf der Querachse innerhalb ihrer Zeile. Der übliche Standardwert stretch lässt Elemente mit automatischer Höhe in einer Zeile die Zeilenhöhe ausfüllen. Ein Element mit festgelegter Höhe wird nicht auf diese Weise gestreckt. Verwende center, start oder end für andere Positionen oder baseline, um Text unterschiedlicher Größe an seiner Grundlinie auszurichten.

align-self überschreibt diese Wahl für ein einzelnes Element. Flexbox kennt kein justify-self: Die Elemente teilen sich die Hauptachse als Gruppe. Auch justify-items richtet Flex-Elemente nicht aus.

Um ein einzelnes Kindelement in beide Richtungen zu zentrieren, setze justify-content: center; align-items: center auf seinem Flex-Elternelement. Ein höheres Elternelement, etwa eines mit min-height: 100vh, lässt Raum, damit die vertikale Zentrierung sichtbar wird. Füllt das einzige Element die Quergröße der Zeile bereits aus, bewirkt die Zentrierung dort keine Bewegung.

Gruppen mit automatischen Außenabständen trennen
nav {
  display: flex;
  align-items: center;
  gap: 16px;
}
.logo {
  margin-inline-end: auto;
}

Bei horizontalem deutschem Text bleibt das Logo links, während die Links nach rechts rücken. Sein automatischer Außenabstand am Ende nimmt den verbleibenden Platz auf. Ein automatischer Außenabstand am Anfang eines Elements schiebt dagegen dieses und die folgenden Elemente zum Ende hin. Logische Außenabstände passen sich an, wenn sich die Schreibrichtung ändert.

Ein einzelnes Element mit margin: auto kann auf beiden Achsen zentriert werden. Ist ein Element zu groß, verhindern automatische Außenabstände, dass sein Überlauf jenseits der nicht erreichbaren Anfangskante liegt, wie es bei gewöhnlicher Zentrierung geschehen kann.

Zeilen von Elementen unterscheiden

align-content verschiebt in einem umbruchfähigen Container mit zusätzlichem Platz die Zeilen als Gruppe auf der Querachse. Bei flex-wrap: nowrap hat die Eigenschaft keine Wirkung. Bei wrap kann sie eine Zeile auch dann positionieren, wenn die aktuellen Elemente in nur eine Zeile passen. align-items kümmert sich um die Elemente innerhalb jeder Zeile.

gap: 16px 24px legt einen Zeilenabstand von 16px und einen Spaltenabstand von 24px fest. Gap erzeugt Platz zwischen Elementen und Zeilen, niemals außen um den Container herum. Ergänze Innenabstand für äußeren Platz. Jeder durch Ausrichtung verteilte Platz kommt zum Abstand hinzu.

Wichtige Erkenntnisse

  • justify-content verteilt den verbleibenden Platz auf der Hauptachse.
  • flex-start folgt der Flex-Richtung; start folgt der Schreibrichtung.
  • align-items richtet Elemente innerhalb von Zeilen aus; align-content verteilt umgebrochene Zeilen.
  • Automatische Außenabstände nehmen freien Platz auf und können Gruppen trennen.
  • Gap erzeugt innere Abstände; Innenabstand erzeugt äußeren Platz.
  • Verwende align-self für die Ausrichtung eines einzelnen Elements auf der Querachse.
  • Flexbox unterstützt justify-self nicht für die Platzierung einzelner Elemente auf der Hauptachse.
4

Gemeinsame Rasterspuren mit Grid

Grid gibt mehreren Zeilen gemeinsame Spalten und lässt einzelne Boxen diese Rasterspuren überspannen oder überlappen. Definiere Größen, berechne Bruchteile und platziere Elemente anhand von Begrenzungen oder benannten Bereichen. Lass anschließend die automatische Platzierung eine wachsende Sammlung anordnen und vergleiche auto-fill mit auto-fit. Unterscheide zum Abschluss die Elementausrichtung innerhalb von Bereichen von der Ausrichtung der Rasterspuren innerhalb des gesamten Containers, damit jede Eigenschaft den gewünschten Teil verschiebt.

4.1 Rasterspuren und der Platz, den sie aufteilen

Grid definiert Zeilen und Spalten gemeinsam. Lege die Rasterspuren auf einem Container fest und lass dann seine direkten Kindelemente diese einnehmen. Anders als umgebrochene Flex-Zeilen teilen sich Grid-Zeilen dieselbe Spaltenstruktur.

Die Teile benennen

Eine Rasterspur ist eine Zeile oder Spalte zwischen zwei Rasterlinien. Eine Rasterzelle ist der Schnittpunkt einer Zeile und einer Spalte. Ein Rasterbereich ist ein Rechteck aus einer oder mehreren Zellen. Abstände trennen die Rasterspuren.

.dashboard {
  display: grid;
  grid-template-columns: 200px 1fr 2fr;
  gap: 20px;
}

grid-template-columns definiert die expliziten Spalten; grid-template-rows definiert die expliziten Zeilen. Ohne explizite Spalten hat ein Raster eine Spalte und seine Elemente stehen in Zeilen untereinander.

Einen fr-Anteil berechnen

Die fr-Einheit teilt den Platz auf, der nach festen Rasterspuren und Abständen übrig bleibt. In einem 900px breiten Container hat das Beispiel eine feste Spalte von 200px und zwei Abstände von je 20px. Ziehe diese zuerst ab: Es bleiben 660px. Die beiden flexiblen Spalten verlangen insgesamt drei Anteile, sodass ein Anteil 220px beträgt. Die Breiten sind 200px, 220px und 440px.

Die Bruchteile teilen den verbleibenden Platz für Rasterspuren auf, nicht die gesamten 900px. Eine 2fr-Rasterspur erhält den doppelten flexiblen Anteil einer 1fr-Rasterspur, wenn Mindestgrößen sie nicht begrenzen.

Rasterspuren wiederholen und begrenzen

repeat(4, 1fr) ist die Kurzschreibweise für vier gleich große flexible Rasterspuren. Auch ein Muster lässt sich wiederholen: repeat(2, 100px 1fr) erzeugt 100px 1fr 100px 1fr.

Rasterspurgrößen können auch Längen, Prozentangaben, auto, min-content und max-content verwenden. Die Inhaltsschlüsselwörter fordern Größen entsprechend dem intrinsischen Platzbedarf des Inhalts an.

minmax(150px, 1fr) gibt einer Rasterspur ein Minimum von 150px und ein flexibles Maximum. Verwende für automatisch erzeugte Zeilen grid-auto-rows: minmax(100px, auto), um ein Minimum von 100px zu erhalten und zugleich höherem Inhalt das Vergrößern einer Zeile zu erlauben.

Eine einfache 1fr-Rasterspur hat ein automatisches Minimum, wie minmax(auto, 1fr). Eine lange, nicht umbrechbare URL kann eine Spalte breiter als die übrigen machen. Verwende repeat(3, minmax(0, 1fr)), wenn die Spalten die verfügbare Breite gleichmäßig aufteilen müssen, und ermögliche Umbruch oder Scrollen für zu großen Inhalt darin.

Abstände innerhalb der verfügbaren Breite halten

gap: 16px 32px bedeutet 16px zwischen Zeilen und 32px zwischen Spalten. Es erzeugt keinen Innenabstand um das Raster.

Drei Spalten von 33.33% beanspruchen bereits fast den gesamten 900px breiten Container. Zwei Abstände von je 20px ragen dann um etwa 40px über seine Breite hinaus. Rasterspuren mit Bruchteilen berücksichtigen diese Abstände vor der Aufteilung des Platzes. Daher vermeidet repeat(3, 1fr) diesen Überlauf durch Prozentwerte plus Abstände, wenn die Mindestgrößen des Inhalts hineinpassen.

Zeilen auf Inhalt reagieren lassen

grid-template-rows: auto 1fr auto eignet sich für einen Kopfbereich, Hauptbereich und Fußbereich. Die äußeren Zeilen passen sich ihrem Inhalt an. Bei einer auszufüllenden Containerhöhe oder Mindesthöhe nimmt die mittlere Zeile die verbleibende Höhe ein. Halte Platz für wachsenden Inhalt frei; eine Mindesthöhe der Seite erlaubt einer längeren Seite zu wachsen.

Wichtige Erkenntnisse

  • Zeilen und Spalten sind durch Rasterlinien begrenzte Rasterspuren.
  • fr teilt den Platz nach Abzug fester Rasterspuren und Abstände auf.
  • repeat() kann eine Größe oder ein Rasterspurmuster wiederholen.
  • minmax() legt eine minimale und maximale Rasterspurgröße fest.
  • minmax(0, 1fr) entfernt das automatische Minimum einer flexiblen Rasterspur.
  • Rasterspuren mit Prozentangaben können überlaufen, wenn Abstände hinzukommen.

4.2 Elemente an Linien und in benannten Bereichen platzieren

Die Grid-Platzierung beschreibt die Begrenzungen eines Elements. Zähle die Linien um die Spalten und Zeilen oder benenne einen rechteckigen Bereich und platziere das Element darin. Beide Methoden ordnen Boxen an, ohne ihre Reihenfolge im HTML zu ändern.

Begrenzungen statt Spalten zählen

Ein Raster mit drei Spalten hat vier Spaltenlinien. Bei horizontalem deutschem Text liegt Spaltenlinie 1 links und Zeilenlinie 1 oben. Negative Zahlen zählen vom Ende des expliziten Rasters zurück: -1 ist seine letzte Linie.

DeklarationPlatzierung
grid-column: 1 / 3Umfasst die ersten beiden Spalten
grid-column: 1 / -1Überspannt die volle Breite des expliziten Rasters
grid-column: 2 / span 2Beginnt an Linie 2 und umfasst zwei Spalten
grid-column: span 2Umfasst zwei Spalten an einer automatischen Position

Um drei Spalten ab Linie 1 zu umfassen, muss die Platzierung an Linie 4 enden. Ein Ende an Linie 3 umfasst nur zwei Rasterspuren.

Platziere auf einer Übersichtsseite mit vier Spalten und drei Zeilen ein Diagramm mit grid-column: 1 / 4; grid-row: 1 / 3. Es belegt drei Spalten und zwei Zeilen: sechs Zellen. Ein Statistikbereich bei grid-column: 4; grid-row: 1 / 3 belegt daneben die letzte Spalte. Eine Tabelle bei grid-column: 1 / -1; grid-row: 3 füllt die dritte Zeile.

Die Seite mit Bereichsnamen zeichnen
.page {
  display: grid;
  grid-template-columns: 220px minmax(0, 1fr);
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "nav    main"
    "footer footer";
}
header { grid-area: header; }
nav    { grid-area: nav; }
main   { grid-area: main; }
footer { grid-area: footer; }

Jede Zeichenkette beschreibt eine Zeile und jedes Wort eine Zelle. Durch Wiederholen von header über die erste Zeile erstreckt sich der Kopfbereich über beide Spalten. Ein Punkt kennzeichnet eine leere Zelle. Jede Zeile muss dieselbe Anzahl von Zellen enthalten und jeder wiederholte Name muss ein Rechteck bilden. Ein L-förmiger benannter Bereich macht die gesamte grid-template-areas-Deklaration ungültig.

Ein Bereich namens main erzeugt auch Linien mit den Namen main-start und main-end. Du kannst diese Namen für die Begrenzungen eines anderen Elements verwenden. Definiere eigene Liniennamen in eckigen Klammern in der Rasterspurliste, etwa [content-start] 600px [content-end].

Innerhalb eines Rasterbereichs überlappen

Ein Bild und eine Abbildungsbeschriftung können beide grid-area: 1 / 1 verwenden. Sie teilen sich die erste Zelle; die später im HTML stehende Beschriftung wird über dem Bild gezeichnet. align-self: end verschiebt die Beschriftung an den unteren Rand dieses Bereichs. Grid-Elemente nehmen z-index an, ohne eine nicht statische Position zu benötigen. So kannst du ihre Ebenenreihenfolge ausdrücklich ändern.

Die Lesereihenfolge erhalten

Die manuelle Platzierung beeinflusst das Aussehen, nicht die HTML-Reihenfolge, der Screenreader und Tastaturfokus folgen. Halte Anweisungen, Überschriften und Links in einer sinnvollen Quelltextreihenfolge. Ein Layout kann sinnvoll aussehen, während die Tabulatornavigation zwischen weit entfernten Zellen springt. Das kann gegen WCAG 1.3.2 oder 2.4.3 verstoßen, wenn Bedeutung oder Bedienung darunter leiden.

Wichtige Erkenntnisse

  • Die Platzierung nutzt Rasterlinien; drei Rasterspuren haben vier Begrenzungen.
  • -1 bezeichnet die letzte Linie des expliziten Rasters.
  • Jeder benannte Bereich muss rechteckig sein und alle Vorlagenzeilen benötigen dieselbe Anzahl von Zellen.
  • Elemente können in einem Bereich überlappen und z-index ohne Positionierung nutzen.
  • Die Grid-Platzierung ändert weder Lese- noch Fokusreihenfolge.

4.3 Automatische Raster, die sich an ihren Inhalt anpassen

Eine Produktliste kann von wenigen zu vielen Karten wachsen, ohne ihr CSS zu ändern. Definiere die Spalten, lass die automatische Platzierung Zeilen erzeugen und entscheide, ob ungenutzte Spalten ihren Platz behalten sollen.

Elemente die nächste Zelle finden lassen

Der Standardwert grid-auto-flow: row platziert nicht positionierte Elemente in Quelltextreihenfolge, zunächst quer über eine Zeile und dann in der nächsten darunter. Belegte Zellen werden übersprungen. Zusätzliche Rasterspuren bilden das implizite Raster.

.products {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: minmax(150px, auto);
}

Sieben Elemente erzeugen drei Zeilen. Die letzte Zeile enthält ein Element. Jede Zeile ist mindestens 150px hoch und kann mit ihrem Inhalt wachsen. Explizite Rasterspuren stammen aus der Vorlage; implizite Rasterspuren werden hinzugefügt, wenn die Platzierung sie benötigt.

Negative Liniennummern zählen nur innerhalb des expliziten Rasters. Definierst du Spalten, aber keine Zeilen, kann grid-row: 1 / -1 nicht jede automatisch erzeugte Zeile bezeichnen. Definiere explizite Zeilen, wenn ein Element ihre gesamte Höhe überspannen muss.

grid-auto-flow: column füllt Spalten und erzeugt zusätzliche Spalten, deren Größe grid-auto-columns festlegt. Ergänzt du dense, können spätere kleinere Elemente Lücken füllen, die größere Spannweiten hinterlassen. Das kann die visuelle Reihenfolge ändern. Vermeide es daher bei geordneten Anweisungen oder anderen Inhalten, deren Reihenfolge wichtig ist.

Spalten anhand eines Minimums zählen
.products {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 16px;
}

Bei einer Inhaltsbreite von 1000px benötigen vier 200px breite Spalten plus drei Abstände von je 16px insgesamt 848px. Fünf Spalten plus vier Abstände benötigen 1064px, also passen nur vier hinein. Ihre flexiblen endgültigen Breiten betragen 238px: Ziehe 48px für Abstände ab und dividiere die verbleibenden 952px durch vier.

Bei 500px benötigen zwei Spalten in Mindestbreite plus ein Abstand 416px; drei benötigen 632px. Zwei passen hinein und werden jeweils 242px breit. Die Anzahl der Spalten ändert sich ohne Breakpoint mit dem verfügbaren Platz.

Entscheiden, was mit ungenutzten Spalten geschieht

Bei genügend Elementen sehen auto-fill und auto-fit gleich aus. Bei nur drei Elementen in diesem 1000px breiten Raster behält auto-fill eine vierte leere Spalte bei, sodass jede belegte Spalte 238px breit bleibt. auto-fit lässt diese leere Rasterspur und ihren Abstand zusammenfallen. Die drei belegten Spalten teilen sich dann 968px und werden jeweils etwa 322,7px breit.

Eine Spalte mit einem Element an beliebiger Stelle gilt als belegt, auch wenn eine Zelle in ihrer letzten Zeile leer ist. Auto-fit lässt leere Rasterspuren zusammenfallen, nicht jede leere Zelle.

Den schmalsten Container schützen

Die automatische Wiederholung benötigt eine bestimmte minimale oder maximale Rasterspurgröße. repeat(auto-fill, 1fr) ist ungültig. Ein festes Minimum von 400px kann außerdem in einem 320px breiten Container überlaufen. Verwende:

grid-template-columns:
  repeat(auto-fit, minmax(min(100%, 400px), 1fr));

min(100%, 400px) wählt das kleinere Minimum, sodass ein schmaler Container eine Rasterspur aufnehmen kann, ohne auf 400px gezwungen zu werden. Kümmere dich weiterhin um zu große Texte oder Bilder innerhalb der Karten.

Wichtige Erkenntnisse

  • Die automatische Platzierung füllt verfügbare Zellen und erzeugt bei Bedarf implizite Rasterspuren.
  • grid-auto-rows legt die Größe automatisch erzeugter Zeilen fest.
  • Auto-fill behält leere Rasterspuren bei; auto-fit lässt sie zusammenfallen.
  • Bei der Anzahl der Spalten müssen die Abstände zwischen ihnen berücksichtigt werden.
  • Verwende für die automatische Wiederholung ein bestimmtes Minimum oder Maximum.
  • min(100%, …) hält das Minimum einer Rasterspur innerhalb eines schmalen Containers.
  • Dichte Platzierung kann die visuelle Reihenfolge ändern.

4.4 Boxen innerhalb von Bereichen oder Rasterspuren innerhalb eines Containers ausrichten

Die Grid-Ausrichtung wirkt auf zwei verschiedenen Ebenen. Du kannst ein Element innerhalb seines Bereichs oder alle Rasterspuren zusammen innerhalb des Containers verschieben. Bestimme zuerst, welchen Platz du verteilen möchtest.

Elemente innerhalb ihrer Bereiche ausrichten

Bei horizontalem deutschem Text wirken justify--Eigenschaften auf der horizontalen Inline-Achse. align--Eigenschaften wirken auf der vertikalen Blockachse. Grid unterstützt die Elementausrichtung auf beiden Achsen.

Auf dem Container festlegenAuf einem Element überschreibenWirkung
justify-itemsjustify-selfInline-Position innerhalb des Bereichs
align-itemsalign-selfBlockposition innerhalb des Bereichs

Zu den Werten gehören start, end, center und stretch. align-items: baseline richtet die Grundlinien von Text aus. Die meisten automatisch dimensionierten Elemente werden standardmäßig gestreckt. Ein Bild mit eigenem Seitenverhältnis beginnt normalerweise an der Anfangskante des Bereichs, statt in beide Richtungen gestreckt zu werden.

Bei einer Kartenreihe lässt die Streckung jede Karte die Zeilenhöhe ausfüllen. Wechsle zu align-items: start und jede Karte behält ihre Inhaltshöhe; ihre unteren Kanten können sich unterscheiden. align-self: end auf einer Abbildungsbeschriftung platziert sie am unteren Rand ihres Rasterbereichs.

Eine Box in beide Richtungen zentrieren
.hero {
  display: grid;
  place-items: center;
  min-height: 60vh;
}

place-items kombiniert align-items gefolgt von justify-items. Bei einem Wert gilt dieser für beide. Die Mindesthöhe schafft vertikalen Platz um ein kurzes Element. place-self ist die entsprechende Kurzschreibweise auf einem einzelnen Element.

Das Element bleibt eine Box mit Text darin. Um die Wörter innerhalb dieser Box zu zentrieren, setze text-align: center auf dem Element. Wenn du eine Box in die Mitte einer Zelle verschiebst, ändert sich die Ausrichtung ihres Textes nicht.

Rasterspuren als Gruppe verschieben

justify-content positioniert alle Spalten zusammen entlang der Inline-Achse. align-content positioniert die Zeilen entlang der Blockachse. Damit ihre Wirkung sichtbar wird, benötigen diese Eigenschaften zusätzlichen Platz außerhalb der Rasterspuren.

Bei drei festen 200px breiten Spalten in einem 900px breiten Container ohne Abstände bleiben 300px. justify-content: center lässt 150px vor der ersten und nach der letzten Spalte. justify-content: space-between setzt die äußeren Spalten an die Containerränder und verteilt 150px zwischen benachbarten Spalten. Die Elemente bleiben beim Verschieben der Rasterspuren innerhalb ihrer eigenen Rasterspuren.

Verwenden die Spalten fr und füllen die gesamte verfügbare Breite, bleibt horizontal nichts für justify-content zum Verteilen. Mit justify-items: center kannst du weiterhin ein schmales Kindelement sichtbar innerhalb seiner breiten Rasterspur zentrieren. Die erste Eigenschaft positioniert Rasterspuren, die zweite Elemente.

Wichtige Erkenntnisse

  • justify- folgt der Inline-Achse; align- folgt der Blockachse.
  • Die Elementausrichtung verschiebt Boxen innerhalb ihrer Bereiche.
  • Die Inhaltsausrichtung verschiebt Rasterspuren innerhalb des Containers.
  • place-items kombiniert die beiden Eigenschaften zur Elementausrichtung.
  • Verwende text-align, um Text innerhalb eines Elements auszurichten.
5

Layouts aus der Praxis erstellen und Fehler beheben

Webseiten aus der Praxis kombinieren mehrere Layouts: Ein Seitenraster kann eine flexible Werkzeugleiste, Karten und eine positionierte Kennzeichnung enthalten. Wähle das Verfahren, das zur jeweiligen Beziehung passt, und erstelle dann Muster, die auch bei wachsendem Text oder wenig Platz funktionieren. Arbeite Inhaltsspalten, Fußbereiche, Seitenleisten und Formularsteuerelemente durch, bevor du mit Entwicklerwerkzeugen inaktive Eigenschaften und Überlauf aufspürst. Längere Texte sowie Prüfungen mit Zoom und Tastatur decken Probleme auf, die Beispielinhalte verbergen können.

5.1 Wähle das Verfahren passend zur benötigten Beziehung

Eine Seite kann mehrere Layoutverfahren gleichzeitig nutzen. Wähle jedes Verfahren passend zur Beziehung zwischen den Boxen im jeweiligen Seitenteil: eine Textfolge, eine flexible Gruppe, gemeinsame Spalten oder eine überlappende Ebene.

Vom Inhalt ausgehen

Der normale Dokumentfluss verarbeitet bereits Artikel, Überschriften und Absätze. Er bricht Text um und verschiebt spätere Blöcke nach unten, wenn früherer Inhalt wächst. Ergänze weitere Strukturen, wenn die Gestaltung eine andere Beziehung verlangt.

BedarfGeeignetes VerfahrenGrund
Eine Zeile oder Spalte mit SteuerelementenFlexboxTeilt Platz zwischen Elementen auf, deren Größe sich nach ihrem Inhalt richtet
Über mehrere Zeilen ausgerichtete SpaltenGridDefiniert gemeinsame Zeilen- und Spaltenspuren
Eine Kennzeichnung über einem BildAbsolute PositionierungPlatziert eine Ebene relativ zu einem ausgewählten Container
Ein auf der ganzen Seite sichtbares SteuerelementFixierte PositionierungHält es an den Viewport gebunden
Eine innerhalb ihres Abschnitts sichtbare ÜberschriftHaftende PositionierungBehält den Platz im Dokumentfluss und stoppt am Abschnittsende
Textfluss um ein FotoFloatVerkürzt benachbarte Textzeilen um das Bild herum
Textfluss in ZeitungsspaltenMehrspaltenlayoutSetzt den Text von einer Spalte in der nächsten fort

Flexbox ist eindimensional: Es teilt Platz entlang einer Zeile oder Spalte auf, wobei jede umgebrochene Zeile unabhängig ist. Grid ist zweidimensional: Es definiert Spalten und Zeilen gemeinsam. Die Wahl betrifft die Anforderungen an das Layout und verbietet nicht, eines der beiden Werkzeuge für eine einfache Zeile zu nutzen.

Eine umgebrochene Zeile mit gemeinsamen Spalten vergleichen

Sieben Karten belegen eine Inhaltsbreite von 1000px mit Abständen von 16px. Gib in Flexbox jeder Karte flex: 1 1 200px und erlaube den Umbruch. Vier Karten passen in die erste Zeile und wachsen auf je 238px. Die drei Karten in der zweiten Zeile wachsen auf je etwa 322,7px. Jede Zeile verteilt ihren eigenen freien Platz.

Verwende nun repeat(auto-fill, minmax(200px, 1fr)) in Grid. Vier Spalten passen hinein. Alle sieben Karten nutzen dieselben 238px breiten Spalten; in der letzten Zeile bleibt eine Zelle leer. Grid erhält die Ausrichtung über die Zeilen hinweg.

Verwende die Flex-Version, wenn breitere Elemente in der letzten Zeile zur Gestaltung passen. Verwende die Grid-Version, wenn eine einheitliche Spaltenstruktur wichtig ist.

Verfahren auf verschiedenen Ebenen kombinieren

Eine Seite kann Grid für eine Seitenleiste und den Hauptbereich, Flexbox für die Werkzeugleiste des Hauptbereichs und eine absolute Kennzeichnung innerhalb einer Karte nutzen. Eine Karte kann außen ein Grid-Element und innen ein Flex-Container sein. Lege die äußere Beziehung auf ihrem Elternelement und die innere Anordnung auf der Karte selbst fest.

Für eine lange Textliste erzeugt columns: 3 oder column-width: 250px einen mehrspaltigen Textfluss. Der Text verläuft eine Spalte hinunter und wird dann in der nächsten fortgesetzt; es ist kein Raster unabhängiger Karten. Prüfe, ob dieser Leseweg zum Inhalt passt.

Ältere Layouts sorgfältig lesen

Gefloatete Spalten, Inline-Block-Raster und für Seitenlayouts verwendete HTML-Tabellen kommen weiterhin in älterem Code vor. Ihre Regeln für Abstände und das Einschließen von Elementen unterscheiden sich von denen in Flexbox und Grid. Verwende beim Erstellen neuer Seitenstrukturen moderne Layoutwerkzeuge. Nutze <table> für Daten, deren Zeilen und Spalten tabellarische Beziehungen ausdrücken.

Wichtige Erkenntnisse

  • Wähle Grid für gemeinsame Zeilen und Spalten und Flexbox für eine unabhängige Zeile oder Spalte.
  • Verwende Floats, wenn Text um ein Bild fließen soll.
  • Verwende Positionierung für Überlappungen oder scrollabhängige Platzierung.
  • Ein Mehrspaltenlayout setzt Text von einer Spalte in der nächsten fort.
  • Eine Box kann Element eines Layouts und Container für ein anderes sein.

5.2 Seitenmuster, die mit dem Inhalt wachsen

Ein brauchbares Seitenlayout hat eine gut lesbare Inhaltsbreite, Platz an den Rändern und Raum für längeren Inhalt. Erstelle seine Hauptbereiche im Dokumentfluss, damit ein wachsender Artikel den Fußbereich auf natürliche Weise nach unten verschiebt.

Eine Inhaltsspalte zentrieren
.container {
  max-width: 1100px;
  margin-inline: auto;
  padding-inline: 16px;
}

Die maximale Breite begrenzt das Wachstum auf breiten Bildschirmen. Automatische Inline-Außenabstände teilen den verbleibenden Platz auf beide Seiten auf. Der Innenabstand hält Text auf schmalen Bildschirmen von den Rändern fern. Für Fließtext ergibt max-width: 65ch eine ungefähre Zeilenlänge von 65 Zeichen; ein ch ist die Breite der Ziffer 0 in der aktuellen Schriftart. Eine Zeilenlänge von etwa 45–75 Zeichen ist zum Lesen gut geeignet, obwohl die tatsächlichen Buchstaben unterschiedlich breit sind.

Seitenbereiche auf einem Raster anordnen
.page {
  display: grid;
  grid-template-columns: 240px minmax(0, 1fr);
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header  header"
    "sidebar main"
    "footer  footer";
}
header { grid-area: header; }
aside  { grid-area: sidebar; }
main   { grid-area: main; }
footer { grid-area: footer; }

Kopf- und Fußbereich erstrecken sich über beide Spalten. Die Seitenleiste behält 240px und der Hauptbereich erhält den Rest. Das Minimum von null auf der flexiblen Rasterspur verhindert, dass breiter Inhalt die Rasterspur über ihren verfügbaren Anteil hinaus vergrößert. Ermögliche für diesen Inhalt Umbruch oder Scrollen innerhalb des Hauptbereichs.

Das dreispaltige Muster, häufig Holy-Grail-Layout genannt, verwendet 200px 1fr 200px und die Bereiche "nav main aside" in der mittleren Zeile; Kopf- und Fußbereich erstrecken sich über alle drei Spalten. Feste Seitenspalten benötigen weiterhin genügend verfügbare Breite. Teste das Layout bei geringer Breite.

Den Fußbereich einer kurzen Seite unten halten
body {
  margin: 0;
  min-height: 100dvh;
  display: grid;
  grid-template-rows: auto 1fr auto;
}

Mit Kopfbereich, Hauptbereich und Fußbereich als direkten Kindelementen füllt die mittlere Zeile die ungenutzte Höhe. Der Fußbereich einer kurzen Seite reicht bis zum unteren Fensterrand; bei einer langen Seite folgt er dem Inhalt. Dieses Muster heißt Sticky Footer, aber der Fußbereich benötigt kein position: sticky.

Die herkömmliche Viewport-Einheit ist vh. Auf Smartphones kann 100vh hinter sichtbare Browsersteuerelemente reichen. Die dynamische Viewport-Höhe dvh folgt der sichtbaren Höhe, wenn sich diese Steuerelemente ändern; alle wichtigen Browser unterstützen sie seit 2022. Verwende min-height, damit längerer Inhalt die Seite vergrößern kann. Bei fester height kann Inhalt über das Folgende hinauslaufen.

Eine Flex-Alternative verwendet einen body als Spalte mit min-height: 100dvh und anschließend main { flex: 1; }. Verwende für eine Zeile mit Seitenleiste .sidebar { flex: 0 0 240px; } und .main { flex: 1; min-width: 0; }.

Eine Seitenleiste haften und ein Bild über die Breite reichen lassen

Eine Grid-Seitenleiste kann position: sticky; top: 16px; align-self: start verwenden. Indem sie ihre eigene Inhaltshöhe behält, bleibt ihr Raum, sich innerhalb ihrer Zeile zu bewegen.

Definiere für Full-Bleed-Inhalt in einem Artikel die Spalten als 1fr min(65ch, 100% - 32px) 1fr. Setze gewöhnliche Kindelemente in Spalte 2 und ein breites Bild auf grid-column: 1 / -1. Die mittlere Rasterspur bleibt gut lesbar, während das Bild die volle Containerbreite überspannt.

Wichtige Erkenntnisse

  • Automatische Inline-Außenabstände zentrieren eine Inhaltsspalte mit begrenzter Breite.
  • Verwende min-height für bildschirmhohe Seiten, die wachsen müssen.
  • Ein Sticky-Footer-Muster belässt den Fußbereich im normalen Dokumentfluss.
  • dvh folgt der sich ändernden sichtbaren Viewport-Höhe.
  • Ein Minimum von null für die flexible Rasterspur hilft, Seitenüberlauf zu verhindern.
  • Eine haftende Grid-Seitenleiste benötigt Bewegungsraum; align-self: start vermeidet Streckung.
  • Ein Full-Bleed-Element reicht über die Textspalte des Artikels hinaus.

5.3 Wiederverwendbare Layouts für Teile der Benutzeroberfläche

Kleine Teile der Benutzeroberfläche kombinieren dieselben wenigen Beziehungen: Ein Bild behält seine Größe, Text füllt den Rest, zusammengehörige Steuerelemente teilen sich eine Zeile oder mehrere Karten richten ihre inneren Teile aneinander aus. Gib jedem Container das Layout, das seine Aufgabe ausdrückt.

Die passende Art der Zentrierung wählen
Zu zentrierender InhaltRegel
Eine Box auf beiden AchsenElternelement: display: grid; place-items: center
Ein Block mit begrenzter BreiteBlock: margin-inline: auto
Text oder Inline-InhaltElternelement: text-align: center

Auch Flexbox kann ein Kindelement mit justify-content: center; align-items: center zentrieren. Achte darauf, dass der Container auf der jeweiligen Achse freien Platz hat.

Eine Navigationszeile und eine Medienzeile
nav { display: flex; align-items: center; gap: 16px; }
.logo { margin-inline-end: auto; }
.media { display: flex; align-items: flex-start; gap: 16px; }
.media img { flex: none; width: 64px; }
.media-body { flex: 1; min-width: 0; }

Im Deutschen bleibt das Logo links und die Links stehen rechts zusammen. Hat die Navigation genau zwei Kindelemente, ein Logo und eine Linkliste, kann justify-content: space-between sie trennen; die Liste benötigt ein eigenes Flex-Layout, um ihre Links anzuordnen.

In der Medienzeile behält das Bild seine Breite. Der Text erhält den Rest und kann schrumpfen. Die Ausrichtung am Anfang der Querachse verhindert, dass ein Bild mit automatischer Höhe auf die Höhe eines langen Textblocks gestreckt wird. Das eignet sich für einen Kommentar, ein Profil oder einen Produkteintrag.

Karten mit ausgerichteten Schaltflächen
.cards {
  display: grid;
  grid-template-columns:
    repeat(auto-fill, minmax(min(100%, 240px), 1fr));
  gap: 24px;
}
.card { display: flex; flex-direction: column; }
.card .button { margin-top: auto; }

Das übergeordnete Raster streckt die Karten jeder Zeile auf dieselbe Höhe. Innerhalb jeder Karte nimmt der automatische obere Außenabstand den ungenutzten vertikalen Platz vor der Schaltfläche ein und platziert sie unten. Titel können weiterhin unterschiedlich hoch sein.

Um Titel, Texte und Fußbereiche über Karten hinweg auszurichten, verwende Subgrid. Mache jede Karte zu einem Grid-Element, das drei übergeordnete Zeilen überspannt, und setze dann display: grid; grid-template-rows: subgrid. Jede Karte übernimmt diese übergeordneten Zeilen für ihre drei Teile. Subgrid funktioniert seit September 2023 in allen wichtigen Browsern.

Überlagerungen, Formulare und Eingabegruppen

Für Text über einem Bild mache das umschließende Element zu einem Raster und setze beide Kindelemente auf grid-area: 1 / 1. Eine später stehende Abbildungsbeschriftung wird über dem Bild gezeichnet. Eine weitere Möglichkeit ist ein relatives umschließendes Element mit einer absoluten Beschriftungsebene, die inset: 0 verwendet.

Ein Formular mit abwechselnden Beschriftungen und Feldern kann grid-template-columns: max-content 1fr; gap: 12px 16px; align-items: center verwenden. Die breiteste Beschriftung legt eine gemeinsame Beschriftungsspalte fest. Die Felder stehen ausgerichtet in der zweiten Spalte; getrennte Flex-Zeilen können diese Beschriftungsbreite nicht automatisch teilen.

Eine Suchgruppe verwendet display: flex; gap: 8px mit input { flex: 1; min-width: 0; } und button { flex: none; }. Das Eingabefeld kann schrumpfen, während die Schaltfläche ihre natürliche Breite behält. Verwende für Schlagwörter oder Steuerelemente einer Werkzeugleiste, die bei ihrer natürlichen Breite umbrechen sollen, display: flex; flex-wrap: wrap; gap: 8px.

Wichtige Erkenntnisse

  • Zentriere eine Box, einen Block und Inline-Text jeweils mit der passenden Ausrichtung.
  • Verwende für eine Medienzeile ein Bild mit fester Größe und ein flexibles Textelement.
  • Flexbox in Spaltenrichtung und ein automatischer oberer Außenabstand richten Kartenschaltflächen aus.
  • Subgrid stellt verschachtelten Kartenteilen gemeinsame übergeordnete Rasterspuren zur Verfügung.
  • Grid kann Beschriftungen über Formularzeilen hinweg ausrichten.
  • Ein flexibles Eingabefeld benötigt häufig min-width: 0.

5.4 Finde die Box, die den Layoutfehler verursacht

Ein Layoutfehler lässt sich leichter beheben, wenn du die tatsächlichen Boxen des Browsers untersuchst. Beginne mit dem Element, das sich verschoben hat oder überläuft, und prüfe dann das Layout, an dem es teilnimmt, bevor du Werte änderst.

In einer sinnvollen Reihenfolge untersuchen
  1. Finde das Element in den Entwicklerwerkzeugen.
  2. Untersuche das berechnete display seines Elternelements: Im normalen Dokumentfluss, in Flex und in Grid haben Eigenschaften unterschiedliche Aufgaben.
  3. Prüfe, ob deine Eigenschaft für dieses Element in diesem Layout gilt.
  4. Vergleiche berechnete Größen, Außenabstände und Position mit deinen erwarteten Werten.
  5. Schalte jeweils eine Deklaration um, um zu sehen, welche Bedingung das Problem verursacht.

Der Boxmodellbereich zeigt Inhalt, Innenabstand, Rahmen und Außenabstand. Grid-Überlagerungen zeigen Linien, Nummern, Rasterspuren und Abstände; Flex-Überlagerungen zeigen Elemente und den ihnen zugeteilten Platz. Prüfe damit, was der Browser erstellt hat, nicht nur, was das Stylesheet vorsieht.

Inaktive Eigenschaften prüfen

Versatzwerte bewirken bei einem statischen Element nichts. Breite und Höhe bewirken bei einem gewöhnlichen Inline-<span> nichts, bestimmen aber die Größe eines Inline-Bildes. z-index benötigt eine positionierte Box oder ein Flex-/Grid-Element. float hat keine Wirkung auf Flex- oder Grid-Elemente und justify-self kann ein Flex-Element nicht ausrichten.

Eine gültige Ausrichtungsdeklaration hat möglicherweise keine sichtbare Wirkung, weil Elemente bereits den gesamten Platz nutzen. Auch align-content hat auf einem nowrap-Flex-Container keine Wirkung. Haftende Positionierung benötigt einen Versatz und Platz zur Bewegung.

Horizontalen Überlauf aufspüren

Überlauf kann durch eine zu große Box entstehen oder durch eine kleinere Box, die von Außenabständen, Versatzwerten oder den Breiten benachbarter Elemente über einen Rand hinausgeschoben wird. Häufige Ursachen sind:

  • Eine feste Breite wie 1200px, die größer als der Viewport ist.
  • width: 100% plus Innenabstand bei Größenberechnung mit content-box.
  • width: 100vw, das die Breite einer sichtbaren vertikalen Bildlaufleiste einschließen kann.
  • Ein langes ununterbrochenes Wort, eine URL oder eine Codezeile.
  • Das automatische Minimum eines Flex-Elements oder einer 1fr-Rasterspur.
  • Ein Minimum für die automatische Wiederholung, das breiter als sein Container ist.

Füge vorübergehend * { outline: 1px solid red; } hinzu, um Kanten sichtbar zu machen. Konturen beanspruchen keinen Platz im Layout und zeigen Begrenzungen daher, ohne wie Rahmen die Boxgrößen zu ändern.

Einen breiten Codeblock untersuchen

Eine Flex-Seite hat eine 240px breite Seitenleiste und eine Hauptspalte mit einem 1400px breiten Codebeispiel. Die ganze Seite scrollt seitlich. Die Flex-Überlagerung zeigt den Hauptbereich breiter als seinen Anteil und seine berechnete Mindestbreite ist auto.

.main { min-width: 0; }
.main pre { overflow-x: auto; }

Die erste Regel lässt das Flex-Element schrumpfen. Die zweite hält den breiten Code durch lokales horizontales Scrollen zugänglich. Den gesamten Seitenüberlauf auszublenden, würde das Symptom verbergen, ohne den Code verfügbar zu machen.

Untersuche bei anderen Überraschungen zusammenfallende Außenabstände, einen fixierten Kopfbereich, der Inhalt verdeckt, ein absolutes Kindelement, dessen vorgesehenes Elternelement statisch ist, oder eine Ebene, die in einem durch Deckkraft oder Transformation erzeugten Stapelkontext eingeschlossen ist.

Echten Inhalt und wenig Platz testen

Ändere die Fenstergröße, verwende einen langen Namen oder eine lange URL und vergrößere den Text auf 200 %. Prüfe den Tastaturfokus in der Nähe fixierter Leisten. WCAG-2.2-Kriterium 1.4.4 verlangt Textvergrößerung auf 200 % ohne Verlust von Inhalt oder Funktion. Kriterium 1.4.10 verlangt grundsätzlich einen Umbruch bei 320 CSS-Pixeln ohne Scrollen in zwei Richtungen; für Inhalte, die ein zweidimensionales Layout benötigen, etwa eine Datentabelle, gibt es Ausnahmen. Teste mehr als den kurzen Beispieltext, mit dem die Seite zunächst korrekt aussah.

Wichtige Erkenntnisse

  • Prüfe das Layout des Elternelements und die berechneten Werte, bevor du Deklarationen änderst.
  • Verwende Überlagerungen und Konturen, um tatsächliche Boxbegrenzungen zu finden.
  • Prüfe, ob eine Eigenschaft gilt und ob freier Platz für ihre Wirkung vorhanden ist.
  • Kümmere dich sowohl um das Minimum eines flexiblen Elements als auch um seinen überlaufenden Inhalt.
  • Teste geringe Breiten, 200 % Textvergrößerung, längeren Text und Tastaturfokus.

CSS-Layout mit Flexbox und Grid: Beispiele

5 Interaktive Lektionen

1

Lies das natürliche Layout der Seite

13 Schritte
Verfolge die Boxen eines Artikels, ändere die Anzeige eines Links und lass Text um ein Foto fließen.
  1. 1
    EinführungBeginne mit einem gewöhnlichen Artikel

    Stell dir einen Artikel mit einer Überschrift, zwei Absätzen, einem Link und einem Porträt vor. Der Browser weiß bereits, wie er diese Elemente anordnet, bevor du Layout-CSS hinzufügst: Überschriften und Absätze sind Blockboxen, Links stehen inline im Text und display kann dieses Verhalten ändern.

    Du verfolgst die standardmäßigen Boxen, machst den Link zu einer größeren Klickfläche und platzierst dann das Porträt mit einem Float, sodass Text daneben fließt. Achte sowohl auf den Text als auch auf die Hintergründe der Elternelemente: Sie reagieren auf unterschiedliche Teile des Layouts.

  2. 2
    ErklärungVerfolge die Blockzeilen

    Überschrift und Absätze sind standardmäßig Blockboxen. Jeder beginnt eine neue Zeile und wächst in die Höhe, wenn sein Inhalt umbricht.

    Setze den ersten Absatz auf width: 260px. Er wird schmal, aber der nächste Absatz beginnt weiterhin darunter. Ein Block wird nicht inline, nur weil horizontal neben ihm Platz frei ist. Belasse die Breite automatisch, wenn er seine verfügbare Zeile ausfüllen soll.

  3. 3
    BeispielVerfolge den Link innerhalb eines Satzes

    In <p>Open the <a href="/notes">reading notes</a> before class.</p> ist der Link Teil der Textzeile. Er nimmt den Platz ein, den seine Wörter benötigen, und kann zusammen mit dem Satz umbrechen.

    Das Hinzufügen von width: 190px ändert die Größe dieses gewöhnlichen Inline-Links nicht. Vertikaler Innenabstand kann einen größeren Hintergrund zeichnen, ohne benachbarte Textzeilen weiter auseinanderzuschieben. Bei einem Inline-Bild ist es anders: Seine Breite und Höhe wirken.

  4. 4
    BeispielMiss einen zusammengefallenen Abstand

    Der Artikelabsatz hat einen unteren Außenabstand von 14px. Die folgende Überschrift hat einen oberen Außenabstand von 26px. Wenn sich diese positiven vertikalen Außenabstände im normalen Dokumentfluss berühren, entsteht durch ihr Zusammenfallen ein Abstand von 26px.

    Sie addieren sich nicht zu 40px. Wird das Elternelement später zu Flex oder Grid, bleiben die Außenabstände zwischen seinen Elementen getrennt, sodass dieselben Deklarationen mehr Platz ergeben können.

  5. 5
    HerausforderungSetze den Abstand in den Kopfbereich

    Ein Kopfbereich ohne Innenabstand enthält nur eine Überschrift mit oberem Außenabstand. Der Außenabstand fällt mit dem des Kopfbereichs zusammen und die Lücke erscheint über dessen Hintergrund. Wie kannst du stattdessen oben im Inneren Platz schaffen?

    ---reveal---

    Entferne den oberen Außenabstand der Überschrift und ergänze einen oberen Innenabstand am Kopfbereich. Innenabstand gehört in die Box des Kopfbereichs. Ein Rahmen oder flow-root würde das Zusammenfallen zwischen Eltern- und Kindelement ebenfalls verhindern, aber Innenabstand erzeugt den gewünschten Platz im Inneren direkt.

  6. 6
    ErklärungGib dem Link eine eigene dimensionierte Box

    Verwende display: inline-block auf dem Artikellink, wenn er eine Breite und eine höhere Klickfläche mit Innenabstand benötigt und zugleich in der Textzeile bleiben soll.

    .article-link {
      display: inline-block;
      padding: 10px 14px;
    }
    

    Die Box nimmt nun mit ihrer vollen vertikalen Größe am Layout teil. Display ändert ihr Layoutverhalten; sie bleibt ein HTML-Link. Leerraum zwischen benachbarten Inline-Blockboxen erscheint weiterhin als Leerzeichen im Text.

  7. 7
    KernaussageUnterscheide außen und innen

    Eine Box kann an einem Layout teilnehmen und in ihrem Inneren ein anderes ausführen. display: flex bedeutet außen Block, innen Flex. inline-flex behält dasselbe innere Flex-Layout bei, verwendet aber eine äußere Inline-Platzierung.

    Die Regel wirkt auf direkte Kindelemente. Eine Flex-Navigation macht ihre Liste zu einem Flex-Element; sie macht nicht automatisch jeden verschachtelten Link zu einem Element dieser äußeren Zeile. Gib der Liste ein eigenes Layout, wenn ihre Links eine eigene Zeile benötigen.

  8. 8
    HerausforderungReserviere Platz für eine Meldung

    Eine Meldung zum Lesestatus soll anfangs ausgeblendet sein, wobei ihr Platz reserviert bleibt, damit sich der Artikel beim Einblenden nicht verschiebt. Soll sie display: none oder visibility: hidden verwenden?

    ---reveal---

    Verwende visibility: hidden, um ihren Platz im Layout zu behalten. display: none entfernt ihre Box und die Lücke, sodass das Einblenden nachfolgenden Inhalt verschieben würde. Soll Text visuell ausgeblendet, aber für Screenreader verfügbar bleiben, erfüllt eine Klasse zum visuellen Ausblenden diesen anderen Zweck.

  9. 9
    BeispielLass das Porträt umfließen

    Setze das Porträt vor den Absatz und lass es umfließen:

    .portrait {
      float: left;
      width: 130px;
      margin: 0 18px 10px 0;
    }
    

    Die Textzeilen fließen mit einem horizontalen Abstand von 18px neben dem Foto. Sobald sie dessen unteren Außenabstand passiert haben, kehren sie zur vollen Breite zurück. Der Hintergrund des Absatzes kann sich hinter dem Float fortsetzen, obwohl der Text selbst daneben bleibt.

  10. 10
    BeispielSchließe die Höhe des Bildes ein

    Ist der Artikeltext sehr kurz, kann der Float unter dem Hintergrund seines Elternelements herausragen. Gefloatete Kindelemente liefern keine gewöhnliche Höhe im Dokumentfluss.

    Füge dem umschließenden Element display: flow-root hinzu. Sein unabhängiger Flussbereich schließt nun das Porträt ein, sodass Rahmen und Hintergrund des umschließenden Elements es umgeben. Dadurch werden auch die Außenabstände von Eltern- und Kindelement getrennt; Inhalte werden dabei nicht abgeschnitten und es entsteht kein scrollbarer Bereich.

  11. 11
    HerausforderungBeginne einen neuen Abschnitt unter dem Porträt

    Das Porträt reicht weiterhin unter den ersten Absatz des Artikels. Die nächste Abschnittsüberschrift muss darunter beginnen, während der Absatz es weiter umfließen darf. Welche Regel gehört auf die Überschrift?

    ---reveal---

    Verwende clear: left oder clear: both, wenn Floats auf beiden Seiten berücksichtigt werden sollen. Das verschiebt die Überschrift unter vorhergehende Floats. Das ist eine andere Aufgabe als die von flow-root, das ein Elternelement die Höhe seiner gefloateten Kindelemente einschließen lässt.

  12. 12
    HerausforderungEine Änderung am Elternelement hebt den Textfluss auf

    Du änderst das umschließende Element von Foto und Text auf display: flex. Sein gefloatetes Porträt bewirkt nicht mehr, dass Textzeilen unter dem Bild weiterfließen. Warum, und wie stellst du den gewünschten Artikelfluss wieder her?

    ---reveal---

    Das Porträt ist nun ein Flex-Element, sodass sein Float keine Wirkung hat. Der Absatz belegt ein eigenes Flex-Element. Setze dieses umschließende Element auf normalen Dokumentfluss zurück, belasse das Porträt als Float und verwende flow-root, wenn das umschließende Element das Bild einschließen soll.

  13. 13
    ZusammenfassungPrüfe das Elternelement, bevor du das Kindelement änderst

    Das Verhalten von Block und Inline erklärt das Ausgangslayout des Artikels. Display kann die äußere Teilnahme, das innere Layout oder die Existenz einer Box überhaupt ändern.

    Für Text um ein Porträt belasse den Text im gewöhnlichen Dokumentfluss mit einem Float, schließe den Float bei Bedarf ein und setze spätere Abschnitte, die darunter beginnen müssen, mit clear darunter. Ändert sich das Ergebnis unerwartet, prüfe neben den Regeln des Kindelements auch display auf dem Elternelement.

2

Platziere Kennzeichnungen und halte die Navigation sichtbar

14 Schritte
Erstelle eine lokale Überlagerung, vergleiche fixiertes und haftendes Verhalten und behebe anschließend ein verdecktes Menü.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungEntscheide, was sich zusammen bewegen soll
  2. 2
    ErklärungBehalte den ursprünglichen Platz bei oder entferne ihn
  3. 3
    BeispielMache die Karte zum Bezug der Kennzeichnung
  4. 4
    BeispielPlatziere die Kennzeichnung innerhalb der Ecke
  5. 5
    HerausforderungWähle den Bezug für Prozentangaben
  6. 6
    BeispielHefte die Hilfe an das Fenster
  7. 7
    BeispielHalte eine Abschnittsüberschrift in ihrem Abschnitt
  8. 8
    HerausforderungEine Überschrift hat keinen Bewegungsraum
  9. 9
    TippLass Platz unter einem fixierten Kopfbereich
  10. 10
    ErklärungVergleiche zuerst die äußeren Gruppen
  11. 11
    BeispielKorrigiere die Ebene des Vorfahrenelements
  12. 12
    HerausforderungBenötigt eine statische Grid-Beschriftung position?
  13. 13
    HerausforderungEine fixierte Werkzeugleiste liegt trotzdem hinten
  14. 14
    ZusammenfassungPrüfe Bezug, Platz im Dokumentfluss und Gruppe
3

Erstelle eine flexible Werkzeugleiste und Kartenreihe

17 Schritte
Verfolge die Richtung, berechne Wachstum und Schrumpfung und verwende Ausrichtung erst nach der Größenfestlegung.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungErstelle eine Zeile, die ihren Platz aufteilt
  2. 2
    ErklärungMache nur direkte Kindelemente zu Flex-Elementen
  3. 3
    ErklärungDrehe die Achsen mit der Richtung
  4. 4
    HerausforderungZentriere eine vertikale Gruppe
  5. 5
    BeispielBeginne die Wachstumsberechnung
  6. 6
    BeispielAddiere das Wachstum zu den Basisgrößen
  7. 7
    BeispielGewichte die Schrumpfung nach Basisgröße
  8. 8
    HerausforderungWähle gleiche Breiten oder erhalte Größenunterschiede
  9. 9
    TippHalte eine lange Codezeile lokal scrollbar
  10. 10
    BeispielLass Karten in unabhängige Zeilen umbrechen
  11. 11
    ErklärungVerteile nur den verbleibenden Platz
  12. 12
    BeispielRichte Text innerhalb der Zeile aus
  13. 13
    HerausforderungSchiebe eine Gruppe ans gegenüberliegende Ende
  14. 14
    KernaussageZeilen und Elemente werden unterschiedlich ausgerichtet
  15. 15
    TippHalte zu großen zentrierten Inhalt erreichbar
  16. 16
    HerausforderungEine zentrierte Zeile bewegt sich nicht
  17. 17
    ZusammenfassungLies Flexbox in drei Schritten
4

Erstelle eine Übersichtsseite und ein automatisches Kartenraster

18 Schritte
Berechne Rasterspuren, platziere einen Bereich, passe Spaltenzahlen an und wähle die richtige Ebene der Ausrichtung.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungGib mehreren Zeilen gemeinsame Begrenzungen
  2. 2
    ErklärungRasterspuren sind die Bereiche zwischen Linien
  3. 3
    BeispielZiehe feste Rasterspuren und Abstände ab
  4. 4
    BeispielWandle Anteile in Spaltenbreiten um
  5. 5
    HerausforderungProzentuale Spalten überschreiten die Zeile
  6. 6
    BeispielZähle die Endbegrenzung des Bereichs
  7. 7
    ErklärungVerwende Namen für Seitenbereiche
  8. 8
    HerausforderungEine Form, die Bereiche nicht ausdrücken können
  9. 9
    VerbindungTeile eine Zelle, um eine Bildebene zu erstellen
  10. 10
    ErklärungLass neue Zeilen entstehen
  11. 11
    BeispielFinde heraus, wie viele Spalten in Mindestbreite passen
  12. 12
    BeispielLass ungenutzte Rasterspuren mit auto-fit zusammenfallen
  13. 13
    HerausforderungHalte ein Minimum innerhalb einer schmalen Box
  14. 14
    ErklärungVerschiebe ein Element innerhalb seines Bereichs
  15. 15
    BeispielVerschiebe die Spalten als eine Gruppe
  16. 16
    HerausforderungWarum stehen die unteren Kartenränder nicht mehr auf einer Linie?
  17. 17
    HerausforderungEin Banner über die volle Breite oberhalb automatischer Karten
  18. 18
    ZusammenfassungTrenne Größenfestlegung, Platzierung und Ausrichtung
5

Setze eine Leseseite zusammen und behebe ihre Schwachstellen

19 Schritte
Wähle Verfahren für die Seite und ihre Komponenten und teste das Layout anschließend mit schwierigem Inhalt.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungErstelle die Seite bis hin zu ihren Teilen
  2. 2
    ErklärungGib jedem Verfahren eine konkrete Aufgabe
  3. 3
    HerausforderungWähle Spalten für eine Ressourcensammlung
  4. 4
    BeispielBegrenze die Lesebreite
  5. 5
    BeispielReserviere eine feste und eine flexible Spalte
  6. 6
    BeispielSchaffe Platz für den Fußbereich, ohne ihn zu fixieren
  7. 7
    TippErlaube Änderungen an Höhe und Viewport-Platz
  8. 8
    HerausforderungLass ein Foto breiter als den Artikel werden
  9. 9
    BeispielVerschachtle eine Flex-Werkzeugleiste im Seitenraster
  10. 10
    BeispielHalte Bild und Text im Gleichgewicht
  11. 11
    BeispielRichte Kartenteile auf der benötigten Ebene aus
  12. 12
    BeispielLass ein Feld eine Zeile mit einer Schaltfläche teilen
  13. 13
    HerausforderungDie Box oder ihre Wörter zentrieren?
  14. 14
    ErklärungUntersuche das vom Browser erstellte Layout
  15. 15
    BeispielVerfolge einen breiten Codeblock nach außen
  16. 16
    TippMache Kanten sichtbar, ohne sie zu verschieben
  17. 17
    HerausforderungEine Änderung der Breite reicht nicht aus
  18. 18
    HerausforderungTeste die Seite über das Beispiel hinaus
  19. 19
    ZusammenfassungPrüfe jede Beziehung mit echten Inhalten

CSS-Layout mit Flexbox und Grid: Übungsaufgaben

50 Übungsfragen in 5 Sets

Set 1: Boxen, Platz und Layoutentscheidungen10 Übungsfragen

Frage 1 von 10

Zwei benachbarte Blöcke im normalen Dokumentfluss haben sich berührende positive vertikale Außenabstände von 18px und 30px. Wie groß ist der zusammengefallene Abstand?
  1. 18px
  2. 30px
  3. 48px
  4. 12px
Antwort zeigenAntwort ausblenden
Antwort: B
Sich berührende positive vertikale Außenabstände von Blöcken fallen zum größeren Abstand zusammen, sodass der Abstand 30px beträgt. Eine Addition zu 48px würde sie als getrennte Abstände behandeln. Diese Addition würde zwischen Flex- oder Grid-Elementen gelten, deren Außenabstände nicht zusammenfallen; diese Boxen befinden sich jedoch im normalen Dokumentfluss.

Frage 2 von 10

Ein gewöhnlicher Textlink benötigt eine festgelegte Breite und soll dabei innerhalb einer Textzeile bleiben. Welcher display-Wert gibt ihm dieses Boxverhalten?
  1. inline
  2. block
  3. contents
  4. inline-block
Antwort zeigenAntwort ausblenden
Antwort: D
Eine Inline-Blockbox nimmt Breite und Höhe an und steht zugleich in einer Inline-Zeile. Ein gewöhnlicher Inline-Link ignoriert seine Breitendeklaration. Blockdarstellung nimmt die Breite ebenfalls an, beginnt aber eine Blockzeile und erfüllt damit nicht die Anforderung, die Box innerhalb der Textzeile zu halten.

Frage 3 von 10

Eine Kennzeichnung ist innerhalb einer Karte absolut positioniert. Die Karte hat position: relative und keine andere Regel erzeugt dazwischen einen umschließenden Block. Welche Box liefert den Bezug für den Versatz der Kennzeichnung?
  1. Die Innenabstandsbox der Karte.
  2. Die Inhaltsbox der Karte.
  3. Die Rahmenbox der Kennzeichnung.
  4. Die Inhaltsbox des Viewports.
Antwort zeigenAntwort ausblenden
Antwort: A
Die positionierte Karte legt den umschließenden Block der Kennzeichnung an ihren Innenabstandskanten fest. Misst du nur die Inhaltsbox der Karte, lässt du ihren Innenabstand aus und erhältst einen anderen Bezug. Der Viewport wird nur verwendet, wenn kein näheres geeignetes Vorfahrenelement den Bezug für die absolute Positionierung liefert.

Frage 4 von 10

Eine Abschnittsüberschrift hat position: sticky, aber alle vier Versatzwerte bleiben auto. Welche Deklaration lässt sie beim vertikalen Scrollen oben haften?
  1. z-index: 1
  2. margin-top: 0
  3. top: 0
  4. height: auto
Antwort zeigenAntwort ausblenden
Antwort: C
Eine haftende Box benötigt auf der Achse, auf der sie haften soll, einen anderen Versatzwert als auto. top: 0 legt die obere Schwelle fest. Ein z-index kann ändern, welche überlappende Ebene sichtbar ist, aber er kann nicht die fehlende Scrollschwelle festlegen, die das Haften aktiviert.

Frage 5 von 10

Drei Flex-Elemente haben in einer 460px breiten Zeile mit zwei Abständen von je 20px Basisgrößen von je 60px und Wachstumsfaktoren von 1, 2 und 1. Außenabstände, Innenabstände, Rahmen oder Größenbegrenzungen greifen nicht ein. Wie lauten ihre endgültigen Breiten in dieser Reihenfolge?
  1. 130px, 200px, 130px
  2. 120px, 180px, 120px
  3. 105px, 210px, 105px
  4. 140px, 140px, 140px
Antwort zeigenAntwort ausblenden
Antwort: B
Die Basisgrößen beanspruchen 180px und die Abstände 40px, sodass 240px für vier Wachstumsanteile bleiben. Jeder Anteil beträgt 60px; daraus ergeben sich 120px, 180px und 120px. Wer die endgültige Breite des mittleren Elements doppelt so groß wie die der anderen macht, verwechselt seinen Anteil am hinzugefügten Platz mit seiner gesamten Breite.

Frage 6 von 10

Welcher Teil der flex-Kurzschreibweise mit drei Werten legt die Ausgangsgröße des Elements entlang der Hauptachse fest?
  1. Der dritte Teil, flex-basis.
  2. Der erste Teil, flex-grow.
  3. Der zweite Teil, flex-shrink.
  4. Der align-items-Wert des Elternelements.
Antwort zeigenAntwort ausblenden
Antwort: A
Die Reihenfolge der drei Werte ist Wachstum, Schrumpfung, Basis; der dritte Teil liefert also die Ausgangsgröße. Wachstum steuert einen Anteil des positiven freien Platzes, nachdem die Basisgrößen bekannt sind. Es legt keine Anfangsbreite fest, auch wenn eine Änderung die endgültige Breite des Elements verändern kann.

Frage 7 von 10

Ein 760px breites Raster hat die Spalten 160px 1fr 2fr und einen Spaltenabstand von 15px. Mindestgrößen des Inhalts begrenzen die Rasterspuren nicht. Wie breit ist die 2fr-Spalte?
  1. 400px
  2. 300px
  3. 190px
  4. 380px
Antwort zeigenAntwort ausblenden
Antwort: D
Zwei Abstände beanspruchen 30px; nach ihrem Abzug und dem der festen 160px breiten Spalte bleiben 570px. Bei drei Anteilen beträgt ein Anteil 190px, die 2fr-Spalte also 380px. Das Ergebnis 400px zieht die feste Spalte ab, vergisst aber, dass auch Abstände verfügbare Breite beanspruchen.

Frage 8 von 10

Ein Grid-Element muss die ersten drei Spalten eines Rasters mit fünf Spalten umfassen. Welche Linienplatzierung ergibt diese Spannweite?
  1. grid-column: 1 / 3
  2. grid-column: 2 / 4
  3. grid-column: 1 / 4
  4. grid-column: 1 / 5
Antwort zeigenAntwort ausblenden
Antwort: C
Drei Rasterspuren ab Linie 1 enden an Linie 4, weil Linien die Begrenzungen der Rasterspuren markieren. Die Platzierung 1 / 3 endet am Anfang der dritten Spalte und umfasst nur zwei Rasterspuren. Zähle die Bereiche zwischen den Begrenzungslinien, nicht nur die Zahlen in der Deklaration.

Frage 9 von 10

Ein Verzeichnis hat viele Karten. Karten in späteren Zeilen müssen dieselben Spaltenbegrenzungen wie Karten in früheren Zeilen verwenden, auch wenn die letzte Zeile unvollständig ist. Welches Layoutverfahren drückt diese Anforderung am besten aus?
  1. Grid mit gemeinsamen Spaltenrasterspuren.
  2. Flexbox mit umgebrochenen Flex-Zeilen.
  3. Floats mit individuellen Breiten.
  4. Inline-Blockboxen mit natürlichen Breiten.
Antwort zeigenAntwort ausblenden
Antwort: A
Grid definiert eine Spaltenstruktur, die alle Zeilen teilen, sodass eine unvollständige letzte Zeile dieselben Begrenzungen behält. Umgebrochene Flex-Zeilen verteilen ihren Platz unabhängig und können die Elemente der letzten Zeile breiter machen. Die Anforderung betrifft die Ausrichtung über Zeilen hinweg, daher sind gemeinsame Rasterspuren die passende Vorgabe.

Frage 10 von 10

Karten mit unterschiedlich langen Texten bilden eine Grid-Zeile. Ihre Schaltflächen müssen ohne feste Kartenhöhen unten auf einer Linie stehen, und die Karten müssen bei wachsendem Text mitwachsen. Wie sollten das äußere Raster und die inneren Karten zusammenarbeiten?
  1. Karten am Anfang ausrichten; Flex-Spalten und automatische obere Außenabstände an Schaltflächen verwenden.
  2. Karten strecken; Flex-Spalten und automatische obere Außenabstände an Schaltflächen verwenden.
  3. Karten strecken; Flex-Zeilen und automatische obere Außenabstände an Schaltflächen verwenden.
  4. Karten strecken; Flex-Spalten und automatische untere Außenabstände an Schaltflächen verwenden.
Antwort zeigenAntwort ausblenden
Antwort: B
Die Grid-Streckung gibt den Karten eine gemeinsame Zeilenhöhe, die durch den höchsten Inhalt festgelegt wird. Eine Flex-Spalte innerhalb jeder Karte lässt den automatischen oberen Außenabstand der Schaltfläche ungenutzten vertikalen Platz aufnehmen. Absolute Schaltflächen reservieren keinen eigenen Platz, sodass wachsender Text darunterlaufen kann, selbst wenn ihre unteren Kanten auf einer Linie stehen.
Set 2: Dokumentfluss, Ebenen und flexible Container10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Eine Profilbox enthält nur ein gefloatetes Foto und ihr Hintergrund reicht nicht um das Foto herum. Welcher display-Wert auf der Profilbox schließt den Float ein?
  1. inline
  2. contents
  3. flow-root
  4. none
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein gewöhnliches Inline-<span> hat width: 180px und 10px vertikalen Innenabstand. Warum kann sein Hintergrund benachbarte Textzeilen überlappen, während seine Breite der Inhaltsgröße entspricht?
  1. Die Inline-Breite wird ignoriert; vertikaler Innenabstand wird ohne größeren Zeilenabstand gezeichnet.
  2. Die Inline-Breite wird vererbt; vertikaler Innenabstand fällt mit benachbarten Außenabständen zusammen.
  3. Die Inline-Breite setzt ein Minimum; vertikaler Innenabstand entfernt die Box aus dem normalen Dokumentfluss.
  4. Die Inline-Breite reserviert Leerraum; vertikaler Innenabstand ändert nur die Grundlinie.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Ein relativer Kopfbereich auf z-index: 4 enthält ein absolutes Menü auf z-index: 800. Ein benachbarter relativer Hauptbereich liegt auf z-index: 5. Beide äußeren Boxen befinden sich im selben übergeordneten Stapelkontext. Welche Änderung setzt den gesamten Kopfbereich über den Hauptbereich?
  1. Hebe das Menü auf z-index: 900 an.
  2. Senke das Menü auf z-index: 6 ab.
  3. Setze das Menü auf position: relative.
  4. Hebe den Kopfbereich auf z-index: 6 an.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Ein Absatz hat position: relative; top: 9px. Was geschieht mit der Position des folgenden Absatzes im normalen Dokumentfluss?
  1. Er verschiebt sich ebenfalls um 9px nach unten.
  2. Er bleibt an der berechneten Position.
  3. Er rückt in die ursprüngliche Lücke nach oben.
  4. Er wird absolut positioniert.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

In einer horizontalen deutschen Flex-Zeile soll das letzte Steuerelement ans äußerste Ende geschoben werden, während frühere Steuerelemente am Anfang bleiben. Welcher Außenabstand am letzten Steuerelement nimmt den freien Platz davor auf?
  1. margin-inline-start: auto
  2. margin-inline-end: auto
  3. margin-block-start: auto
  4. margin-block-end: auto
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Eine 540px breite Flex-Zeile hat zwei Elemente mit Basisgrößen von 240px und 480px und Schrumpffaktoren von 2 und 1. Es gibt keine Abstände, Außenabstände, Rahmen, Innenabstände oder begrenzenden Mindestgrößen. Welche endgültigen Breiten ergeben sich?
  1. 180px und 360px
  2. 120px und 420px
  3. 150px und 390px
  4. 160px und 380px
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Ein Raster mit drei Spalten definiert keine Zeilen und platziert acht gewöhnliche Elemente automatisch. Wie viele implizite Zeilen werden benötigt?
  1. Zwei Zeilen.
  2. Drei Zeilen.
  3. Vier Zeilen.
  4. Acht Zeilen.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Ein schmales Element soll in Inline-Richtung mittig in seinem eigenen breiten Rasterbereich stehen, ohne die Spalten zu verschieben. Welche Eigenschaft gehört auf dieses Element?
  1. justify-content: center
  2. align-content: center
  3. text-align: center
  4. justify-self: center
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Der Fußbereich einer kurzen Seite soll bis zum unteren Viewport-Rand reichen und sich dann natürlich nach unten bewegen, wenn der Artikel wächst. Welche Grid-Einstellung für body unterstützt dies mit Kopf-, Haupt- und Fußbereich als Kindelementen?
  1. height: 100dvh; grid-template-rows: auto 0 auto
  2. max-height: 100dvh; grid-template-rows: 1fr auto 1fr
  3. min-height: 100dvh; grid-template-rows: auto 1fr auto
  4. height: auto; grid-template-rows: auto auto auto
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Das Hauptelement einer Flex-Seite enthält eine lange nicht umbrechbare Codezeile. Die Entwicklerwerkzeuge zeigen für den Hauptbereich min-width: auto; die gesamte Seite scrollt seitlich. Der Code muss verfügbar bleiben, ohne die Seite zu verbreitern. Welche Kombination behebt das Problem an beiden Boxen?
  1. Gib dem Hauptbereich min-width: 0 und dem Codeblock overflow-x: auto.
  2. Gib dem Hauptbereich width: 100% und dem Codeblock white-space: nowrap.
  3. Gib dem Hauptbereich overflow: visible und dem Codeblock min-width: 100%.
  4. Gib dem Hauptbereich flex-shrink: 0 und dem Codeblock overflow-x: hidden.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 3: Gemeinsame Rasterspuren und wechselnder Inhalt10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Eine Meldung soll anfangs unsichtbar sein, aber ihren aktuellen Platz reservieren, damit sich späterer Inhalt beim Erscheinen nicht bewegt. Welcher Eigenschaftswert bewirkt das?
  1. display: none
  2. display: contents
  3. position: absolute
  4. visibility: hidden
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein Artikel hat ein links gefloatetes Porträt, auf das eine Überschrift für einen neuen Abschnitt folgt. Text darf neben dem Porträt fließen, aber die Überschrift muss darunter beginnen. Welche Regel gehört auf die Überschrift?
  1. float: left
  2. clear: left
  3. overflow: visible
  4. position: relative
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Eine haftende Überschrift hat top: 0 innerhalb eines Vorfahrenelements mit overflow: auto. Die Seite scrollt, dieses Vorfahrenelement aber nicht. Was solltest du als wahrscheinlichen Grund dafür untersuchen, dass die Überschrift nie am Viewport haftet?
  1. Das Vorfahrenelement mit Überlauf ist ihr Scrollbezug geworden.
  2. Die Quelltextreihenfolge der Überschrift ist ihre Stapelebene geworden.
  3. Der obere Versatz der Überschrift wird von ihrer eigenen Höhe aus gemessen.
  4. Die Flex-Richtung der Seite hat die Haftschwelle entfernt.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Eine Kurzinfo befindet sich in einer statischen Karte mit opacity: 0.8. Die Karte befindet sich in einem relativen Abschnitt auf z-index: 2. Ein überlappender benachbarter Abschnitt ist relativ auf z-index: 3 positioniert. Eine Erhöhung des z-index der Kurzinfo ändert nichts. Welche äußere Änderung kann den gesamten Abschnitt dieser Kurzinfo nach vorne bringen?
  1. Erhöhe die Deckkraft der Karte auf genau 1.
  2. Hebe die Ebene der Kurzinfo über 3000 an.
  3. Hebe den umschließenden Abschnitt über Ebene 3 an.
  4. Hebe den eigenen z-index der Karte auf 4 an.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Eine vertikale Flex-Spalte hat freie Höhe und soll ihre Gruppe von Kindelementen von oben nach unten zentrieren. Welche Containerdeklaration steuert diese Achse?
  1. justify-content: center
  2. align-items: center
  3. justify-items: center
  4. align-self: center
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Ein Raster muss innerhalb von 810px drei genau gleich breite Spalten mit Abständen von 24px haben, auch wenn ein Element eine lange URL enthält. Die URL darf an beliebiger Stelle umbrechen. Welche Kombination regelt die Rasterspurgrößen und den Inhalt?
  1. Verwende repeat(3, 33.33%) und overflow-wrap: anywhere auf dem Element mit der URL.
  2. Verwende repeat(3, minmax(0, 1fr)) und overflow-wrap: anywhere auf dem Element mit der URL.
  3. Verwende repeat(3, 1fr) und white-space: nowrap auf dem Element mit der URL.
  4. Verwende repeat(3, minmax(270px, 1fr)) und overflow: visible auf dem Element mit der URL.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Eine Vorlage verwendet "banner banner" "banner main" als ihre beiden Zeilen. Warum ist diese Deklaration benannter Bereiche ungültig?
  1. Der Name main benötigt mindestens zwei Zellen.
  2. Ein Rasterbereich darf keine Zeilengrenze überqueren.
  3. Jeder Bereich muss eine ganze Rasterzeile füllen.
  4. Die banner-Zellen bilden kein Rechteck.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Drei Karten verwenden repeat(auto-fit, minmax(180px, 1fr)) in einem 860px breiten Raster mit Abständen von 20px. Sie haben keine Größenbegrenzungen oder zusätzlichen Abstände. Wie viele belegte Spalten bleiben und wie breit ist jede?
  1. Vier Spalten, jeweils genau 200px breit.
  2. Drei Spalten, jeweils etwa 286,7px breit.
  3. Drei Spalten, jeweils etwa 273,3px breit.
  4. Vier Spalten, jeweils genau 180px breit.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Ein langes Glossar soll wie in einer Zeitung eine schmale Spalte hinunter und dann in der nächsten weiterlaufen. Welche CSS-Layoutfunktion ermöglicht diesen Textfluss unmittelbar?
  1. Grid-Layout mit wiederholten 1fr-Rasterspuren.
  2. Mehrspaltenlayout mit columns.
  3. Flex-Layout mit flex-direction: row.
  4. Absolute Positionierung mit gleichen Versatzwerten.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Ein Bild und seine Abbildungsbeschriftung teilen sich grid-area: 1 / 1. Die Beschriftung folgt im HTML auf das Bild und keines von beiden hat einen z-index. Welches wird oben gezeichnet?
  1. Das Bild wird oben gezeichnet.
  2. Das höhere Kindelement wird oben gezeichnet.
  3. Das breitere Kindelement wird oben gezeichnet.
  4. Die Beschriftung wird oben gezeichnet.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 4: Untersuche Platzierung und Ausrichtung10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein Kopfbereich hat keinen Innenabstand oder Rahmen. Sein erstes Kindelement, eine Überschrift, hat einen oberen Außenabstand von 22px, der mit dem des Kopfbereichs zusammenfällt. Die Lücke erscheint außerhalb des Hintergrunds des Kopfbereichs. Welche Änderung setzt den Abstand stattdessen in den Kopfbereich?
  1. Behalte den Außenabstand des Kindelements und ergänze 22px oberen Außenabstand am Kopfbereich.
  2. Entferne den Außenabstand des Kindelements und ergänze 22px unteren Außenabstand am Kopfbereich.
  3. Entferne den Außenabstand des Kindelements und ergänze 22px oberen Innenabstand am Kopfbereich.
  4. Behalte den Außenabstand des Kindelements und setze die Position des Kopfbereichs auf relative.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein <ul> ist ein Grid-Container. Jedes <li> enthält einen Link. Welche Elemente werden zu Grid-Elementen des <ul>?
  1. Die direkten Listeneinträge als Kindelemente.
  2. Die Links innerhalb der Listeneinträge.
  3. Die Listeneinträge und ihre Links.
  4. Die Geschwisterelemente des Listencontainers.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Eine positionierte Karte hat 280px Inhaltsbreite, auf jeder Seite 18px Innenabstand und einen 2px breiten Rahmen. Sie verwendet content-box. Ein absolutes Kindelement hat width: 50% und right: 12px sowie keinen eigenen Innenabstand, Rahmen oder Außenabstand. Wie breit ist das Kindelement und wie weit liegt seine linke Kante von der linken Innenabstandskante der Karte entfernt?
  1. 140px breit; die linke Kante liegt 128px nach innen.
  2. 160px breit; die linke Kante liegt 148px nach innen.
  3. 158px breit; die linke Kante liegt 158px nach innen.
  4. 158px breit; die linke Kante liegt 146px nach innen.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Sieben Flex-Karten haben flex: 1 1 150px in einer 640px breiten umbruchfähigen Zeile mit Abständen von 10px. Es gibt keine Außenabstände, Innenabstände, Rahmen oder Größenbegrenzungen. Wie teilen sich die Karten auf die Zeilen auf und welche Breiten ergeben die beiden Zeilen?
  1. Drei, dann vier; erst etwa 206,7px, dann 152,5px.
  2. Vier, dann drei; erst 152,5px, dann etwa 206,7px.
  3. Vier, dann drei; auf beiden Zeilen 160px.
  4. Vier, dann drei; erst 150px, dann etwa 213,3px.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Ein deutscher Flex-Container verwendet row-reverse. Die Gruppe soll unabhängig vom umgekehrten Anfang der Hauptachse dicht am linken Rand stehen. Welcher justify-content-Wert folgt dieser Anfangskante der Schreibrichtung?
  1. flex-start
  2. flex-end mit row
  3. start
  4. space-between
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Welche ausgeschriebene Rasterspurliste erzeugt repeat(2, 80px 1fr)?
  1. 80px 80px 1fr 1fr
  2. 80px 1fr 80px 1fr
  3. 160px 2fr
  4. 80px 1fr 1fr
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Ein Raster hat sieben Karten, vier auto-fit-Spalten, die in seine Breite passen, und eine gewöhnliche zeilenweise Platzierung. Die letzte Zeile hat eine leere Zelle. Lässt auto-fit die vierte Spalte zusammenfallen und warum?
  1. Nein; ihr Element in der ersten Zeile hält die Spalte belegt.
  2. Ja; jede leere Zelle lässt ihre gesamte Spalte zusammenfallen.
  3. Nein; auto-fit lässt erzeugte Spalten niemals zusammenfallen.
  4. Ja; nur die letzte Zeile bestimmt die Belegung der Spalten.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Zwei feste 140px breite Spalten stehen in einem 500px breiten Raster mit einem Abstand von 20px. Es gelten keine weiteren Abstände. Wie viel Platz liegt bei justify-content: center vor der ersten Spalte?
  1. 110px
  2. 90px
  3. 200px
  4. 100px
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Eine haftende Seitenleiste teilt sich mit einem Artikel eine hohe Grid-Zeile. Sie hat top: 12px, keine feste Höhe und die standardmäßige Streckung; sie füllt die Zeile und bewegt sich nicht sichtbar. Kein Überlauf eines Vorfahrenelements stört. Welche Änderung schafft Raum zum Haften und belässt sie im Dokumentfluss?
  1. Setze justify-self: start auf der Seitenleiste.
  2. Setze align-self: start auf der Seitenleiste.
  3. Setze position: absolute auf der Seitenleiste.
  4. Setze z-index: 12 auf der Seitenleiste.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Eine Box verwendet width: 100%, links und rechts je 14px Innenabstand und box-sizing: content-box, ohne Rahmen. Die Inhaltsbreite ihres Elternelements beträgt 390px. Warum überschreitet diese Box das Elternelement?
  1. Zu ihren 390px Inhaltsbreite kommen 28px Innenabstand hinzu.
  2. Ihre Inhaltsbreite wird durch Innenabstand auf 362px verringert.
  3. Ihr Innenabstand ersetzt die äußeren Abstände des Elternelements.
  4. Ihre Breite wird vom Rahmen des Viewports aus gemessen.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 5: Kombiniere die Regeln in neuen Layouts10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein Bild und ein Absatz sind direkte Kindelemente eines Elternelements, das vom normalen Dokumentfluss auf display: flex umgestellt wurde. Das Bild hat weiterhin float: left, aber die unteren Zeilen des Absatzes fließen nicht mehr darunter. Wie lässt sich der gewöhnliche Textfluss um das Bild wiederherstellen?
  1. Behalte Flex bei und ergänze clear: both am Absatz.
  2. Behalte Flex bei und vergrößere den linken Float-Außenabstand des Bildes.
  3. Behalte Flex bei und gib dem Absatz flex-grow: 1.
  4. Setze das Elternelement auf normalen Dokumentfluss zurück und belasse das Bild als Float.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Eine fixierte Hilfeschaltfläche liegt innerhalb eines transformierten Bereichs, der wegscrollt. Kein anderes Vorfahrenelement ändert den Bezug der fixierten Positionierung. Ein separater 72px hoher fixierter Kopfbereich verdeckt außerdem Ziele von Links auf derselben Seite. Die Schaltfläche soll an den Viewport gebunden bleiben und Ziele sollen unter dem Kopfbereich sichtbar bleiben. Welches Änderungspaar behandelt beide Bezüge?
  1. Erhöhe den z-index der Schaltfläche; ergänze 72px margin-bottom am fixierten Kopfbereich.
  2. Mache die Schaltfläche im Bereich haftend; ergänze 72px padding-bottom auf html.
  3. Verschiebe die Schaltfläche aus dem transformierten Bereich; ergänze 72px scroll-padding-top auf html.
  4. Gib der Schaltfläche top: 0; ergänze 72px border-bottom an den Linkzielen.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Zwei relative Bereiche teilen sich einen übergeordneten Stapelkontext: A hat z-index 1, B hat z-index 2. A enthält eine isolierte Komponente mit einer Dekoration auf negativer Ebene und einem Menü auf z-index 100. Das Menü muss über B erscheinen, während die Dekoration hinter dem Text ihrer Komponente bleibt. Welche Änderung erfüllt beide Ziele?
  1. Hebe A über 2 an und belasse die Komponente isoliert.
  2. Hebe das Menü über 200 an und entferne die Isolation der Komponente.
  3. Belasse A auf 1 und hebe die isolierte Komponente über 2 an.
  4. Entferne die Positionierung des Menüs und behalte beide Bereichsebenen bei.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Die Links einer Flex-Zeile stehen in einer sinnvollen HTML-Reihenfolge, aber order: -1 verschiebt den letzten Link visuell an die erste Stelle. Welchen Reihenfolgen folgen der normale Tastaturfokus und das Lesen durch Screenreader?
  1. Nur der Fokus folgt der visuellen Reihenfolge.
  2. Beide folgen der HTML-Reihenfolge.
  3. Nur das Lesen folgt der visuellen Reihenfolge.
  4. Beide folgen der visuellen Reihenfolge.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Drei nicht wachsende 80px breite Flex-Elemente stehen in einer 500px breiten deutschen Zeile mit Abständen von 20px. Das dritte hat margin-inline-start: auto und der Container hat justify-content: center. Es gelten keine weiteren Abstände. Wo beginnt das dritte Element, gemessen von der linken Inhaltskante?
  1. 420px
  2. 280px
  3. 310px
  4. 400px
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Ein Raster hat sechs explizite Spalten und vier explizite Zeilen. Ein Bereich verwendet grid-column: 2 / -1; grid-row: 2 / span 2. Wie viele Zellen umfasst er?
  1. 8 Zellen
  2. 12 Zellen
  3. 15 Zellen
  4. 10 Zellen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Welche Grid-Kurzschreibweise zentriert jedes Element auf beiden Achsen innerhalb seines Bereichs?
  1. place-content: center
  2. place-items: center
  3. text-align: center
  4. justify-content: center
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Ein Artikelraster verwendet 1fr min(65ch, 100% - 32px) 1fr. In seiner aktuellen Schriftart entspricht 1ch 8px. Wie breit sind die mittleren Rasterspuren bei Inhaltsbreiten von 480px und 900px und welche Platzierung lässt ein Foto über die volle Breite reichen?
  1. 480px und 520px; grid-column: 1 / -1.
  2. 448px und 868px; grid-column: 2.
  3. 448px und 520px; grid-column: 1 / -1.
  4. 520px und 520px; grid-column: 1 / 3.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

In einer Kartensammlung sollen Titel, Beschreibungen und Fußbereiche über Karten hinweg auf einer Linie stehen. Jede Karte hat diese drei direkten Kindelemente, aber ihr aktuelles unabhängiges Zeilenraster kann deren Begrenzungen nicht an benachbarten Karten ausrichten. Welche Beziehung sollte diese unabhängige Zeilengrößenberechnung ersetzen?
  1. Jede Karte überspannt drei übergeordnete Spalten und übernimmt sie mit Spalten-Subgrid.
  2. Jede Karte belegt eine übergeordnete Zeile und gibt ihrem Fußbereich einen automatischen oberen Außenabstand.
  3. Jede Karte belegt eine übergeordnete Zelle und setzt alle drei Kindzeilen auf 1fr.
  4. Jede Karte überspannt drei übergeordnete Zeilen und übernimmt sie mit Zeilen-Subgrid.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Eine 210px breite Box beginnt 150px vom linken Rand des Viewports entfernt. Der Viewport ist 340px breit. Wie weit ragt die rechte Kante der Box über den rechten Rand des Viewports hinaus?
  1. 20px
  2. 60px
  3. 130px
  4. 150px
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe

Schlüsselbegriffe

86 Schlüsselbegriffe, jeweils mit Definition

Ä

Äußerer Anzeigetyp
Der äußere Anzeigetyp steuert, wie eine erzeugte Box am Layout ihres Elternelements teilnimmt, etwa durch Block- oder Inline-Platzierung.
Eine inline-flex-Schaltfläche hat einen äußeren Inline-Anzeigetyp und kann daher innerhalb einer Textzeile stehen.

A

Absolute Positionierung
Die absolute Positionierung entfernt eine Box aus dem normalen Dokumentfluss und platziert sie anhand von Versatzwerten von ihrem umschließenden Block aus.
Absolute Positionierung setzt die Kennzeichnung 10px von der oberen und rechten Innenabstandskante der Karte entfernt.
align-content
Die Eigenschaft align-content verteilt Flex-Zeilen auf der Querachse oder Grid-Zeilen auf der Blockachse, wenn Platz übrig ist.
Align-content kann eine umbruchfähige Flex-Zeile zentrieren, hat aber keine Wirkung, wenn der Container nowrap verwendet.
align-items
Die Eigenschaft align-items legt die Elementausrichtung auf der Flex-Querachse oder der Grid-Blockachse innerhalb des jeweiligen Elementbereichs fest.
Align-items mit dem Wert baseline richtet eine Beschriftung in der Werkzeugleiste an der ersten Textzeile einer größeren Überschrift aus.
align-self
Die Eigenschaft align-self überschreibt die Elementausrichtung des Elternelements für ein einzelnes Flex- oder Grid-Element auf seiner Ausrichtungsachse.
Align-self mit dem Wert start verhindert, dass eine Grid-Seitenleiste gestreckt wird, um eine hohe Artikelzeile zu füllen.
auto-fill
auto-fill ist ein Schlüsselwort für die automatische Wiederholung, das so viele Rasterspuren erzeugt, wie hineinpassen, und wiederholte Rasterspuren auch dann behält, wenn sie leer sind.
Auto-fill lässt neben einer kurzen Kartenzeile eine ungenutzte letzte Spalte, statt die Karten hinein zu strecken.
auto-fit
auto-fit ist ein Schlüsselwort für die automatische Wiederholung, das leere wiederholte Rasterspuren und ihre Abstände nach der Platzierung der Elemente zusammenfallen lässt.
Auto-fit lässt drei flexible Kartenspalten wachsen, wenn eine vierte erzeugte Spalte an keiner Stelle ein Element enthält.
Automatische Mindestgröße
Eine automatische Mindestgröße kann ein Flex-Element oder eine Rasterspur groß genug für nicht umbrechbaren Inhalt halten und so erwartetes Schrumpfen verhindern.
Die automatische Mindestgröße einer langen nicht umbrechbaren Codezeile kann das umschließende Flex-Element breiter als seinen verfügbaren Anteil machen.
Automatische Platzierung
Die automatische Platzierung weist nicht positionierte Grid-Elemente verfügbaren Zellen zu, normalerweise in Quelltextreihenfolge über Zeilen hinweg, und fügt bei Bedarf Rasterspuren hinzu.
Die automatische Platzierung setzt die siebte Karte in eine dritte Zeile, wenn das Raster drei Spalten hat.
Automatischer Außenabstand
Ein automatischer Außenabstand nimmt verfügbaren Platz auf seiner Seite eines Elements auf und ermöglicht so flexible Trennung oder Zentrierung im Layout.
Ein automatischer Außenabstand nach dem Logo nimmt freie Breite auf und hält Navigationslinks am anderen Ende.

B

Benannte Rasterlinie
Eine benannte Rasterlinie ist eine Rasterbegrenzung mit einem Namen, der in einer Rasterspurliste deklariert oder aus einem benannten Bereich erzeugt wird.
Die benannte Rasterlinie main-start lässt einen anderen Bereich die Anfangsbegrenzung des Hauptinhaltsbereichs teilen.
Benannter Rasterbereich
Ein benannter Rasterbereich ist ein rechteckiger Rasterbereich, der in Vorlagenbereichszeichenketten beschrieben und einem Element mit grid-area zugewiesen wird.
In einer zweispaltigen Vorlage wiederholt sich der benannte Rasterbereich header über beide Zellen der oberen Zeile, sodass der Kopfbereich die Seite überspannt.
Berechneter Wert
Ein berechneter Wert ist der von Entwicklerwerkzeugen angezeigte aufgelöste CSS-Wert. Er hilft zu prüfen, welche Regeln tatsächlich auf ein Element wirken.
Der berechnete Wert von display zeigt, dass das Elternelement zu flex wurde, obwohl eine ältere Regel block deklarierte.
Blockbox
Eine Blockbox beginnt eine neue Blockzeile und füllt bei automatischer Breite normalerweise die verfügbare Breite.
Ein Absatz bleibt eine Blockbox, auch wenn seine Breite auf 280px verringert wird.
Blockformatierungskontext
Ein Blockformatierungskontext ist ein unabhängiger Flussbereich, der seine Floats einschließt und seine Außenabstände von denen seiner Kindelemente trennt.
Enthält eine Profilbox ein gefloatetes Foto, lässt ihr Blockformatierungskontext den Hintergrund um dieses Foto reichen.

C

ch-Einheit
Die ch-Einheit misst die Breite der Ziffer 0 in der aktuellen Schriftart und ermöglicht eine ungefähre zeichenbasierte Begrenzung von Textbreiten.
Die ch-Einheit begrenzt die Zeilenlänge einer 65ch breiten Textspalte, ohne die tatsächlichen Buchstaben zu zählen.
clear-Eigenschaft
Die clear-Eigenschaft verschiebt eine Box im normalen Dokumentfluss unter frühere Floats auf der ausgewählten Seite oder auf beiden Seiten.
Wird clear auf both gesetzt, beginnt die nächste Abschnittsüberschrift unter dem gefloateten Bild des Artikels.
Clearfix
Ein Clearfix ist eine ältere Technik zum Einschließen von Floats, die nach dem Inhalt eines Containers ein Pseudoelement mit clear hinzufügt.
Ein älteres Stylesheet verwendet einen Clearfix, damit der nächste Abschnitt nicht neben eine Reihe gefloateter Boxen rückt.

D

Dichte Platzierung
Die dichte Platzierung füllt frühere Lücken in einem Raster nachträglich mit späteren kleineren Elementen und kann dadurch deren sichtbare Abfolge ändern.
Dichte Platzierung kann ein kleines Galeriebild in eine Lücke über einem früheren großen Bild verschieben.
display: none
display: none ist eine display-Einstellung, die ein Element und seine Nachfahren aus dem Layout entfernt, sodass kein Boxplatz reserviert bleibt.
Display none für eine geschlossene Meldung entfernt die Lücke, die die sichtbare Meldung einnehmen würde.
Dynamische Viewport-Höhe
Die dynamische Viewport-Höhe ist die durch dvh dargestellte veränderliche sichtbare Viewport-Höhe, wenn Browsersteuerelemente erscheinen oder verschwinden.
Die dynamische Viewport-Höhe hilft einem bildschirmfüllenden mobilen Abschnitt, bei sichtbarer Adressleiste in den sichtbaren Bereich zu passen.

E

Eindimensionales Layout
Ein eindimensionales Layout ordnet Elemente hauptsächlich entlang einer Achse an, wobei umgebrochene Zeilen wie in Flexbox unabhängig behandelt werden.
Eine umbruchfähige Werkzeugleiste nutzt ein eindimensionales Layout, weil jede Zeile nur ihre eigene freie Breite aufteilt.
Eingabegruppe
Eine Eingabegruppe kombiniert ein Feld mit zugehörigen Steuerelementen und nutzt häufig ein flexibles Eingabefeld und eine Schaltfläche in natürlicher Größe in einer Zeile.
Die Sucheingabegruppe lässt das Feld schrumpfen und hält dabei seine Absenden-Schaltfläche innerhalb des Containers.
Elementausrichtung
Die Elementausrichtung positioniert jedes Flex- oder Grid-Element innerhalb des ihm zugewiesenen Platzes, etwa eines Rasterbereichs oder einer Flex-Zeile.
Die Grid-Elementausrichtung kann eine schmale Karte innerhalb ihrer Rasterspur zentrieren, ohne die Rasterspur selbst zu verschieben.
Explizites Raster
Das explizite Raster besteht aus den durch die Rastervorlage definierten Rasterspuren und Begrenzungen einschließlich ihrer benannten Vorlagenbereiche.
Linie -1 markiert das Ende des expliziten Rasters, auch wenn die Platzierung darüber hinaus weitere Rasterspuren erzeugt.

F

Fixierte Positionierung
Die fixierte Positionierung entfernt eine Box aus dem Dokumentfluss und positioniert sie beim Scrollen des Dokuments normalerweise relativ zum Viewport.
Fixierte Positionierung hält die Hilfeschaltfläche in der Fensterecke, sofern kein geeignetes Vorfahrenelement ihren Bezug ändert.
flex-basis
Die Eigenschaft flex-basis liefert die Ausgangsgröße eines Flex-Elements auf der Hauptachse, bevor Wachstum oder Schrumpfung den Platz aufteilen.
Eine flex-basis von 180px liefert die Ausgangsbreite der Karte, auch wenn ihre width-Eigenschaft 140px beträgt.
Flex-Container
Ein Flex-Container ist eine Box, deren Flex-Anzeigetyp ihre direkten Kindelemente als Flex-Elemente entlang einer Hauptachse anordnet.
Die Navigation wird zu einem Flex-Container, während ihre verschachtelte Linkliste ein eigenes Layout haben kann.
Flex-Element
Ein Flex-Element ist eine direkte Kindbox im Dokumentfluss, die mit flexiblen Größen- und Ausrichtungsregeln am Flex-Layout ihres Elternelements teilnimmt.
Jede Karte ist ein Flex-Element der äußeren Zeile und kann zugleich ihre eigenen Inhalte als Spalte anordnen.
flex-grow
Die Eigenschaft flex-grow gibt einem Element einen relativen Anteil am positiven freien Platz, nachdem Flex-Basisgrößen und Abstände berücksichtigt wurden.
Ein flex-grow-Wert von 2 gibt einer Karte doppelt so viel zusätzlichen Platz wie einer benachbarten Karte mit dem Wert 1.
flex-Kurzschreibweise
Die flex-Kurzschreibweise kombiniert Wachstum, Schrumpfung und Basis in dieser Reihenfolge, um die flexible Größe eines Elements auf der Hauptachse zu beschreiben.
Die flex-Kurzschreibweise 0 0 180px gibt einer Seitenleiste eine Basis von 180px ohne Wachstum oder Schrumpfung.
flex-shrink
Die Eigenschaft flex-shrink steuert den Platzverlust anhand eines Gewichts, das dem Schrumpffaktor multipliziert mit der Basisgröße des Elements entspricht.
Zwei gleiche flex-shrink-Faktoren können unterschiedliche Pixelbeträge abziehen, wenn die Karten unterschiedliche Basisgrößen haben.
Flex-Zeilenumbruch
Der Flex-Zeilenumbruch erlaubt Elementen, in weitere Flex-Zeilen zu wechseln, wenn ihre Ausgangsgrößen nicht in die aktuelle Zeile passen.
Der Flex-Zeilenumbruch lässt eine Schlagwortliste auf eine zweite Zeile wachsen, wobei jede Zeile ihren eigenen Platz aufteilt.
Flexbox
Flexbox ist ein Layoutverfahren, das Platz zwischen Elementen entlang einer Hauptzeile oder Hauptspalte aufteilt, wobei jede umgebrochene Zeile unabhängig dimensioniert wird.
Flexbox lässt kurze und lange Steuerelemente einer Werkzeugleiste eine Zeile teilen und bei begrenztem Platz umbrechen.
Float
Ein Float ist eine Box, die an eine Seite eines Containers verschoben wird, sodass nachfolgender Inline-Inhalt sie umfließen kann.
Ein linker Float lässt die Anfangszeilen des Artikels neben dem Porträt verlaufen, bevor sie zur vollen Breite zurückkehren.
flow-root
flow-root ist ein display-Wert, der eine Blockbox mit eigenem unabhängigem Flussbereich erzeugt und gefloatete Kindelemente einschließt.
Flow-root auf einem umschließenden Profilelement mit einem gefloateten Foto hält dessen Rahmen um das Foto herum.
Formularraster
Ein Formularraster nutzt gemeinsame Rasterspuren für Formularinhalte, etwa eine Spalte für Beschriftungen und eine weitere für ihre Felder.
Ein Formularraster richtet die Felder aus, auch wenn eine Beschriftung viel länger als die Beschriftungen anderer Zeilen ist.
fr-Einheit
Die fr-Einheit steht für einen Anteil des Rasterplatzes, der nach festen Rasterspuren und Abständen bleibt, vorbehaltlich der Größenbeschränkungen der Rasterspuren.
Eine Spalte mit der fr-Einheit erhält flexiblen Platz, nachdem Seitenleiste und Spaltenabstände abgezogen wurden.
Freier Platz
Freier Platz ist der Platz auf der Hauptachse, der nach Abzug der Ausgangsgrößen der Flex-Elemente und der Abstände vom Container bleibt.
Eine Werkzeugleiste mit 120px nach Abzug ihrer Basisgrößen und Abstände gibt diesen freien Platz ihren wachsenden Steuerelementen.
Full Bleed
Full Bleed bezeichnet Inhalt, der über eine schmalere Textspalte hinausreicht und die verfügbare Breite des umgebenden Layouts ausfüllt.
Ein Foto nutzt Full Bleed über das Artikelraster, während die Absätze in dessen mittlerer Rasterspur bleiben.

G

gap-Eigenschaft
Die gap-Eigenschaft legt Abstände zwischen Layoutelementen oder Rasterspuren fest; sie erzeugt keinen Innenabstand um die Außenseite des Containers.
Ein Abstand von 12px hält die Steuerelemente der Werkzeugleiste auseinander, ohne 12px an ihren Außenkanten hinzuzufügen.
Grid-Container
Ein Grid-Container ist eine Box, deren Grid-Anzeigetyp ihre direkten Kindelemente anhand gemeinsamer Zeilen- und Spaltenrasterspuren anordnet.
Der Grid-Container der Übersichtsseite definiert Spalten, die über mehrere Bereichszeilen hinweg ausgerichtet bleiben.
Grid-Element
Ein Grid-Element ist eine direkte Kindbox im Dokumentfluss eines Grid-Containers, die automatisch oder explizit in Rasterspuren platziert wird.
Eine Karte ist ein Grid-Element, auch wenn sie ein eigenes Flex-Layout zur Anordnung ihres Titels und ihrer Schaltfläche verwendet.
Grundlinienausrichtung
Die Grundlinienausrichtung positioniert texttragende Elemente so, dass ihre Textgrundlinien trotz unterschiedlicher Schriftgrößen oder Boxhöhen auf einer Linie stehen.
Die Grundlinienausrichtung lässt eine kleine Beschriftung in der Werkzeugleiste neben einer größeren Überschrift natürlich ausgerichtet erscheinen.

H

Haftende Positionierung
Die haftende Positionierung belässt eine Box im Dokumentfluss und hält sie dann an einer Versatzschwelle, während sie sich innerhalb ihres umschließenden Blocks bewegt.
Haftende Positionierung hält Tabellenüberschriften sichtbar, bis ihre Tabelle das Ende ihres scrollenden Bereichs erreicht.
Hauptachse
Die Hauptachse ist die durch flex-direction bestimmte Richtung, in der ein Flex-Container seine Elemente anordnet.
Bei Spaltenrichtung verläuft die Hauptachse vertikal und justify-content verteilt freie Höhe.

I

Implizites Raster
Das implizite Raster besteht aus zusätzlichen Rasterspuren, die erzeugt werden, wenn die Platzierung über die explizit definierten Rasterspuren hinaus Platz benötigt.
Wenn neue Karten zur Produktliste hinzukommen, entstehen zusätzliche implizite Rasterzeilen, ohne dass sich die Spaltenvorlage ändert.
Inhaltsausrichtung
Die Inhaltsausrichtung positioniert die Rasterspuren des Rasters oder Flex-Zeilen als Gruppe innerhalb ihres Containers, wenn freier Platz vorhanden ist.
Die Inhaltsausrichtung verschiebt drei feste Spalten als eine Gruppe zur Mitte des Grid-Containers.
Inhaltsspalte
Eine Inhaltsspalte ist ein Bereich mit begrenzter Breite für gut lesbaren Seiteninhalt, der häufig mit automatischen Inline-Außenabständen und seitlichem Innenabstand zentriert wird.
Die zentrierte Inhaltsspalte wächst auf breiten Bildschirmen nicht unbegrenzt und behält auf schmalen Bildschirmen ihren Innenabstand.
Inline-Blockbox
Eine Inline-Blockbox bleibt in einer Inline-Zeile und nimmt zugleich Breite, Höhe und vertikale Boxabstände an.
Ein als Inline-Blockbox gestalteter Navigationslink kann durch Innenabstand eine größere Klickfläche erhalten.
Inline-Richtung
Die Inline-Richtung ist die Richtung, in der Text innerhalb einer Zeile verläuft, etwa von links nach rechts im Deutschen oder von rechts nach links im Arabischen.
Ein automatischer Außenabstand am Anfang der Inline-Richtung wechselt bei arabischem Text auf die rechte Seite.
Inlinebox
Eine Inlinebox nimmt an einer Textzeile teil und bricht mit dem Text um, statt eine ganze Blockzeile einzunehmen.
Der Link ist eine Inlinebox innerhalb des Satzes, sodass die umgebenden Wörter seine Zeile teilen.
Innerer Anzeigetyp
Der innere Anzeigetyp steuert, wie eine Box ihre eigenen Kindelemente anordnet, etwa mit normalem Dokumentfluss, Flexbox oder Grid.
Wird der innere Anzeigetyp eines Bereichs auf grid geändert, werden seine direkten Kindelemente in Rasterspuren angeordnet.
inset-Kurzschreibweise
Die inset-Kurzschreibweise legt die Positionsversatzwerte top, right, bottom und left in einer Deklaration fest.
Eine automatisch dimensionierte absolute Überlagerung, deren inset auf null gesetzt ist, füllt ihren umschließenden Block.
isolation-Eigenschaft
Die isolation-Eigenschaft ist eine CSS-Einstellung, deren Wert isolate einen lokalen Stapelkontext erzeugt, ohne Deckkraft oder Position der Box zu ändern.
Isolation hält die negative Dekorationsebene einer Karte über deren eigenem Hintergrund und unter ihrem Text.

J

justify-content
Die Eigenschaft justify-content verteilt in Flexbox den verbleibenden Platz auf der Hauptachse oder richtet Grid-Spalten entlang der Inline-Achse aus.
Justify-content zentriert eine Flex-Gruppe nur, wenn Größenfestlegung und automatische Außenabstände Platz um sie herum lassen.
justify-self
Die Eigenschaft justify-self richtet ein Grid-Element auf der Inline-Achse innerhalb seines eigenen Bereichs aus; sie richtet keine einzelnen Flex-Elemente aus.
Justify-self mit dem Wert end verschiebt eine Grid-Kennzeichnung an das Inline-Ende ihres Bereichs, ohne benachbarte Elemente zu beeinflussen.

L

Layout-Überlagerung
Eine Layout-Überlagerung ist eine Darstellung der Entwicklerwerkzeuge, die Rasterspuren und Linien eines Rasters oder die Elementanordnung eines Flex-Containers sichtbar macht.
Die Layout-Überlagerung zeigt ein Haupt-Flex-Element, das neben einer Seitenleiste über seinen Anteil hinausgewachsen ist.

M

Medienobjekt
Ein Medienobjekt ist ein Komponentenmuster mit einem Bild neben flexiblem Text, etwa für ein Profil, einen Kommentar oder einen Produkteintrag.
Das Medienobjekt hält einen 64px breiten Avatar neben einer Nachricht, während die Nachricht die verbleibende Breite nutzt.
Mehrspaltenlayout
Ein Mehrspaltenlayout setzt einen Inhaltsfluss durch aufeinanderfolgende Textspalten fort und verwendet dafür eine Anzahl oder eine bevorzugte Spaltenbreite.
Ein Mehrspaltenlayout lässt ein langes Glossar zunächst seine erste Spalte hinunterlaufen, bevor es in die zweite übergeht.
minmax()-Funktion
Die minmax()-Funktion gibt einer Rasterspur eine minimale und maximale Größe und verbindet eine untere Begrenzung mit Platz zum Wachsen.
Minmax mit einem Minimum von null lässt eine gleich breite Spalte schmal bleiben, während ihr langer Text darin umbricht.

N

Normaler Dokumentfluss
Der normale Dokumentfluss ist die standardmäßige Anordnung von Boxen durch den Browser in Quelltextreihenfolge, wobei Blöcke untereinander stehen und Inline-Inhalt in Zeilen umbricht.
Im normalen Dokumentfluss verschiebt ein zusätzlicher Absatz die späteren Absätze nach unten, wenn sein Text wächst.

P

place-items
Die place-items-Kurzschreibweise setzt align-items und justify-items gemeinsam und ermöglicht so eine knappe Elementausrichtung auf zwei Achsen im Grid.
Place-items mit dem Wert center zentriert eine kurze Begrüßungsbox innerhalb des Rasterbereichs des Hero-Bereichs.
Positioniertes Element
Ein positioniertes Element hat einen berechneten position-Wert außer static, sodass Positionsversatzwerte darauf angewendet werden können.
Ein relativ positioniertes Element kann die Bezugsbox für eine Kennzeichnung liefern, ohne sich selbst zu bewegen.

Q

Querachse
Die Querachse steht senkrecht zur Hauptachse eines Flex-Containers und dient der Querausrichtung von Elementen und Zeilen.
In einer deutschen Flex-Zeile verläuft die Querachse vertikal, sodass align-items kurze Steuerelemente zentrieren kann.

R

Rasterbereich
Ein Rasterbereich ist ein rechteckiger Bereich aus einer oder mehreren Rasterzellen, der ein Element aufnehmen oder dessen Platzierung begrenzen kann.
Auf einer als Raster angelegten Übersichtsseite überspannt der Rasterbereich eines Diagramms drei Spalten und zwei Zeilen.
Rasterlinie
Eine Rasterlinie ist eine Begrenzung zwischen oder um Rasterspuren, die für die Platzierung von Elementen durch eine Nummer oder einen Namen bezeichnet wird.
Rasterlinie 4 ist die Endbegrenzung, wenn ein Element ab Linie 1 die ersten drei Spalten überspannt.
Rasterspur
Eine Rasterspur ist eine Zeile oder Spalte zwischen zwei benachbarten Rasterlinien, deren Größe durch die Größenregeln des Rasters gesteuert wird.
Eine feste 180px breite Rasterspur nimmt die Seitenleiste auf, während die benachbarte Rasterspur mit Bruchteil den Rest erhält.
Rasterzelle
Eine Rasterzelle ist der Bereich am Schnittpunkt einer Rasterzeile und einer Rasterspalte, begrenzt durch deren umgebende Linien.
Eine Abbildungsbeschriftung und ein Bild können sich eine Rasterzelle teilen, um ohne absolute Positionierung eine Überlagerung zu erzeugen.
Relative Positionierung
Die relative Positionierung verschiebt die gezeichnete Position einer Box und behält dabei ihren ursprünglichen Platz im normalen Dokumentfluss bei.
Relative Positionierung verschiebt die Beschriftung nach unten, ohne den folgenden Absatz zu bewegen.

S

scroll-padding-top
Die Eigenschaft scroll-padding-top reserviert oberen Freiraum im Ziel-Anzeigebereich einer scrollenden Box. Das ist unter fixierten Kopfbereichen nützlich.
Scroll-padding-top auf der Seite hilft einem Abschnittslink, seine Überschrift unterhalb der Navigationsleiste sichtbar zu machen.
Spannweite
Eine Spannweite bei der Grid-Platzierung gibt an, wie viele Rasterspuren ein Element von einer Begrenzung oder einer automatisch gewählten Position aus überquert.
Die Deklaration grid-column: 2 / span 3 gibt dem Bereich eine Spannweite von drei Spaltenrasterspuren.
Stapelkontext
Ein Stapelkontext ist eine Gruppe von Boxen, die beim Vergleich mit anderen Gruppen im umgebenden Kontext als Einheit gezeichnet wird.
Der Stapelkontext des Kopfbereichs bleibt unter main, obwohl sein Menü eine sehr hohe interne Ebene hat.
Stapelreihenfolge
Die Stapelreihenfolge ist die Reihenfolge, in der überlappende Boxen gezeichnet werden. Sie bestimmt, welche sichtbaren Teile vorne erscheinen.
Die später stehende Abbildungsbeschriftung erscheint über dem Bild, bis eine z-index-Regel ihre Stapelreihenfolge ändert.
Sticky-Footer-Muster
Ein Sticky-Footer-Muster hält einen Fußbereich am unteren Rand einer kurzen Seite und lässt ihn bei längerem Inhalt im normalen Dokumentfluss folgen.
Das Sticky-Footer-Muster nutzt eine flexible Hauptzeile, statt den Fußbereich aus dem Dokumentfluss zu nehmen.
Subgrid
Subgrid lässt ein verschachteltes Raster die Rasterspuren seines Elternelements auf einer Achse übernehmen, sodass innere Teile über benachbarte Komponenten hinweg ausgerichtet werden können.
Zeilen-Subgrid gibt benachbarten Karten gemeinsame Begrenzungen für Titel, Beschreibung und Fußbereich.

U

Umbruch (Reflow)
Umbruch (Reflow) ist die Anpassung von Inhalt an eine geringere Anzeigebreite, sodass er ohne unnötiges Scrollen in zwei Richtungen nutzbar bleibt.
Die Umbruchprüfung bei 320 CSS-Pixeln deckt einen Bereich mit fester Breite auf, der die Seite seitlich verschiebt.
Umschließender Block
Ein umschließender Block ist das Bezugsrechteck, anhand dessen die Größen oder Versatzwerte einer Box nach den jeweils geltenden Layoutregeln berechnet werden.
Die relative Karte liefert den umschließenden Block der absoluten Kennzeichnung an den Innenabstandskanten der Karte.

Ü

Überlagerung
Eine Überlagerung ist eine Box, die über einem anderen Element gezeichnet und durch überlappende Rasterbereiche oder positionierte Ebenen erzeugt wird.
Die Abbildungsbeschriftung bildet eine Überlagerung, indem sie die Zelle des Bildes teilt und im HTML später erscheint.
Überlauf
Überlauf ist Inhalt, der über den zugewiesenen Bereich einer Box hinausragt und durch CSS sichtbar sein, abgeschnitten oder scrollbar gemacht werden kann.
Die lange Codezeile verursacht horizontalen Überlauf, der sich in einem lokal scrollenden Codeblock halten lässt.

V

Verschachteltes Layout
Ein verschachteltes Layout ist eine innere Anordnung, deren Container selbst ein Element eines äußeren Layouts ist. So lassen sich Verfahren kombinieren.
Das Seitenraster und die Flex-Spalte jeder Karte bilden ein verschachteltes Layout mit getrennten äußeren und inneren Aufgaben.
Viewport
Der Viewport ist der sichtbare Fensterbereich, durch den ein Dokument betrachtet wird. Er dient normalerweise als Bezug für fixierte Positionierung.
Das Steuerelement zurück zum Seitenanfang bleibt beim Scrollen des Dokuments 18px von der unteren Kante des Viewports entfernt.
visibility: hidden
visibility: hidden ist eine visibility-Einstellung, die eine Box ausblendet und dabei den Platz erhält, den sie im Layout einnimmt.
Visibility hidden reserviert Platz für die Statusmeldung, sodass das Einblenden späteren Text nicht verschieben muss.

Z

z-index
Die Eigenschaft z-index legt eine Stapelebene für eine positionierte Box oder ein Flex- oder Grid-Element innerhalb seines Stapelkontexts fest.
Ein hoher z-index auf einem Dropdown-Menü kann es dennoch nicht über ein höher liegendes Geschwisterelement seines Vorfahrenkontexts heben.
Zusammenfallen von Außenabständen
Das Zusammenfallen von Außenabständen verbindet bestimmte sich berührende vertikale Außenabstände von Blöcken im normalen Dokumentfluss zu einem einzigen Außenabstand.
Durch das Zusammenfallen von Außenabständen ergeben ein unterer Außenabstand von 20px und ein oberer von 36px einen Abstand von 36px.
Zweidimensionales Layout
Ein zweidimensionales Layout steuert Zeilen und Spalten gemeinsam, sodass Elemente wie in Grid in beide Richtungen Begrenzungen teilen können.
Eine Übersichtsseite benötigt ein zweidimensionales Layout, um Bereiche sowohl über Zeilen hinweg als auch entlang von Spalten auszurichten.

Über diese Einheit

Von StudeliFehler melden

Erstelle deine eigenen Lernmaterialien

Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.

Jetzt starten