Adam ( flex: 1 1 0
) tarafından kabul edilen cevap , genişliği sabit veya bir ata tarafından belirlenen flexbox kapları için mükemmel çalışır. Çocukların konteynere sığmasını istediğiniz durumlar.
Bununla birlikte, kabın çocuklara uymasını istediğiniz bir durum olabilir, çocuklar en büyük çocuğa göre eşit boyuttadır. Bir flexbox kabını çocuklarından herhangi birine göre yapabilirsiniz:
- ayar
position: absolute
değil width
veya ayarlamama veya right
, veya
- ile bir sargı içine yerleştirin
display: inline-block
Böyle FlexBox kaplar için, kabul edilen cevap yapar DEĞİL işi, çocuk eşit büyüklükte değildir. Chrome, Firefox ve Safari'de aynı şekilde davrandığından, bunun flexbox'ın bir sınırlaması olduğunu varsayıyorum.
Çözüm, esnek kutu yerine ızgara kullanmaktır.
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
Özelliğinflex-grow
,flex-shrink
veflex-basis
özellikleri için bir kısayol özelliği olduğuna dikkat edilmelidir . Steno, genel kullanımları karşılamak için belirtilmemiş bileşenleri doğru şekilde sıfırladığı için stenoyu bireysel özelliklerin üzerinde kullanmanız önerilir. Başlangıç değeri0 1 auto
.