flex
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2015.
La propriété raccourcie CSS flex définit comment un élément flexible va grandir ou rétrécir pour occuper l'espace disponible dans son conteneur flexible.
Exemple interactif
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">Modifiez moi</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;
}
Syntaxe
/* Valeur avec un mot-clé */
flex: none; /* 0 0 auto */
/* Une valeur sans unité pour flex-grow
flex-basis vaut alors 0% */
flex: 2; /* 2 1 0% */
/* Une valeur, largeur/hauteur : flex-basis */
flex: auto; /* 1 1 auto */
flex: 10em; /* 1 1 10em */
flex: 30%;
flex: min-content;
/* Deux valeurs : flex-grow | flex-basis */
flex: 1 30px; /* 1 1 30px */
/* Deux valeurs : flex-grow | flex-shrink */
flex: 2 2; /* 2 2 0% */
/* Trois valeurs : flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;
/* Valeurs globales */
flex: inherit;
flex: initial; /* 0 1 auto */
flex: revert;
flex: revert-layer;
flex: unset;
La propriété flex peut être définie avec une, deux ou trois valeurs.
-
Avec une valeur, la syntaxe doit être :
- une valeur valide pour
<flex-grow>: dans tous les navigateurs, la propriété raccourcie est alors étendue enflex: <flex-grow> 1 0%. Cependant, la spécification indique qu'elle devrait être étendue enflex: <flex-grow> 1 0. - une valeur valide pour
<flex-basis>: la propriété raccourcie est alors étendue enflex: 1 1 <flex-basis>. - le mot-clé
noneou l'un des mots-clés globaux.
- une valeur valide pour
-
Avec deux valeurs :
-
La première valeur doit être une valeur valide pour
flex-grow. -
La seconde valeur doit être l'une des suivantes :
- une valeur valide pour
flex-shrink: dans tous les navigateurs, la propriété raccourcie est alors étendue enflex: <flex-grow> <flex-shrink> 0%. - une valeur valide pour
flex-basis: la propriété raccourcie est alors étendue enflex: <flex-grow> 1 <flex-basis>.
- une valeur valide pour
-
-
Avec trois valeurs : les valeurs doivent être dans l'ordre suivant :
- une valeur valide pour
flex-grow. - une valeur valide pour
flex-shrink. - une valeur valide pour
flex-basis.
- une valeur valide pour
Valeurs
<'flex-grow'>-
Définit la propriété
flex-growde l'élément flexible. Les valeurs négatives sont interdites. La valeur par défaut est1si elle est omise (initiale :0). <'flex-shrink'>-
Définit la propriété
flex-shrinkde l'élément flexible. Les valeurs négatives sont interdites. La valeur par défaut est1si elle est omise (initiale :1). <'flex-basis'>-
Définit la propriété
flex-basisde l'élément flexible. La valeur par défaut est0%si elle est omise. La valeur initiale estauto. none-
L'élément est dimensionné selon ses propriétés
widthetheight. Il n'est pas flexible : il ne peut ni rétrécir ni grandir par rapport au conteneur flexible. Cela équivaut àflex: 0 0 auto.
Les effets flexbox les plus courants peuvent être obtenus avec les valeurs flex suivantes :
-
initial: L'élément flexible ne grandit pas mais peut rétrécir. Cette valeur par défaut équivaut àflex: 0 1 auto. L'élément est dimensionné selon ses propriétéswidthouheight, selon la direction duflex-direction. S'il y a un espace négatif disponible, l'élément rétrécira à sa taille minimale pour s'adapter au conteneur, mais il ne grandira pas pour absorber l'espace positif disponible dans le conteneur flexible. -
auto: L'élément flexible peut grandir et rétrécir. Cette valeur équivaut àflex: 1 1 auto. L'élément est dimensionné selon ses propriétéswidthouheight, selon la direction duflex-direction, mais il grandit pour absorber l'espace positif disponible dans le conteneur flexible ou rétrécit à sa taille minimale pour s'adapter au conteneur en cas d'espace négatif. L'élément flexible est totalement flexible. -
none: L'élément flexible ne grandit ni ne rétrécit. Cette valeur équivaut àflex: 0 0 auto. L'élément est dimensionné selon ses propriétéswidthouheight, selon la direction du conteneur flexible. L'élément flexible est totalement inflexible. -
flex: <number [1,∞]>: La taille principale de l'élément flexible sera proportionnelle au nombre défini. Cette valeur équivaut àflex: <number> 1 0. Cela définitflex-basisà zéro et rend l'élément flexible. L'élément sera au moins aussi large ou haut que sa taille minimale, l'espace positif disponible du conteneur étant réparti proportionnellement selon les facteurs de croissance de cet élément et de ses éléments frères. Si tous les éléments flex utilisent ce modèle, ils seront tous dimensionnés en proportion de leur valeur numérique.Attention : Les navigateurs utilisent la valeur
flex-basis0%lorsque la propriétéflex-basisn'est pas définie dans une valeurflex. Ce n'est pas la même chose que la valeurflex-basis0indiquée par la spécification. Cela peut affecter la mise en page flexible dans certains cas. Voyez cet effet démontré dans l'exempleflex-basis0contre0%.
Description
Pour la plupart des cas, on utilisera une des valeurs suivantes : auto, initial, none ou un nombre positif sans unité. Pour voir l'effet de ces valeurs, essayez de redimensionner les conteneurs flexibles ci-après :
Par défaut, les éléments flexibles ne se rétrécissent pas en dessous de la taille minimale du contenu (min-content). Pour modifier ce comportement, il faudra paramétrer min-width ou min-height.
Définition formelle
| Valeur initiale | pour chaque propriété individuelle de la propriété raccourcie :
|
|---|---|
| Applicabilité | éléments flexibles, y compris les pseudo-éléments intégrés dans le flux |
| Héritée | non |
| Valeur calculée | pour chaque propriété individuelle de la propriété raccourcie :
|
| Type d'animation | pour chaque propriété individuelle de la propriété raccourcie :
|
Syntaxe formelle
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
Exemples
>Définir flex: auto
Cet exemple montre comment un élément flexible avec flex: auto grandit pour absorber tout espace libre dans le conteneur.
HTML
<div id="flex-container">
<div id="flex-auto">
flex: auto (cliquez pour supprimer/ajouter la boîte `flex: initial`)
</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";
});
Résultat
Le conteneur flexible contient deux éléments flexibles :
- L'élément
#flex-autoa une valeurflexdeauto. La valeurautos'étend en1 1 auto, c'est-à-dire que l'élément peut s'agrandir. - L'élément
#defaultn'a pas de valeurflexdéfinie, il prend donc la valeur par défautinitial. La valeurinitials'étend en0 1 auto, c'est-à-dire que l'élément ne peut pas s'agrandir.
L'élément #default occupe autant d'espace que sa largeur le nécessite, mais ne s'agrandit pas pour occuper plus d'espace. Tout l'espace restant est occupé par l'élément #flex-auto.
Lorsque vous cliquez sur l'élément #flex-auto, vous définissez la propriété display de l'élément #default à none, ce qui le retire de la mise en page. L'élément #flex-auto s'agrandit alors pour occuper tout l'espace disponible dans le conteneur. Cliquer à nouveau sur l'élément #flex-auto ajoute l'élément #default au conteneur.
Spécifications
| Specification |
|---|
| CSS Flexible Box Layout Module Level 1> # flex-property> |