MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

La propriété flex est une propriété raccourcie qui définit la capacité d'un élément flexible à modifier ses dimensions afin de remplir l'espace disponible de son conteneur. Les éléments flexibles peuvent être étirés ou réduits pour utiliser un espace proportionnel à leur coefficient de grossissement ou de rétrécissement afin de ne pas dépasser d'un conteneur.

/* Valeurs de base */
flex: auto;
flex: initial;
flex: none;

/* Une valeur sans unité pour flex-grow */
/* flex-basis vaut alors 0 */
flex: 2;

/* Une valeur, largeur/hauteur: flex-basis */
flex: 10em;
flex: 30px;
flex: content;

/* Deux valeurs : flex-grow | flex-basis */
flex: 1 30px;

/* Deux valeurs : flex-grow | flex-shrink */
/* flex-basis vaut alors 0 */
flex: 2 2;

/* Trois valeurs : flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;

/* Valeurs globales */
flex: inherit;
flex: initial;
flex: unset;

Les propriétés détaillées correspondantes à cette propriété raccourcie sont flex-shrink, flex-grow et flex-basis.

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 :

auto
L'élément est dimensionné selon ses propriétés width et height mais peut grandir pour absorber l'espace libre disponible dans le conteneur flexible ou rétrécir à sa taille minimale pour rentrer dans le conteneur. Cette valeur est équivalente à "flex: 1 1 auto".
initial
La valeur par défaut. L'élément est dimensionné selon ses propriétés width et height. Si besoin, l'élément rétrécit à sa taille minimale pour rentrer dans lee conteneur mais il ne grandira pas s'il y a de l'espace disponible dans ce conteneur. Ce mot-clé est équivalent à "flex: 0 1 auto".
none
L'élément est dimensionné par rapport à ses propriétés width et height. Il n'est pas flexible : il ne peut ni rétrécir ni grandir selon l'espace du conteneur flexible. Ce mot-clé est équivalent à "flex: 0 0 auto".
<positive-number>
Le nombre indique la proportion d'espace disponible qui peut être consommée par l'élément dans le conteneur flexible. Cette valeur est équivalente à "flex: <positive-number> 1 0".

Par défaut, les éléments flexibles ne se rétrécissent pas en dessous de la taille minimale du contenu. Pour modifier ce comportement, il faudra paramétrer min-width ou min-height.

Valeur initialepour 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éenon
Médiavisuel
Valeur calculéepour chaque propriété individuelle de la propriété raccourcie :
  • flex-grow: comme spécifié
  • flex-shrink: comme spécifié
  • flex-basis: comme spécifié, mais avec les longueurs relatives converties en longueurs absolues
Type d'animationpour chaque propriété individuelle de la propriété raccourcie :
Ordre canoniquel'ordre d'apparition dans la grammaire formelle des valeurs

Voir la page Utiliser les boîtes flexibles (flexbox) CSS pour plus d'informations.

Syntaxe

La propriété flex peut être définie avec une, deux ou trois valeurs.

Avec une valeur, la syntaxe doit être :

  • un nombre sans unité (<number>) : celui-ci est alors interprété comme la valeur de <flex-grow>
  • ou une valeur de largeur valide (width) : celle-ci est alors interprétée comme la valeur de <flex-basis>
  • ou le mot-clé none.

Avec deux valeurs, la première doit être un nombre sans unité (<number>) qui correspond à la valeur de <flex-grow>. La seconde valeur doit être :

  • un nombre sans unité (<number>) : celui-ci est alors interprété comme la valeur de <flex-shrink>
  • ou une valeur de largeur valide (width) : celle-ci est alors interprétée comme la valeur de <flex-basis>

Avec trois valeurs :

  • la première valeur doit être un nombre sans unité (<number>) : celui-ci est alors interprété comme la valeur de <flex-grow>
  • la deuxième valeur doit être un nombre sans unité (<number>) : celui-ci est alors interprété comme la valeur de <flex-shrink>
  • la troisième valeur doit être une valeur de largeur valide (width) : celle-ci est alors interprétée comme la valeur de <flex-basis>

Valeurs

<'flex-grow'>
Voir flex-grow. Les valeurs négatives sont interdites et la valeur par défaut est 0.
<'flex-shrink'>
Voir flex-shrink. Les valeurs négatives sont interdites et la valeur par défaut est 1.
<'flex-basis'>
Voir flex-basis. Une valeur valide pour width et height. La valeur par défaut est auto.
none
Ce mot-clé correspond à 0 0 auto.
Note : Lorsqu'on utilise une ou deux valeurs sans unité dans la règle, flex-basis vaudra 0. Pour plus d'informations, voir le brouillon de spécification du module des boîtes flexibles.

Syntaxe formelle

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

Exemples

CSS

#flex-container {
	display: -webkit-flex;
	display: flex;
	-webkit-flex-direction: row;
	flex-direction: row;
}

#flex-container > .flex-item {
	-webkit-flex: auto;
	flex: auto;
}

#flex-container > .raw-item {
	width: 5rem;
}

HTML

<div id="flex-container">
    <div class="flex-item" id="flex">Boîte flexible (cliquer pour passer à la boîte « normale »)</div>
    <div class="raw-item" id="raw">Boîte « normale » </div>
</div>

JavaScript

var flex = document.getElementById("flex");
var raw = document.getElementById("raw");
flex.addEventListener("click", function() {
	raw.style.display = raw.style.display == "none" ? "block" : "none";
});
#flex-container {
	width: 100%;
	font-family: Consolas, Arial, sans-serif;
}

#flex-container > div {
	border: 1px solid #f00;
	padding: 1rem;
}

#flex-container > .raw-item {
	border: 1px solid #000;
}

Résultat

Spécifications

Spécification État Commentaires
CSS Flexible Box Layout Module
La définition de 'flex' dans cette spécification.
Candidat au statut de recommandation Définition initiale.

Compatibilité des navigateurs

Fonctionnalité Firefox (Gecko) Chrome Edge Internet Explorer Opera Safari
Support simple 18.0 (18.0)[1]
20.0 (20.0)
28.0 (28.0)[2]
21.0-webkit
29.0
(Oui)-webkit
(Oui)
10.0-ms[3]
11.0[3]
12.10 6.1-webkit
9.0
Fonctionnalité Firefox Mobile (Gecko) Android Edge IE Phone Opera Mobile Safari Mobile
Support simple ? 4.4 (Oui)-webkit
(Oui)
11 12.10 7.1-webkit

[1] Avec Gecko 18.0 (Firefox 18.0 / Thunderbird 18.0 / SeaMonkey 2.15) et 19.0 (Firefox 19.0 / Thunderbird 19.0 / SeaMonkey 2.16), la prise en charge des boîtes flexibles était masquée par la préférence layout.css.flexbox.enabled qui valait false par défaut (désactivée).

[2] Les boîtes flexibles sur plusieurs lignes sont prises en charge à partir de Gecko 28.0 (Firefox 28.0 / Thunderbird 28.0 / SeaMonkey 2.25).
En plus de la version non préfixée, Gecko 48.0 (Firefox 48.0 / Thunderbird 48.0 / SeaMonkey 2.45) prend en charge la version préfixée par -webkit à des fins de compatibilité web grâce à la préférence layout.css.prefixes.webkit dont la valeur par défaut vaut false. Depuis Gecko 49.0 (Firefox 49.0 / Thunderbird 49.0 / SeaMonkey 2.46), cette valeur par défaut est passée à true.

[3] Internet Explorer 10-11 ignorent l'utilisation de calc dans la partie associée à flex-basis lorsqu'on utilise la propriété raccourcie flex. Pour contourner le problème, on peut utiliser les propriétés détaillées plutôt que la propriété raccourcie. Voir Flexbug #8 pour plus d'informations. De plus, une déclaration flex avec une valeur sans unité pour flex-basis sera considérée invalide et sera ignorée (toujours avec IE 10-11). Pour contourner le problème, il suffit de toujours indiquer une unité pour la partie dédiée à flex-basis. Voir Flexbug #4 pour plus d'informations.

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
 Dernière mise à jour par : SphinxKnight,