Verwenden Sie display:flex, um den verbleibenden vertikalen Raum mithilfe von CSS zu füllen
P粉794851975
2023-08-23 22:23:14
<p>In einem 3-Zeilen-Layout: </p>
<ul>
<li>Die Größe der oberen Zeile sollte ihrem Inhalt entsprechen</li>
<li>Die untere Zeile sollte eine feste Höhe in Pixeln haben</li>
<li>Die mittlere Reihe sollte sich erweitern, um den Behälter zu füllen</li>
</ul>
<p>Das Problem besteht darin, dass bei der Erweiterung des Hauptinhalts die Kopf- und Fußzeilen zusammengedrückt werden: </p>
<p><br /></p>
<pre class="brush:css;toolbar:false;">section {
Anzeige: Flex;
Flex-Flow: Spalte;
align-items: stretch;
Höhe: 300px;
}
Header {
Flex: 0 1 automatisch;
Hintergrund: Tomate;
}
div {
Flex: 1 1 Auto;
Hintergrund: Gold;
Überlauf: automatisch;
}
Fusszeile {
Flex: 0 1 60px;
Hintergrund: hellgrün;
/* korrigiert die Fußzeile: min-height: 60px;
}</pre>
<pre class="brush:html;toolbar:false;"><section>
<Kopfzeile>
Kopfzeile: an den Inhalt angepasst
<br>(aber ist es das wirklich?)
</header>
<div>
Hauptinhalt: füllt verbleibenden Platz<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- Kommentar entfernen, um zu sehen, wie es funktioniert - ->
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>
<Fußzeile>
Fußzeile: feste Höhe in px
</footer>
</section></pre>
<p><br /></p>
<p><strong>Violine:</strong></p>
<ul>
<li>http://jsfiddle.net/7yLFL/1/ (läuft, weniger Inhalt)</li>
<li>http://jsfiddle.net/7yLFL/ (beschädigt, großer Inhalt)</li>
</ul>
<p>Ich habe das Glück, unabhängig von älteren Browsern das neueste und beste CSS verwenden zu können. Ich denke, ich könnte das Flex-Layout verwenden, um das alte tabellenbasierte Layout endlich loszuwerden. Aus irgendeinem Grund macht es nicht das, was ich will...</p>
<p>Fürs Protokoll: Auf SO gibt es viele verwandte Fragen zum Thema „Auffüllen der verbleibenden Höhe“, aber keine davon löst das Problem, das ich mit Flex habe. Referenz:</p>
<ul>
<li>Lassen Sie die Höhe des Div den verbleibenden Bildschirmraum ausfüllen</li>
<li>Verbleibenden vertikalen Raum füllen – nur CSS</li>
<li>Füllt ein Div die verbleibende Höhe/Breite des Containers aus, wenn der Container mit einem anderen Div geteilt wird? </li>
<li>Das verschachtelte Div auf 100 % der Höhe des verbleibenden Container-Divs ausdehnen</li>
<li>Wie kann ich dafür sorgen, dass ein Flexbox-Layout 100 % des vertikalen Raums einnimmt? </li>
<li>Warten</li>
</ul><p><br /></p>
下面的示例包括当展开的中心组件的内容超出其边界时的滚动行为。此外,中心组件占用视口中 100% 的剩余空间。
jsfiddle 这里
可用于演示此行为的 html 示例
简单一点:DEMO