> ## Documentation Index
> Fetch the complete documentation index at: https://docs.baenninger.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Flexbox

Flexbox ist eine eindimensionale Layoutmethode zum Anordnen von Elementen in Zeilen oder Spalten. Elemente *flexen* (dehnen sich aus), um zusätzlichen Raum zu füllen oder ziehen sich zusammen, um in kleinere Räume zu passen.

***

Zunächst müssen wir auswählen, welche Elemente als flexible Boxen angelegt werden sollen. Dazu setzen wir einen speziellen Wert von `display` auf das Elternelement der Elemente, die du beeinflussen möchtest.

```css theme={null}
.container {
  display: flex;
}
```

## Das Flex-Modell

Wenn Elemente als Flex-Items angelegt werden, sind sie entlang zwei Achsen angeordnet:

<Frame caption="Das Flex-Modell">
  <img src="https://mintcdn.com/levexis-38849a2b/fK05ZPeHGTgSfJjo/images/content/web/file-excalidraw-11.svg?fit=max&auto=format&n=fK05ZPeHGTgSfJjo&q=85&s=674aea5dd46ecc8dbb35b9403382dd1d" alt="Das Flex-Modell" width="983" height="595" data-path="images/content/web/file-excalidraw-11.svg" />
</Frame>

<AccordionGroup>
  <Accordion title="Hauptachse">
    Die **Hauptachse** ist die Achse, die in der Richtung verläuft, in der die Flex-Items angeordnet sind (zum Beispiel eine Zeile über die Seite, oder eine Spalte die Seite hinunter.)
  </Accordion>

  <Accordion title="Querachse">
    Die **Querachse** ist die Achse, die senkrecht zur Richtung verläuft, in der die Flex-Items angeordnet sind.
  </Accordion>

  <Accordion title="Flex-Container">
    Das Elternelement, das `display: flex` auf sich gesetzt hat wird als **Flex-Container** bezeichnet.
  </Accordion>

  <Accordion title="Flex-Items">
    Die Elemente, die als flexible Boxen innerhalb des Flex-Containers angelegt sind, werden als **Flex-Items** bezeichnet
  </Accordion>
</AccordionGroup>

## Spalten oder Zeilen

Flexbox bietet eine Eigenschaft namens `flex-direction`, die festlegt, in welche Richtung die Hauptachse verläuft. Standardmässig ist dies auf `row` gesetzt, was bewirkt, dass sie in einer Zeile angeordnet sind.

```css theme={null}
.container {
  display: flex;
  flex-direction: row | column | row-reverse | column-reverse;
}
```

<Frame caption="Spalten oder Zeilen">
  <img src="https://mintcdn.com/levexis-38849a2b/fK05ZPeHGTgSfJjo/images/content/web/file-excalidraw-12.svg?fit=max&auto=format&n=fK05ZPeHGTgSfJjo&q=85&s=88b1b1328c810d592eb3955b742c162c" alt="Spalten oder Zeilen" width="1317" height="832" data-path="images/content/web/file-excalidraw-12.svg" />
</Frame>

## Umbrüche

Standardmässig versuchen die Flex-Elemente, alle in eine Zeile zu passen. Mit dieser Eigenschaft kannst du das ändern und die Elemente nach Bedarf umbrechen lassen.

```css theme={null}
.container {
  display: flex;
  flex-wrap: nowrap | wrap | wrap-reverse;
}
```

<Frame caption="Umbrüche">
  <img src="https://mintcdn.com/levexis-38849a2b/fK05ZPeHGTgSfJjo/images/content/web/file-excalidraw-13.svg?fit=max&auto=format&n=fK05ZPeHGTgSfJjo&q=85&s=eade0f6dc4196ddec235ecc2c166b458" alt="Umbrüche" width="1696" height="719" data-path="images/content/web/file-excalidraw-13.svg" />
</Frame>

## Horizontale und Vertikale Ausrichtung

`justify-content` definiert die Ausrichtung entlang der Hauptachse.

```css theme={null}
.container {
  display: flex;
  justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}
```

<Frame caption="Ausrichtung entlang der Hauptachse">
  <img src="https://mintcdn.com/levexis-38849a2b/fK05ZPeHGTgSfJjo/images/content/web/file-excalidraw-14.svg?fit=max&auto=format&n=fK05ZPeHGTgSfJjo&q=85&s=f9b7df126c2e378ba0df50338cbf387b" alt="Ausrichtung entlang der Hauptachse" width="1767" height="723" data-path="images/content/web/file-excalidraw-14.svg" />
</Frame>

***

`align-items` definiert die Ausrichtung entlang der Querachse.

```css theme={null}
.container {
  display: flex;
  align-items: stretch | flex-start | flex-end | center | baseline;
}
```

<Frame caption="Ausrichtung entlang der Querachse">
  <img src="https://mintcdn.com/levexis-38849a2b/fK05ZPeHGTgSfJjo/images/content/web/file-excalidraw-15.svg?fit=max&auto=format&n=fK05ZPeHGTgSfJjo&q=85&s=df407ebb846883f2fb0a1a7e79ccf0e4" alt="Ausrichtung entlang der Querachse" width="1119" height="1233" data-path="images/content/web/file-excalidraw-15.svg" />
</Frame>

***

`align-content` richtet die Zeilen eines Flex-Containers aus, wenn in der Querachse zusätzlicher Platz vorhanden ist, ähnlich wie `justify-content` einzelne Elemente innerhalb der Hauptachse ausrichtet.

<Info>
  Diese Eigenschaft wird nur bei mehrzeiligen flexiblen Containern wirksam, bei denen `flex-wrap` entweder auf `wrap` oder `wrap-reverse` eingestellt ist. Ein einzeiliger flexibler Container (d. h. ein Container, bei dem `flex-wrap` auf den Standardwert `no-wrap` eingestellt ist) spiegelt `align-content` nicht wider.
</Info>

```css theme={null}
.container {
  align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch;
}
```

<Frame caption="Ausrichtung entlang der Querachse bei zu viel Platz">
  <img src="https://mintcdn.com/levexis-38849a2b/fK05ZPeHGTgSfJjo/images/content/web/file-excalidraw-19.svg?fit=max&auto=format&n=fK05ZPeHGTgSfJjo&q=85&s=0002f861ff4219cc206bff557077d381" alt="Ausrichtung entlang der Querachse bei zu viel Platz" width="1441" height="1738" data-path="images/content/web/file-excalidraw-19.svg" />
</Frame>

## Abstände

Die Eigenschaft `gap` steuert ausdrücklich den Abstand zwischen Flex-Elementen. Dieser Abstand wird nur zwischen den Elementen und nicht an den Aussenkanten angewendet.

```css theme={null}
.container {
  display: flex;
  ...
  gap: 1rem;
  gap: 1rem 2rem;
  row-gap: 1rem;
  column-gap: 2rem;
}
```

## Flex-Items anordnen

Standardmässig werden die Flex-Elemente in der Reihenfolge der Quelle angeordnet. Die Eigenschaft `order` steuert jedoch die Reihenfolge, in der sie im Flex-Container erscheinen.

```css theme={null}
.item {
  order: 5;
}
```

<Frame caption="Reihenfolge der Flex-Items">
  <img src="https://mintcdn.com/levexis-38849a2b/fK05ZPeHGTgSfJjo/images/content/web/file-excalidraw-16.svg?fit=max&auto=format&n=fK05ZPeHGTgSfJjo&q=85&s=5ebae2a9b4feb9fa3695e47bb286cc52" alt="Reihenfolge der Flex-Items" width="1244" height="379" data-path="images/content/web/file-excalidraw-16.svg" />
</Frame>

## Flexible Grössenanpassung

`flex-grow` definiert die Fähigkeit eines Flex-Items, bei Bedarf zu wachsen. Er akzeptiert einen einheitenlosen Wert, der als Proportion dient. Er gibt an, wie viel des verfügbaren Platzes innerhalb des Flex-Containers das Element einnehmen soll.

```css theme={null}
.item {
  flex-grow: 2;
}
```

<Frame caption="flex-grow">
  <img src="https://mintcdn.com/levexis-38849a2b/fK05ZPeHGTgSfJjo/images/content/web/file-excalidraw-17.svg?fit=max&auto=format&n=fK05ZPeHGTgSfJjo&q=85&s=23e76d8c61148662e77b5b64f388e1e3" alt="flex-grow" width="777" height="421" data-path="images/content/web/file-excalidraw-17.svg" />
</Frame>

***

Die \*\*`flex-shrink`-\*\*Eigenschaft legt den Verkleinerungsfaktor eines Flex-Elements fest.

```css theme={null}
.item {
  flex-shrink: 2;
}
```

<Frame caption="flex-shrink">
  <img src="https://mintcdn.com/levexis-38849a2b/fK05ZPeHGTgSfJjo/images/content/web/file-excalidraw-18.svg?fit=max&auto=format&n=fK05ZPeHGTgSfJjo&q=85&s=2c98acafd6637fbf0dff9b13b0c05c61" alt="flex-shrink" width="777" height="421" data-path="images/content/web/file-excalidraw-18.svg" />
</Frame>

***

Die \*\*`flex-basis`-\*\*Eigenschaft legt die anfängliche Hauptgrösse eines Flex-Elements fest.

```css theme={null}
.item {
  flex-basis: 20%;
}
```

***

`flex` ist die Kurzform für `flex-grow`, `flex-shrink` und `flex-basis`. Der zweite und dritte Parameter (`flex-shrink` und `flex-basis`) sind optional. Der Standardwert ist `0 1 auto`, aber wenn du einen einzelnen Zahlenwert angibst, z. B. `flex: 5;`, ändert sich die `flex-basis` auf `0%`, d. h. es ist wie die Einstellung `flex-grow: 5; flex-shrink: 1; flex-basis: 0%;`.

```css theme={null}
.item {
  flex: 2;
}
```
