Trong bố cục 3 hàng:
- hàng trên cùng phải có kích thước theo nội dung của nó
- hàng dưới cùng phải có chiều cao cố định bằng pixel
- hàng giữa nên mở rộng để lấp đầy container
Vấn đề là khi nội dung chính mở rộng, nó squish các hàng đầu trang và chân trang:
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; */
}
Vĩ cầm:
- http://jsfiddle.net/7yLFL/1/ (đang hoạt động, với nội dung nhỏ)
- http://jsfiddle.net/7yLFL/ (bị hỏng, với nội dung lớn hơn)
Tôi đang ở trong tình huống may mắn rằng tôi có thể sử dụng CSS mới nhất và tốt nhất, bỏ qua các trình duyệt cũ. Tôi nghĩ rằng tôi có thể sử dụng bố trí flex để cuối cùng thoát khỏi các bố cục dựa trên bảng cũ. Vì một số lý do, nó không làm những gì tôi muốn ...
Đối với hồ sơ, có nhiều câu hỏi liên quan về SO về "lấp đầy chiều cao còn lại", nhưng không có gì giải quyết được vấn đề tôi gặp phải với flex. Tham chiếu:
- Tạo một div lấp đầy chiều cao của không gian màn hình còn lại
- Lấp đầy không gian dọc còn lại - chỉ CSS
- Có một div để điền vào chiều cao / chiều rộng còn lại của một container khi chia sẻ nó với div khác không?
- Làm cho div lồng nhau kéo dài đến 100% chiều cao div container còn lại
- Làm cách nào để bố trí flexbox của tôi chiếm 100% không gian dọc?
- Vân vân