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 Shorthand-Eigenschaft legt fest, wie sich ein Flex-Item vergrößern oder verkleinern wird, um den verfügbaren Platz im 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;
}
Bestandteileigenschaften
Diese Eigenschaft ist eine Kurzform für folgende 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 wird die Shorthand in allen Browsern zuflex: <flex-grow> 1 0%erweitert. Die Spezifikation besagt jedoch, dass sie zuflex: <flex-grow> 1 0erweitert werden sollte. - ein gültiger Wert für
flex-basis: dann wird die Shorthand zuflex: 1 1 <flex-basis>erweitert. - 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 wird die Shorthand in allen Browsern zuflex: <flex-grow> <flex-shrink> 0%erweitert. - ein gültiger Wert für
flex-basis: dann wird die Shorthand zuflex: <flex-grow> 1 <flex-basis>erweitert.
- ein gültiger Wert für
-
-
Drei-Wert-Syntax: die Werte müssen in der folgenden Reihenfolge sein:
- 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-Items. Negative Werte gelten als ungültig. Standardwert ist1, falls weggelassen. (Initialwert ist0) <'flex-shrink'>-
Definiert das
flex-shrinkdes Flex-Items. Negative Werte gelten als ungültig. Standardwert ist1, falls weggelassen. (Initialwert ist1) <'flex-basis'>-
Definiert das
flex-basisdes Flex-Items. Standardwert ist0%, falls weggelassen. Der Initialwert istauto. none-
Das Element wird entsprechend seiner
width- undheight-Eigenschaften dimensioniert. Es ist vollständig unflexibel: es wächst oder schrumpft nicht im Verhältnis zum Flex-Container. Dies entspricht dem Setzen vonflex: 0 0 auto.
Häufig gewünschte Flexbox-Effekte können mit folgenden flex-Werten erreicht werden:
-
initial: Flex-Element wächst nicht, kann aber schrumpfen. Dieser Standardwert wird zuflex: 0 1 autoerweitert. Das Element wird in der Größe entsprechend seinenwidth- oderheight-Eigenschaften festgelegt, je nachflex-direction. Wenn negativer verfügbarer Platz vorhanden ist, wird das Element auf seine Mindestgröße schrumpfen, um innerhalb des Containers zu passen, wird aber nicht wachsen, um positiven Platz im Flex-Container aufzunehmen. -
auto: Flex-Element kann wachsen und schrumpfen. Dieser Wert wird zuflex: 1 1 autoerweitert. Das Element wird in der Größe entsprechend seinenwidth- oderheight-Eigenschaften festgelegt, abhängig von derflex-direction, wächst jedoch, um verfügbaren positiven Raum im Flex-Container aufzunehmen oder schrumpft auf seine Mindestgröße, um im Container im Falle von negativem Raum zu passen. Das Flex-Element ist vollständig flexibel. -
none: Das Flex-Element wächst nicht und schrumpft nicht. Dieser Wert wird zuflex: 0 0 autoerweitert. Das Element wird entsprechend seinenwidth- oderheight-Eigenschaften festgelegt, 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 wird zuflex: <number> 1 0erweitert. Dies setzt dasflex-basisauf Null und macht das Flex-Element flexibel. Das Element wird mindestens so breit oder hoch sein wie seine Mindestgröße, wobei der positive verfügbare Raum des Containers proportional auf der Grundlage der Wachstumsfaktoren dieses Elements und seiner benachbarten Flex-Elemente verteilt wird. Wenn alle Flex-Elemente dieses Muster verwenden, werden alle in einem Verhältnis zu ihren numerischen Werten dimensioniert.Warnung: Die Browser verwenden den
flex-basis-Wert0%, wenn derflex-basisin einemflex-Wert nicht angegeben ist. Dies ist nicht dasselbe wie derflex-basis-Wert0, den die Spezifikation vorschreibt. Dies kann das Flex-Layout in einigen Fällen beeinflussen. Sehen Sie sich diesen Effekt im Beispiel Flex-basis0versus0%an.
Beschreibung
Für die meisten Zwecke sollten Autoren flex auf einen der folgenden Werte setzen: auto, initial, none oder eine positive einheitslose Zahl. Um die Wirkung 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
| 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-size()> |
any |
<calc-sum>
<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 einstellen
Dieses Beispiel zeigt, wie ein Flex-Element mit flex: auto wächst, um jeden verfügbaren 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 wird zu1 1 autoerweitert, d.h. das Element darf sich ausdehnen. - Das
#default-Element hat keinenflex-Wert gesetzt, daher wird es auf deninitial-Wert standardmäßig gesetzt. Derinitial-Wert wird zu0 1 autoerweitert, d.h. das Element darf sich nicht ausdehnen.
Das #default-Element nimmt so viel Platz ein, wie seine Breite erfordert, wächst jedoch nicht, um mehr Platz einzunehmen. Der gesamte verbleibende Raum wird 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 in den Container eingefügt.
Spezifikationen
| Spezifikation |
|---|
| CSS Flexible Box Layout Module Level 1> # flex-property> |