使用 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