ในรูปแบบ 3 แถว:
- แถวด้านบนควรมีขนาดตามเนื้อหา
- แถวด้านล่างควรมีความสูงคงที่เป็นพิกเซล
- แถวกลางควรขยายเพื่อเติมตู้คอนเทนเนอร์
ปัญหาคือว่าเมื่อเนื้อหาหลักขยายออกมันจะบีบแถวส่วนหัวและส่วนท้าย:
HTML:
<section>
<header>
header: sized to content
<br>(but is it really?)
</header>
<div>
main content: fills remaining space<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- uncomment to see it break - ->
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- -->
</div>
<footer>
footer: fixed height in px
</footer>
</section>
CSS:
section {
display: flex;
flex-flow: column;
align-items: stretch;
height: 300px;
}
header {
flex: 0 1 auto;
background: tomato;
}
div {
flex: 1 1 auto;
background: gold;
overflow: auto;
}
footer {
flex: 0 1 60px;
background: lightgreen;
/* fixes the footer: min-height: 60px; */
}
ซอ:
- http://jsfiddle.net/7yLFL/1/ (ทำงานด้วยเนื้อหาขนาดเล็ก)
- http://jsfiddle.net/7yLFL/ (แตกด้วยเนื้อหาที่ใหญ่กว่า)
ฉันอยู่ในสถานการณ์ที่โชคดีที่ฉันสามารถใช้ CSS ล่าสุดและยิ่งใหญ่ที่สุดในเบราว์เซอร์เดิมโดยไม่สนใจ ฉันคิดว่าฉันสามารถใช้เค้าโครงแบบยืดหยุ่นเพื่อกำจัดเค้าโครงตารางแบบเก่าได้ในที่สุด ด้วยเหตุผลบางอย่างมันไม่ได้ทำสิ่งที่ฉันต้องการ ...
สำหรับบันทึกมีคำถามที่เกี่ยวข้องมากมายเกี่ยวกับ SO เกี่ยวกับ "การเติมความสูงที่เหลืออยู่" แต่ไม่มีอะไรที่แก้ปัญหาที่ฉันกำลังดิ้น refs:
- ทำให้ div เติมความสูงของพื้นที่หน้าจอที่เหลือ
- เติมพื้นที่แนวตั้งที่เหลือ - เฉพาะ CSS
- มี div เพื่อกรอกความสูง / ความกว้างที่เหลือของคอนเทนเนอร์เมื่อแชร์กับ div อื่นหรือไม่?
- ทำให้ div ที่ซ้อนกันยืดได้ถึง 100% ของความสูง div คอนเทนเนอร์ที่เหลือ
- ฉันจะทำให้เค้าโครง flexbox ของฉันใช้พื้นที่แนวตั้ง 100% ได้อย่างไร
- ฯลฯ