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
Jawaban:
Sederhanakan: DEMO
Versi layar penuh
sumber
flex: 1
keflex-grow: 1
. Terima kasih atas solusinya!Contoh di bawah ini mencakup perilaku pengguliran jika konten komponen pusat yang diperluas melampaui batasnya. Komponen tengah juga mengambil 100% ruang yang tersisa di viewport.
jsfiddle di sini
Contoh html yang dapat digunakan untuk menunjukkan perilaku ini
sumber
html
dari pemilih dan appylingheight: 100vh
untukbody
secara khusus: jsfiddle.net/pm6nqcqh/1Pendekatan yang lebih modern adalah dengan menggunakan properti grid.
sumber
Gunakan
flex-grow
properti ke div konten utama dan berikandispaly: flex;
ke induknya;sumber
section
ketinggian tidak diperbaiki?) Daripada menggunakanposition: absolute
?position: absolute;
. https://jsfiddle.net/xa26brzf/