Die akzeptierte Antwort von Adam ( flex: 1 1 0
) funktioniert perfekt für Flexbox-Container, deren Breite entweder fest ist oder von einem Vorfahren bestimmt wird. Situationen, in denen die Kinder in den Container passen sollen.
Möglicherweise möchten Sie jedoch, dass der Container zu den Kindern passt, wobei die Kinder gleich groß sind, basierend auf dem größten Kind. Sie können einen Flexbox-Container an folgende Elemente anpassen:
- Einstellung
position: absolute
und nicht Einstellung width
oder right
, oder
- Legen Sie es in eine Hülle mit
display: inline-block
Bei solchen Flexbox-Containern funktioniert die akzeptierte Antwort NICHT , die Kinder sind nicht gleich groß. Ich gehe davon aus, dass dies eine Einschränkung der Flexbox ist, da sie sich in Chrome, Firefox und Safari gleich verhält.
Die Lösung besteht darin, ein Raster anstelle einer Flexbox zu verwenden.
Demo: 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
Eigenschaft ist eine zusammenfassende Eigenschaft für dieflex-grow
,flex-shrink
undflex-basis
Eigenschaften. Es wird empfohlen, die Kurzform über den einzelnen Eigenschaften zu verwenden, da die Kurzschrift alle nicht angegebenen Komponenten korrekt zurücksetzt, um den allgemeinen Verwendungszwecken gerecht zu werden. Der Anfangswert ist0 1 auto
.