Je veux utiliser flexbox qui a un certain nombre d'éléments qui ont tous la même largeur. J'ai remarqué que flexbox répartit l'espace de manière uniforme, plutôt que l'espace lui-même.
Par exemple:
.header {
display: flex;
}
.item {
flex-grow: 1;
text-align: center;
border: 1px solid black;
}
<div class="header">
<div class="item">asdfasdfasdfasdfasdfasdf</div>
<div class="item">z</div>
</div>
Le premier élément est beaucoup plus gros que le second. Si j'ai 3 éléments, 4 éléments ou n éléments, je veux qu'ils apparaissent tous sur la même ligne avec une quantité égale d'espace par élément.
Des idées?
flex
propriété est une propriété abrégée pour les propriétésflex-grow
,flex-shrink
etflex-basis
. Il est recommandé d'utiliser le raccourci sur les propriétés individuelles car le raccourci réinitialise correctement tous les composants non spécifiés pour s'adapter aux utilisations courantes. La valeur initiale est0 1 auto
.min-width: 0
pour réussir à utiliser des éléments enfants avec du texte débordant. Voir css-tricks.com/flexbox-truncated-textVous pourriez ajouter
flex-basis: 100%
pour y parvenir.Exemple mis à jour
Pour ce que ça vaut, vous pouvez également utiliser
flex: 1
pour les mêmes résultats.Le raccourci de
flex: 1
est le même queflex: 1 1 0
, ce qui équivaut à:la source
flex: 0 1 auto
. Ce qui signifie que le réglageflex: 1
entraîneraflex: 1 1 auto
. Cela ne fonctionnera pas. La bonne réponse estflex: 1 1 0
comme indiqué ci-dessus par Adamflex: 1
résultatsflex: 1 1 0
n'est pasflex: 1 1 auto
comme vous le prétendez. Jetez un œil à la spécification officielle W3 dans la section 'flex shorthand' : quandflex-basis
est "omis du raccourci flex, sa valeur spécifiée est0
", nonauto
. Merci pour le vote défavorable aléatoire.flex: 1
etflex-direction: column
. La hauteur des enfants n'était pas la même lorsque d'autres éléments sont placés dans les enfants. La seule chose qui l'a corrigé était le réglageflex: 1 1 0
. Il existe toujours aujourd'hui avec du chrome 55.0.2883.87flex: 1
a le même comportement queflex: 1 1 0
etflex: 0 1 auto
a un comportement différent.Vous devez ajouter
width: 0
pour rendre les colonnes égales si le contenu des éléments l'agrandit.la source
.item
fait devenir plus large qu'il.item
ne le serait naturellement.flex: 1 1 0;
, au lieu deflex-grow: 1 1 0;
flex-basis
à a0
le même objectif que le réglage dewidth
à0
.La réponse acceptée par Adam (
flex: 1 1 0
) fonctionne parfaitement pour les conteneurs flexbox dont la largeur est soit fixe, soit déterminée par un ancêtre. Situations où vous voulez que les enfants rentrent dans le conteneur.Cependant, vous pouvez avoir une situation où vous voulez que le conteneur s'adapte aux enfants, avec les enfants de taille égale en fonction du plus grand enfant. Vous pouvez adapter un conteneur flexbox à ses enfants en:
position: absolute
et non réglagewidth
ouright
, oudisplay: inline-block
Pour de tels conteneurs flexbox, la réponse acceptée ne fonctionne PAS , les enfants ne sont pas de taille égale. Je présume qu'il s'agit d'une limitation de la flexbox, car elle se comporte de la même manière dans Chrome, Firefox et Safari.
La solution est d'utiliser une grille au lieu d'une flexbox.
Démo: https://codepen.io/brettdonald/pen/oRpORG
la source
Je ne suis pas un expert en flex mais j'y suis arrivé en définissant la base à 50% pour les deux éléments dont je m'occupais. Passez à 1 et réduisez à 0.
Style en ligne:
flex: '1 0 50%',
la source