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. 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. Les propriétés détaillées sont flex-shrink, flex-grow et flex-basis.
| 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 |
| Média | visuel |
| 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 :
|
| Ordre canonique | l'ordre d'apparition dans la grammaire formelle des valeurs |
Voir la page Utiliser les boîtes flexibles (flexbox) CSS pour plus d'informations.
Syntaxe
/* 0 0 auto */ flex: none; /* Une valeur sans unité flex-grow */ flex: 2; /* Une valeur, largeur/hauteur: flex-basis */ flex: 10em; flex: 30px; flex: auto; flex: content; /* Deux valeurs : flex-grow | flex-basis */ flex: 1 30px; /* Deux valeurs : flex-grow | flex-shrink */ flex: 2 2; /* Trois valeurs : flex-grow | flex-shrink | flex-basis */ flex: 2 2 10%; /* Valeurs globales */ flex: inherit; flex: initial; flex: unset;
Values
<'flex-grow'>- Voir
flex-grow. Les valeurs négatives sont interdites et la valeur par défaut est1. <'flex-shrink'>- Voir
flex-shrink. Les valeurs négatives sont interdites et la valeur par défaut est1. <'flex-basis'>- Voir
flex-basis. Une valeur valide pourwidthetheight. La valeur par défaut est0%. none- Ce mot-clé correspond à
0 0 auto. -
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 | 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 |
10.0-ms[3] 11.0[3] |
12.10 | 6.1-webkit 9.0 |
| Fonctionnalité | Firefox Mobile (Gecko) | Android | IE Phone | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| Support simple | ? | 4.4 | 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.