使用 display:flex 使用 CSS 填滿剩餘的垂直空間
P粉794851975
2023-08-23 22:23:14
<p>在 3 行佈局:</p>
<ul>
<li>上排的大小應依其內容而定</li>
<li>底行應具有固定的高度(以像素為單位)</li>
<li>中間行應展開以填滿容器</li>
</ul>
<p>問題在於,隨著主要內容的擴展,它會擠壓頁首和頁尾行:</p>
<p><br /></p>
<pre class="brush:css;toolbar:false;">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; */
}</pre>
<pre class="brush:html;toolbar:false;"><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></pre>
<p><br /></p>
<p><strong>小提琴:</strong></p>
<ul>
<li>http://jsfiddle.net/7yLFL/1/(正在運行,內容較少)</li>
<li>http://jsfiddle.net/7yLFL/(已損壞,內容較大)</li>
</ul>
<p>我很幸運,可以使用最新、最好的 CSS,而無需考慮舊版瀏覽器。我想我可以使用彈性佈局來最終擺脫舊的基於表格的佈局。由於某種原因,它沒有做我想做的事......</p>
<p>根據記錄,SO上有很多關於「填充剩餘高度」的相關問題,但沒有任何問題可以解決我在使用flex時遇到的問題。參考資料:</p>
<ul>
<li>讓 div 填滿剩餘螢幕空間的高度</li>
<li>填滿剩餘的垂直空間 - 僅 CSS</li>
<li>與另一個 div 共用容器時是否有一個 div 來填充容器的剩餘高度/寬度? </li>
<li>使嵌套 div 拉伸至剩餘容器 div 高度的 100%</li>
<li>如何讓 Flexbox 佈局佔據 100% 垂直空間? </li>
<li>等等</li>
</ul><p><br /></p>
下面的範例包括當展開的中心元件的內容超出其邊界時的滾動行為。此外,中心組件佔用視窗中 100% 的剩餘空間。
jsfiddle 這裡
#可用於示範此行為的 html 範例
簡單一點:DEMO
#