Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

flex CSS-Eigenschaft

Baseline Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2015 browserübergreifend verfügbar.

Die flex CSS Kurzschreibweise-Eigenschaft legt fest, wie ein Flex-Element wächst oder schrumpft, um in den verfügbaren Raum seines Flex-Containers zu passen.

Probieren Sie es aus

flex: 1;
flex: 2;
flex: 1 30px;
flex: 1 1 100px;
<section class="default-example" id="default-example">
  <div class="transition-all" id="example-element">Change me</div>
  <div>flex: 1</div>
  <div>flex: 1</div>
</section>
.default-example {
  border: 1px solid #c5c5c5;
  width: auto;
  max-height: 300px;
  display: flex;
}

.default-example > div {
  background-color: rgb(0 0 255 / 0.2);
  border: 3px solid blue;
  margin: 10px;
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: 0;
}

#example-element {
  background-color: rgb(255 0 200 / 0.2);
  border: 3px solid rebeccapurple;
}

Bestandteile

Diese Eigenschaft ist eine Kurzform für die folgenden CSS-Eigenschaften:

Syntax

css
/* Keyword value */
flex: none; /* 0 0 auto */

/* One value, unitless number: flex-grow
flex-basis is then equal to 0%. */
flex: 2; /* 2 1 0% */

/* One value, width/height: flex-basis */
flex: auto; /* 1 1 auto */
flex: 10em; /* 1 1 10em */
flex: 30%;
flex: min-content;

/* Two values: flex-grow | flex-basis */
flex: 1 30px; /* 1 1 30px */

/* Two values: flex-grow | flex-shrink */
flex: 2 2; /* 2 2 0% */

/* Three values: flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;

/* Global values */
flex: inherit;
flex: initial; /* 0 1 auto */
flex: revert;
flex: revert-layer;
flex: unset;

Die flex-Eigenschaft kann mit einem, zwei oder drei Werten spezifiziert werden.

  • Ein-Wert-Syntax: Der Wert muss einer der folgenden sein:

    • Ein gültiger Wert für flex-grow: Dann expandiert die Kurzform zu flex: <flex-grow> 1 0%.
    • Ein gültiger Wert für flex-basis: Dann expandiert die Kurzform zu flex: 1 1 <flex-basis>.
    • Das Schlüsselwort none oder eines der globalen Schlüsselwörter.
  • Zwei-Wert-Syntax:

    • Der erste Wert muss ein gültiger Wert für flex-grow sein.

    • Der zweite Wert muss einer der folgenden sein:

      • Ein gültiger Wert für flex-shrink: Dann expandiert die Kurzform zu flex: <flex-grow> <flex-shrink> 0%.
      • Ein gültiger Wert für flex-basis: Dann expandiert die Kurzform zu flex: <flex-grow> 1 <flex-basis>.
  • Drei-Wert-Syntax: Die Werte müssen in folgender Reihenfolge angegeben werden:

    1. Ein gültiger Wert für flex-grow.
    2. Ein gültiger Wert für flex-shrink.
    3. Ein gültiger Wert für flex-basis.

Werte

<'flex-grow'>

Definiert das flex-grow des Flex-Elements. Negative Werte gelten als ungültig. Der Standardwert ist 1, wenn weggelassen. (Anfangswert ist 0)

<'flex-shrink'>

Definiert das flex-shrink des Flex-Elements. Negative Werte gelten als ungültig. Der Standardwert ist 1, wenn weggelassen. (Anfangswert ist 1)

<'flex-basis'>

Definiert das flex-basis des Flex-Elements. Der Standardwert ist 0%, wenn weggelassen. Der Anfangswert ist auto.

none

Das Element wird entsprechend seiner width- und height-Eigenschaften dimensioniert. Es ist vollständig unflexibel: Es schrumpft weder noch wächst es im Verhältnis zum Flex-Container. Dies entspricht der Einstellung flex: 0 0 auto.

Gewünschte Flexbox-Effekte können durch die Verwendung der folgenden flex-Werte erreicht werden:

  • initial: Flex-Element wächst nicht, kann aber schrumpfen. Dieser Standardwert expandiert zu flex: 0 1 auto. Das Element wird entsprechend seiner width- oder height-Eigenschaften dimensioniert, abhängig von der flex-direction. Wenn negativer verfügbarer Raum vorhanden ist, schrumpft das Element auf seine Mindestgröße, um in den Container zu passen, wächst jedoch nicht, um positiven Raum im Flex-Container aufzunehmen.
  • auto: Flex-Element kann wachsen und schrumpfen. Dieser Wert expandiert zu flex: 1 1 auto. Das Element wird entsprechend seiner width- oder height-Eigenschaften dimensioniert, abhängig von der flex-direction, wächst jedoch, um positiven verfügbaren Raum im Flex-Container aufzunehmen oder schrumpft auf seine Mindestgröße, um im Falle von negativem Raum im Container zu passen. Das Flex-Element ist vollständig flexibel.
  • none: Das Flex-Element wächst weder noch schrumpft es. Dieser Wert expandiert zu flex: 0 0 auto. Das Element wird entsprechend seiner width- oder height-Eigenschaften dimensioniert, abhängig von der Richtung des Flex-Containers. Das Flex-Element ist vollständig unflexibel.
  • flex: <number [1,∞]>: Die Hauptgröße des Flex-Elements wird proportional zur festgelegten Zahl sein. Dieser Wert expandiert zu flex: <number> 1 0%. Dies setzt die flex-basis auf 0% und macht das Flex-Element flexibel. Das Element wird mindestens so breit oder hoch sein wie seine Mindestgröße, wobei der positive verfügbare Platz des Containers proportional basierend auf den Wachstumsfaktoren dieses Elements und seiner Geschwister-Flex-Elemente verteilt wird. Wenn alle Flex-Elemente dieses Muster verwenden, werden alle proportional zu ihren numerischen Werten dimensioniert.

Beschreibung

Für die meisten Zwecke sollten Autoren flex auf einen der folgenden Werte setzen: auto, initial, none oder eine positive dezimalfreie Zahl. Um die Auswirkungen dieser Werte zu sehen, versuchen Sie, die Flex-Container unten zu ändern:

Standardmäßig schrumpfen Flex-Elemente nicht unter ihre min-content-Größe. Um dies zu ändern, setzen Sie die min-width oder min-height des Elements.

Formale Definition

Anfangswertwie die jeweiligen Kurzschreibweisen:
Anwendbar aufflexible Elemente einschließlich In-Flow-Pseudo-Elemente
VererbtNein
Berechneter Wertwie die jeweiligen Kurzschreibweisen:
Animationstypwie die jeweiligen Kurzschreibweisen:

Formale Syntax

flex = 
none |
[ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]

<flex-grow> =
<number [0,∞]>

<flex-shrink> =
<number [0,∞]>

<flex-basis> =
content |
<'width'>

<width> =
auto |
<length-percentage [0,∞]> |
min-content |
max-content |
fit-content( <length-percentage [0,∞]> ) |
<calc-size()> |
<anchor-size()> |
stretch |
fit-content |
contain

<length-percentage> =
<length> |
<percentage>

<calc-size()> =
calc-size( <calc-size-basis> , <calc-sum> )

<anchor-size()> =
anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )

<calc-size-basis> =
<size-keyword> |
<calc-sum> |
<calc-size()> |
any

<calc-sum> =
<calc-product> [ [ '+' | '-' ] <calc-product> ]*

<anchor-name> =
<dashed-ident>

<anchor-size> =
width |
height |
block |
inline |
self-block |
self-inline

<calc-product> =
<calc-value> [ [ '*' | / ] <calc-value> ]*

<calc-value> =
<number> |
<dimension> |
<percentage> |
<calc-keyword> |
( <calc-sum> )

<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN

Beispiele

Setzen von flex: auto

Dieses Beispiel zeigt, wie ein Flex-Element mit flex: auto wächst, um jeden freien Raum im Container aufzunehmen.

HTML

html
<div id="flex-container">
  <div id="flex-auto">
    flex: auto (click to remove/add the `flex: initial` box)
  </div>
  <div id="default">flex: initial</div>
</div>

CSS

css
#flex-container {
  border: 2px dashed gray;
  display: flex;
}

#flex-auto {
  cursor: pointer;
  background-color: wheat;

  flex: auto;
}

#default {
  background-color: lightblue;
}

JavaScript

js
const flexAutoItem = document.getElementById("flex-auto");
const defaultItem = document.getElementById("default");
flexAutoItem.addEventListener("click", () => {
  defaultItem.style.display =
    defaultItem.style.display === "none" ? "block" : "none";
});

Ergebnis

Der Flex-Container enthält zwei Flex-Elemente:

  • Das #flex-auto-Element hat einen flex-Wert von auto. Der auto-Wert expandiert zu 1 1 auto, d.h. das Element darf expandieren.
  • Das #default-Element hat keinen gesetzten flex-Wert, daher ist sein Standardwert initial. Der initial-Wert expandiert zu 0 1 auto, d.h. das Element darf nicht expandieren.

Das #default-Element nimmt so viel Platz ein, wie es seine Breite erfordert, erweitert sich aber nicht, um mehr Platz einzunehmen. Der verbleibende Raum wird vollständig vom #flex-auto-Element eingenommen.

Wenn Sie auf das #flex-auto-Element klicken, setzen wir die display-Eigenschaft des #default-Elements auf none, wodurch es aus dem Layout entfernt wird. Das #flex-auto-Element dehnt sich dann aus, um den gesamten verfügbaren Raum im Container einzunehmen. Wenn Sie erneut auf das #flex-auto-Element klicken, wird das #default-Element wieder im Container hinzugefügt.

Spezifikationen

Spezifikation
CSS Flexible Box Layout Module Level 1
# flex-property

Browser-Kompatibilität

Siehe auch