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:
- réglage
position: absolute
et non réglage width
ou right
, ou
- placez-le dans un emballage avec
display: 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
<p>Normal scenario — flexbox where the children adjust to fit the container — and the children are made equal size by setting {flex: 1 1 0}</p>
<div id="div0">
<div>
Flexbox
</div>
<div>
Width determined by viewport
</div>
<div>
All child elements are equal size with {flex: 1 1 0}
</div>
</div>
<p>Now we want to have the container fit the children, but still have the children all equally sized, based on the largest child. We can see that {flex: 1 1 0} has no effect.</p>
<div class="wrap-inline-block">
<div id="div1">
<div>
Flexbox
</div>
<div>
Inside inline-block
</div>
<div>
We want all children to be the size of this text
</div>
</div>
</div>
<div id="div2">
<div>
Flexbox
</div>
<div>
Absolutely positioned
</div>
<div>
We want all children to be the size of this text
</div>
</div>
<br><br><br><br><br><br>
<p>So let's try a grid instead. Aha! That's what we want!</p>
<div class="wrap-inline-block">
<div id="div3">
<div>
Grid
</div>
<div>
Inside inline-block
</div>
<div>
We want all children to be the size of this text
</div>
</div>
</div>
<div id="div4">
<div>
Grid
</div>
<div>
Absolutely positioned
</div>
<div>
We want all children to be the size of this text
</div>
</div>
body {
margin: 1em;
}
.wrap-inline-block {
display: inline-block;
}
#div0, #div1, #div2, #div3, #div4 {
border: 1px solid #888;
padding: 0.5em;
text-align: center;
white-space: nowrap;
}
#div2, #div4 {
position: absolute;
left: 1em;
}
#div0>*, #div1>*, #div2>*, #div3>*, #div4>* {
margin: 0.5em;
color: white;
background-color: navy;
padding: 0.5em;
}
#div0, #div1, #div2 {
display: flex;
}
#div0>*, #div1>*, #div2>* {
flex: 1 1 0;
}
#div0 {
margin-bottom: 1em;
}
#div2 {
top: 15.5em;
}
#div3, #div4 {
display: grid;
grid-template-columns: repeat(3,1fr);
}
#div4 {
top: 28.5em;
}
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
.