คำตอบที่ยอมรับโดย Adam (flex: 1 1 0
) ทำงานได้อย่างสมบูรณ์แบบสำหรับบรรจุภัณฑ์แบบเฟล็กบ็อกซ์ที่มีความกว้างคงที่หรือกำหนดโดยบรรพบุรุษ สถานการณ์ที่คุณต้องการให้เด็ก ๆ พอดีกับภาชนะ
อย่างไรก็ตามคุณอาจมีสถานการณ์ที่คุณต้องการให้ภาชนะบรรจุพอดีกับเด็กโดยที่เด็ก ๆ จะมีขนาดเท่ากันตามขนาดของเด็กที่ใหญ่ที่สุด คุณสามารถสร้างคอนเทนเนอร์ flexbox ให้เหมาะกับลูกของมันได้โดย:
- การตั้งค่า
position: absolute
และไม่ได้ตั้งค่าwidth
หรือright
หรือ
- วางไว้ในเสื้อคลุมด้วย
display: inline-block
สำหรับคอนเทนเนอร์ flexbox ดังกล่าวคำตอบที่ยอมรับไม่ทำงานเด็ก ๆ จะมีขนาดไม่เท่ากัน ฉันคิดว่านี่เป็นข้อ จำกัด ของ flexbox เนื่องจากมันทำงานเหมือนกันใน Chrome, Firefox และ Safari
การแก้ปัญหาคือการใช้กริดแทน flexbox
การสาธิต: 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
คุณสมบัติเป็นที่พักจดชวเลขสำหรับflex-grow
,flex-shrink
และflex-basis
คุณสมบัติ ขอแนะนำให้ใช้ชวเลขและมากกว่าคุณสมบัติแต่ละอันเนื่องจากชวเลขและรีเซ็ตองค์ประกอบที่ไม่ได้รับการระบุใด ๆ อย่างถูกต้องเพื่อรองรับการใช้งานทั่วไป0 1 auto
ค่าเริ่มต้นคือ