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 legt fest, wie ein Flex-Element wachsen oder schrumpfen soll, um den verfügbaren Platz in seinem Flex-Container auszufüllen.
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 dieser Eigenschaft
Diese Eigenschaft ist eine Kurzschreibweise für die folgenden CSS-Eigenschaften:
Syntax
/* 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 angegeben werden.
-
Ein-Wert-Syntax: Der Wert muss einer der folgenden sein:
- Ein gültiger Wert für
flex-grow: dann erweitert sich die Kurzschreibweise zuflex: <flex-grow> 1 0%. - Ein gültiger Wert für
flex-basis: dann erweitert sich die Kurzschreibweise zuflex: 1 1 <flex-basis>. - Das Schlüsselwort
noneoder eines der globalen Schlüsselwörter.
- Ein gültiger Wert für
-
Zwei-Wert-Syntax:
-
Der erste Wert muss ein gültiger Wert für
flex-growsein. -
Der zweite Wert muss einer der folgenden sein:
- Ein gültiger Wert für
flex-shrink: dann erweitert sich die Kurzschreibweise zuflex: <flex-grow> <flex-shrink> 0%. - Ein gültiger Wert für
flex-basis: dann erweitert sich die Kurzschreibweise zuflex: <flex-grow> 1 <flex-basis>.
- Ein gültiger Wert für
-
-
Drei-Wert-Syntax: Die Werte müssen in der folgenden Reihenfolge angegeben werden:
- Ein gültiger Wert für
flex-grow. - Ein gültiger Wert für
flex-shrink. - Ein gültiger Wert für
flex-basis.
- Ein gültiger Wert für
Werte
<'flex-grow'>-
Definiert das
flex-growdes Flex-Elements. Negative Werte sind ungültig. Standard ist1, wenn nicht angegeben. (initial ist0) <'flex-shrink'>-
Definiert das
flex-shrinkdes Flex-Elements. Negative Werte sind ungültig. Standard ist1, wenn nicht angegeben. (initial ist1) <'flex-basis'>-
Definiert das
flex-basisdes Flex-Elements. Standard ist0%, wenn nicht angegeben. Der Anfangswert istauto. none-
Das Element wird gemäß seiner
width- undheight-Eigenschaften dimensioniert. Es ist vollständig unflexibel: es schrumpft nicht und wächst auch nicht in Relation zum Flex-Container. Dies entspricht der Einstellungflex: 0 0 auto.
Häufig gewünschte Flexbox-Effekte können mit den folgenden flex-Werten erreicht werden:
initial: Flex-Element wächst nicht, kann aber schrumpfen. Dieser Standardwert expandiert zuflex: 0 1 auto. Das Element wird gemäß seinenwidth- oderheight-Eigenschaften dimensioniert, abhängig von derflex-direction. Wenn negativer verfügbarer Platz vorhanden ist, wird das Element auf seine minimale Größe schrumpfen, um in den Container zu passen, wächst jedoch nicht, um positiven Platz im Flex-Container auszufüllen.auto: Flex-Element kann wachsen und schrumpfen. Dieser Wert expandiert zuflex: 1 1 auto. Das Element wird gemäß seinenwidth- oderheight-Eigenschaften dimensioniert, abhängig von derflex-direction, wächst jedoch, um verfügbaren positiven Platz im Flex-Container zu absorbieren, oder schrumpft auf seine minimale Größe, um in den Container im Falle eines negativen Platzes zu passen. Das Flex-Element ist vollständig flexibel.none: Das Flex-Element wächst weder noch schrumpft es. Dieser Wert expandiert zuflex: 0 0 auto. Das Element wird gemäß seinenwidth- oderheight-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 angegebenen Zahl sein. Dieser Wert erweitert sich zuflex: <number> 1 0%. Dies setzt dieflex-basisauf0%und macht das Flex-Element flexibel. Das Element wird mindestens so breit oder hoch wie seine Mindestgröße sein, wobei der positive verfügbare Platz des Containers proportional auf der Grundlage der 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 einheitenlose Zahl. Um den Effekt dieser Werte zu sehen, versuchen Sie, die folgenden Flex-Container zu vergrößern oder zu verkleinern:
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
| Anfangswert | wie die jeweiligen Kurzschreibweisen:
|
|---|---|
| Anwendbar auf | flexible Elemente einschließlich In-Flow-Pseudo-Elemente |
| Vererbt | Nein |
| Berechneter Wert | wie die jeweiligen Kurzschreibweisen:
|
| Animationstyp | wie 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
>flex: auto festlegen
Dieses Beispiel zeigt, wie ein Flex-Element mit flex: auto wächst, um jeden freien Raum im Container aufzunehmen.
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
#flex-container {
border: 2px dashed gray;
display: flex;
}
#flex-auto {
cursor: pointer;
background-color: wheat;
flex: auto;
}
#default {
background-color: lightblue;
}
JavaScript
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 einenflex-Wert vonauto. Derauto-Wert expandiert zu1 1 auto, d.h. das Element darf expandieren. - Das
#default-Element hat keinenflex-Wert gesetzt, daher ist der Standardwertinitial. Derinitial-Wert expandiert zu0 1 auto, d.h. das Element darf nicht expandieren.
Das #default-Element nimmt so viel Platz ein, wie seine Breite benötigt, expandiert jedoch nicht, um mehr Platz einzunehmen. Der gesamte verbleibende Platz wird vom #flex-auto-Element eingenommen.
Wenn Sie auf das #flex-auto-Element klicken, setzen wir die display-Eigenschaft des #default-Elements auf none und entfernen es aus dem Layout. Das #flex-auto-Element expandiert dann, um den gesamten verfügbaren Raum im Container zu besetzen. Wenn Sie erneut auf das #flex-auto-Element klicken, wird das #default-Element wieder in den Container aufgenommen.
Spezifikationen
| Spezifikation |
|---|
| CSS Flexible Box Layout Module Level 1> # flex-property> |