Dalam tata letak 3 baris:
- baris atas harus berukuran sesuai dengan isinya
- baris bawah harus memiliki ketinggian tetap dalam piksel
- baris tengah harus diperluas untuk mengisi wadah
Masalahnya adalah bahwa ketika konten utama mengembang, ia menekan baris header dan footer:
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; */
}
Biola:
- http://jsfiddle.net/7yLFL/1/ (berfungsi, dengan konten kecil)
- http://jsfiddle.net/7yLFL/ (rusak, dengan konten yang lebih besar)
Saya dalam situasi beruntung bahwa saya dapat menggunakan CSS terbaru dan terhebat, mengabaikan browser lawas. Saya pikir saya bisa menggunakan tata letak fleksibel untuk akhirnya menyingkirkan tata letak berbasis tabel lama. Untuk beberapa alasan, itu tidak melakukan apa yang saya inginkan ...
Sebagai catatan, ada banyak pertanyaan terkait pada SO tentang "mengisi ketinggian yang tersisa", tetapi tidak ada yang menyelesaikan masalah yang saya alami dengan flex. Referensi:
- Buat div mengisi ketinggian ruang layar yang tersisa
- Isi sisa ruang vertikal - hanya CSS
- Punya div untuk mengisi tinggi / sisa wadah yang tersisa saat membagikannya dengan div lain?
- Buat stretch div bersarang hingga 100% dari ketinggian div kontainer yang tersisa
- Bagaimana saya bisa membuat tata letak flexbox saya mengambil ruang vertikal 100%?
- dll