228 votes

Qu'est-ce que flex: 1 signifie?

`

Comme nous le savons tous, la propriété flex est un raccourci pour les propriétés flex-grow, flex-shrink, et flex-basis. Sa valeur par défaut est 0 1 auto, ce qui signifie

flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;

mais j'ai remarqué, dans de nombreux endroits flex: 1 est utilisé. Est-ce un raccourci pour 1 1 auto ou 1 0 auto? Je ne comprends pas ce que cela signifie et je n'obtiens rien lorsque je recherche sur Google.

`

2 votes

En citant w3schools.com, "La propriété flex est un raccourci pour les propriétés flex-grow, flex-shrink et flex-basis".

191voto

Dhaval Chheda Points 2262

flex: 1 signifie ce qui suit :

flex-grow : 1;     Le div va se développer dans la même proportion que la taille de la fenêtre       
flex-shrink : 1;   Le div va rétrécir dans la même proportion que la taille de la fenêtre 
flex-basis : 0;    Le div n'a pas de valeur de départ en tant que telle et va 
                     prendre l'écran en fonction de l'espace disponible pour
                     par exemple : si 3 divs sont dans le conteneur alors chaque div prendra 33%.

2 votes

@CookieMonster Non, flex: 1 signifie 1 1 0 ... mais sur IE c'est 1 1 0px

0 votes

@LGSon, Vous pouvez omettre l'unité de la valeur de base donc 1 1 0 et 1 1 0px sont équivalents. IE supporte juste celui avec une unité.

0 votes

@CookieMonster Je sais comment Flexbox fonctionne, je corrigeais simplement ton premier commentaire, qui est erroné.

130voto

blonfu Points 3944

Voici l'explication :

https://www.w3.org/TR/css-flexbox-1/#flex-common

flex:
Équivalent à flex: 1 0. Rend l'élément flex flexible et définit la base flex à zéro, ce qui donne un élément qui reçoit la proportion spécifiée de l'espace libre dans le conteneur flex. Si tous les éléments dans le conteneur flex utilisent ce modèle, leurs tailles seront proportionnelles au facteur flex spécifié.

Par conséquent, flex:1 est équivalent à flex: 1 1 0

0 votes

D'un côté: Je pense que lorsque vous appliquez le même flex à tous les enfants, ce qui compte en réalité est flex: 1 ? 0;, où "?" peut être n'importe quoi, cela ne fera aucune différence

0 votes

@DreamTeK Seulement dans les navigateurs non conformes aux normes comme Chrome.

0 votes

@Toskan Veuillez dire aux personnes qui ont rédigé la spécification qu'elles ont tort et faites-moi savoir comment cela se passe.

116voto

Obsidian Points 2211

SOYEZ PRUDENT

Dans certains navigateurs :

flex:1; ne équivaut pas à flex:1 1 0;

flex:1; = flex:1 1 0n; (où n est une unité de longueur).

  • flex-grow : un nombre spécifiant combien l'élément va croître par rapport au reste des éléments flexibles.
  • flex-shrink : un nombre spécifiant combien l'élément va rétrécir par rapport au reste des éléments flexibles.
  • flex-basis : la longueur de l'élément. Valeurs légales : "auto", "inherit", ou un nombre suivi de "%", "px", "em" ou toute autre unité de longueur.

Le point clé ici est que flex-basis nécessite une unité de longueur.

Dans Chrome par exemple, flex:1 et flex:1 1 0 produisent des résultats différents. Dans la plupart des circonstances, il peut sembler que flex:1 1 0; fonctionne, mais examinons ce qu'il se passe réellement :

EXEMPLE

Flex-basis est ignoré et seul flex-grow et flex-shrink sont appliqués.

flex:1 1 0; = flex:1 1; = flex:1;

Cela peut sembler correct à première vue, cependant, si l'unité appliquée du conteneur est imbriquée, attendez-vous à l'inattendu !

Essayez cet exemple dans CHROME

.Wrap{
  padding:10px;
  background: #333;
}
.Flex110x, .Flex1, .Flex110, .Wrap {
  display: -webkit-flex;
  display: flex;
  -webkit-flex-direction: column;
  flex-direction: column;
}
.Flex110 {
  -webkit-flex: 1 1 0;
  flex: 1 1 0;
}
.Flex1 {
  -webkit-flex: 1;
  flex: 1;
}
.Flex110x{
  -webkit-flex: 1 1 0%;
  flex: 1 1 0%;
}

FLEX 1 1 0

FLEX 1

FLEX 1 1 0%

MISE À JOUR 2021

Les dernières versions de tous les principaux navigateurs semblent implémenter flex: 1 et se conformer à la norme W3C. Cela a été vérifié sur Chrome, Opera, Edge, Firefox, Safari, Chromium et quelques variantes de Chromium comme Brave sur macOS, Windows, Linux, iOS et Android. Lorsqu'on a tenté de tester dans Internet Explorer, le navigateur Edge a été chargé de force sur Windows 10.

Si vous vous attendez à ce que les utilisateurs continuent d'utiliser des versions plus anciennes de navigateur, alors l'ajout d'unités est plus sûr.

1 votes

Lorsque la valeur est 0, l'unité n'est pas obligatoire. La spécification indique que flex: 1 est la même que flex: 1 1 0. Dans votre exemple, si vous supprimez la classe .Wrap dans la règle .Flex110x, .Flex1, .Flex110, .Wrap, cela fonctionne comme prévu.

0 votes

Fournissez un lien s'il vous plaît, je ne trouve pas dans la spécification ce que vous dites. Je n'ai rien inventé, ma réponse est basée sur la spécification flexbox.

0 votes

@Obsidian Voici le lien: w3.org/TR/css-flexbox-1 Si vous allez à la partie 'raccourci', vous trouverez: "flex: [nombre-positif] Équivalent à flex: [nombre-positif] 1 0 ...

16voto

za_ali33 Points 41

J'étais aussi confus avec flex: 1, donc je vais partager ici ma façon de comprendre cette propriété :)

Pour comprendre le concept de flex: 1, tout d'abord, nous devons nous assurer que l'élément parent a une propriété d'affichage définie sur flex, c'est-à-dire, display: flex. Maintenant, les éléments flex imbriqués à l'intérieur du parent peuvent utiliser flex: 1.

D'accord, maintenant la question est de savoir ce que cela va faire à l'élément flex ? Si un élément a flex: 1, cela signifie que la taille de tous les autres éléments aura la même largeur que leur contenu, mais l'élément avec flex: 1 occupera tout l'espace restant qui lui est attribué. Voir l'illustration ci-dessous.

entrer la description de l'image ici

4 votes

La réponse est un peu incomplète car elle ne précise pas que flex: 1; est la forme abrégée de flex: 1 1 0;, qui est à son tour la forme abrégée de : flex-shrink: 1; flex-grow: 1; flex-basis: 0;

14voto

liuliang Points 123

Dans Chrome Ver 84, flex: 1 est équivalent à flex: 1 1 0%. Les captures d'écran suivantes

entrer la description de l'image ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X