+--------------------+
| |
| |
| |
| |
| 1 |
| |
| |
| |
| |
+--------------------+
| |
| |
| |
| |
| 2 |
| |
| |
| |
| |
+--------------------+
Der Inhalt von (1), wie oben gezeigt, ist unbekannt, da er bei dynamisch erzeugten Seiten zunehmen oder abnehmen kann. Das zweite Div (2) wie oben gezeigt sollte den verbleibenden Raum füllen.
Hier ist ein Beispiel für mein HTML
<div id="full">
<!--contents of 1 -->
<div id="someid">
<!--contents of 2 -->
</div>
</div>
CSS ...
#full{width: 300px; background-color: red;}
#someid{height: 100%;}
Oder ist diese Methode falsch? Wie soll ich das machen? Bitte sehen Sie meine Demo und zeigen Sie mir meinen Fehler.
height:100%
? Meinst du, der Div sollte die verbleibende Höhe einnehmen?Antworten:
Sie sollten dies tun können, wenn Sie ein div (
#header
unten) hinzufügen , um Ihren Inhalt von 1 zu verpacken.Wenn Sie schweben
#header
, wird der Inhalt von#someid
gezwungen, um ihn herum zu fließen.Als nächstes setzen Sie die
#header
Breite auf 100%. Dadurch wird es erweitert, um die Breite des enthaltenen div zu füllen#full
. Dadurch wird der gesamte#someid
Inhalt effektiv nach unten#header
verschoben, da kein Platz mehr um die Seiten herum fließt.Stellen Sie schließlich die
#someid
Höhe auf 100% ein, um die gleiche Höhe wie zu erreichen#full
.JSFiddle
HTML
<div id="full"> <div id="header">Contents of 1</div> <div id="someid">Contents of 2</div> </div>
CSS
html, body, #full, #someid { height: 100%; } #header { float: left; width: 100%; }
Aktualisieren
Ich denke, es ist erwähnenswert, dass Flexbox heutzutage in modernen Browsern gut unterstützt wird. Das CSS könnte geändert werden und ist
#full
zu einem Flex-Container geworden. Sollte#someid
das Flex-Wachstum auf einen Wert größer als eingestellt werden0
.html, body, #full { height: 100%; } #full { display: flex; flex-direction: column; } #someid { flex-grow: 1; }
quelle
#someid
dies#full
trotz der Höhe von IMMER der Höhe von entspricht#header
. Logischerweise sollte der Inhalt von#someid
oben beginnen#full
. Warum wird#header
der Inhalt nach unten gedrückt?#someid
die gleiche Höhe wie macht#full
, also um die Höhe von#someid
überläuft . Es wird nicht auf 100% des verbleibenden Speicherplatzes festgelegt. Wenn Sie setzen auf würden Sie das Problem sehen.#full
#header
#someid
overflow: scroll;
#someid
calc
undflexbox
Layouts nicht allgemein unterstützt wurden. Schauen Sie, wie weit wir in weniger als 3 Jahren gekommen sind!Um eine
div
Höhe von bis zu 100% auf einer Seite zu erreichen, müssen Sie jedes Objekt in der Hierarchie über dem div ebenfalls auf 100% setzen. zum Beispiel:html { height:100%; } body { height:100%; } #full { height: 100%; } #someid { height: 100%; }
Obwohl ich Ihre Frage nicht vollständig verstehen kann, gehe ich davon aus, dass Sie dies meinen.
Dies ist das Beispiel, an dem ich arbeite:
<html style="height:100%"> <body style="height:100%"> <div style="height:100%; width: 300px;"> <div style="height:100%; background:blue;"> </div> </div> </body> </html>
Style
ist nur ein Ersatz für das CSS, das ich nicht ausgelagert habe.quelle
someid
auch 100% sein möchten , müssen Sie 100% hinzufügen und den Container ebenfalls auf 100% setzen. Ich habe meine Frage bearbeitet, um dies zu zeigen.Dies kann mit Tabellen erfolgen:
<table cellpadding="0" cellspacing="0" width="100%" height="100%"> <tr height="0%"><td> <div id="full"> <!--contents of 1 --> </div> </td></tr> <tr><td> <div id="someid"> <!--contents of 2 --> </div> </td></tr> </table>
Wenden Sie dann CSS an, damit etwas den verbleibenden Raum ausfüllt:
#someid { height: 100%; }
Jetzt kann ich nur noch die wütenden Rufe aus der Menge hören: "Oh nein, er benutzt Tische! Füttere ihn den Löwen!" Bitte hör mir zu.
Im Gegensatz zu der akzeptierten Antwort, die nichts anderes bewirkt, als den Container auf die volle Höhe der Seite zu verteilen, füllt Div # 2 bei dieser Lösung den verbleibenden Platz, wie in der Frage gefordert. Wenn Sie dieses zweite Div benötigen, um die ihm zugewiesene volle Höhe auszufüllen, ist dies derzeit die einzige Möglichkeit, dies zu tun.
Aber zögern Sie nicht, mir das Gegenteil zu beweisen! CSS ist immer besser.
quelle
html, body { height: 100%; } .parent { display: flex; flex-flow:column; height: 100%; background: white; } .child-top { flex: 0 1 auto; background: pink; } .child-bottom { flex: 1 1 auto; background: green; }
<div class="parent"> <div class="child-top"> This child has just a bit of content </div> <div class="child-bottom"> And this one fills the rest </div> </div>
quelle
Ich weiß, dass dies ein verspäteter Eintrag ist, aber selbst im Jahr 2016 bin ich überrascht über den völligen Mangel an IE-Unterstützung für Flex (derzeit ist 11 die einzige, die dies unterstützt, und es ist größtenteils fehlerhaft unter http://caniuse.com/#feat=) flexbox ) was aus geschäftlicher Sicht nicht so toll ist! Also denke ich, bis der IE heruntergefahren ist, muss die beste und browserübergreifendste Lösung sicherlich eine JS / Jquery sein?
Die meisten Websites verwenden bereits Jquery und ein sehr einfaches Beispiel (für meinen Code) ist:
$('#auto_height_item').height($(window).height() - $('#header').height());
Sie können natürlich Fenster und Kopfzeile ersetzen und die grundlegende Mathematik die Arbeit machen lassen. Persönlich bin ich immer noch nicht von Flex überzeugt ...
quelle
Ich habe dies für zu kurze Seiten hinzugefügt.
html:
<section id="secondary-foot"></section>
CSS:
section#secondary-foot { height: 100%; background-color: #000000; position: fixed; width: 100%; }
quelle
Erstellen Sie ein Div, das beide Divs (full und someid) enthält, und stellen Sie die Höhe dieses Divs auf Folgendes ein:
Höhe: 100vh;
Die Höhe der enthaltenen Divs (full und someid) sollte auf "auto" eingestellt sein. Das ist alles.
quelle
Ich weiß, dass dies eine alte Frage ist, aber heutzutage gibt es eine supereinfache Form, nämlich CCS Grid. Lassen Sie mich die Divs als Beispiel nennen:
<div id="full"> <div id="header">Contents of 1</div> <div id="someid">Contents of 2</div> </div>
dann der CSS-Code:
.full{ width:/*the width you need*/; height:/*the height you need*/; display:grid; grid-template-rows: minmax(100px,auto) 1fr; }
Und das war's, die zweite Reihe, Scilicet, die Seite, wird aufgrund der Eigenschaft 1fr den Rest der Höhe einnehmen, und die erste Div wird eine Min. Von 100px und eine Maximal von allem haben, was sie benötigt.
Ich muss sagen, dass CSS viel Fortschritte gemacht hat, um Programmierern das Leben zu erleichtern.
quelle