Ich habe ein Layout mit zwei Spalten - eine linke div
und eine rechte div
.
Das rechte div
ist grau background-color
und muss vertikal erweitert werden, abhängig von der Höhe des Browserfensters des Benutzers. Im Moment background-color
endet das mit dem letzten Inhalt div
.
Ich habe versucht height:100%
, min-height:100%;
etc.
height
Eigenschaft mit Prozentwerten: stackoverflow.com/a/31728799/3597276Antworten:
Es gibt einige CSS 3-Maßeinheiten mit den Namen:
Viewport-Percentage (oder Viewport-Relative) Längen
Was sind die prozentualen Längen des Ansichtsfensters?
Aus der oben verlinkten W3-Kandidatenempfehlung:
Diese Einheiten sind
vh
(Ansichtsfensterhöhe),vw
(Ansichtsfensterbreite),vmin
(minimale Länge des Ansichtsfensters) undvmax
(maximale Länge des Ansichtsfensters).Wie kann ein Teiler die Höhe des Browsers ausfüllen?
Für diese Frage können wir Folgendes verwenden
vh
:1vh
entspricht 1% der Höhe des Ansichtsfensters. Das heißt,100vh
entspricht der Höhe des Browserfensters, unabhängig davon, wo sich das Element im DOM-Baum befindet:HTML
CSS
Dies ist buchstäblich alles, was benötigt wird. Hier ist ein JSFiddle-Beispiel dafür.
Welche Browser unterstützen diese neuen Geräte?
Dies wird derzeit von allen aktuellen Hauptbrowsern außer Opera Mini unterstützt. Check out Kann ich ... für weitere Unterstützung verwenden.
Wie kann dies mit mehreren Spalten verwendet werden?
Im Fall der vorliegenden Frage mit einem linken und einem rechten Teiler sehen Sie hier ein JSFiddle-Beispiel, das ein zweispaltiges Layout zeigt, das sowohl
vh
als als auch umfasstvw
.Wie ist
100vh
anders als100%
?Nehmen Sie dieses Layout zum Beispiel:
Das
p
Tag ist hier auf 100% Höhe eingestellt, aber da sein Inhaltdiv
200 Pixel Höhe hat, werden 100% von 200 Pixel zu 200 Pixel, nicht zu 100% derbody
Höhe. Die Verwendung von100vh
stattdessen bedeutet, dass dasp
Tagbody
unabhängig von derdiv
Höhe 100% der Höhe des Tags entspricht . Schauen Sie sich diese begleitende JSFiddle an, um den Unterschied leicht zu erkennen!quelle
min-height:100vh
scheint das zu umgehen.Wenn Sie die Höhe eines
<div>
oder eines Elements festlegen möchten , sollten Sie auch die Höhe von<body>
und<html>
auf 100% festlegen . Dann können Sie die Höhe des Elements mit 100% einstellen :)Hier ist ein Beispiel:
quelle
html { height: 100%*number of blocks; }
,body { height: 100%;}
,#div { height: 100%/number of blocks; }
. Also, wenn Sie 3 Abschnitte haben, wird es seinhtml { height: 300%; } body { height: 100%; } #div { height: 33.3% }
Wenn Sie Ihre Elemente absolut positionieren können,
würde es tun.
quelle
position:relative
und seine Höhe nicht 100% des Ansichtsfensters beträgt. Es wird oben und unten an den nächsten relativen oder absoluten Vorfahren angepasst.Sie können die View-Port-Einheit in CSS verwenden:
HTML:
CSS:
quelle
* { box-sizing: border-box; }
, um dies zu verhindern.Sie können
vh
in diesem Fall verwenden, was relativ zu 1% der Höhe des Ansichtsfensters ist ...Das heißt, wenn Sie die Höhe abdecken möchten, verwenden Sie einfach
100vh
.Schauen Sie sich das Bild unten an, das ich hier für Sie zeichne:
Probieren Sie das folgende Snippet aus, das ich für Sie erstellt habe:
quelle
paddings/margins
Alle anderen Lösungen, einschließlich der am besten bewerteten mit,
vh
sind im Vergleich zur Flex-Modelllösung nicht optimal .Mit dem Aufkommen des CSS-Flex-Modells wird die Lösung des Problems der 100% -Höhe sehr, sehr einfach: Verwendung
height: 100%; display: flex
für die übergeordneten undflex: 1
die untergeordneten Elemente. Sie belegen automatisch den gesamten verfügbaren Platz in ihrem Container.Beachten Sie, wie einfach das Markup und das CSS sind. Keine Tischhacks oder so.
Das Flex-Modell wird von allen gängigen Browsern sowie von IE11 + unterstützt.
Erfahren Sie hier mehr über das Flex-Modell .
quelle
overflow-y: auto;
kann vermieden werden , dass "Behälter die ursprüngliche Körpergröße überschreiten".Sie erwähnen nicht einige wichtige Details wie:
Hier ist eine Möglichkeit:
Dies hängt davon ab, welche Säulen fixiert werden müssen und welche flüssig sind. Sie können dies auch mit absoluter Positionierung tun, aber ich habe im Allgemeinen bessere Ergebnisse (insbesondere in Bezug auf Cross-Browser) mit Floats erzielt.
quelle
Das hat bei mir funktioniert:
Verwenden Sie
position:fixed
stattdessen aufposition:absolute
diese Weise, auch wenn Sie nach unten scrollen, wird die Unterteilung bis zum Ende des Bildschirms erweitert.quelle
Hier ist ein Fix für die Höhe.
Verwenden Sie in Ihrem CSS:
vh-units
Verwenden Sie für Browser, die dies nicht unterstützen , modernizr.Fügen Sie dieses Skript hinzu (um die Erkennung für hinzuzufügen
vh-units
)Verwenden Sie diese Funktion schließlich, um die Höhe des Ansichtsfensters hinzuzufügen,
#your-object
wenn der Browser dies nicht unterstütztvh-units
:quelle
100%
funktioniert unterschiedlich für Breite und Höhe.Wenn Sie angeben
width: 100%
, bedeutet dies "100% der verfügbaren Breite vom übergeordneten Element oder der Breite des Fensters übernehmen".Wenn Sie angeben
height: 100%
, bedeutet dies nur "100% der verfügbaren Höhe vom übergeordneten Element übernehmen". Wenn Sie also keine Höhe für ein Element der obersten Ebene angeben, ist die Höhe aller0
untergeordneten Elemente entweder oder die Höhe des übergeordneten Elements. Aus diesem Grund müssen Sie das oberste Element so einstellen, dass es einemin-height
Fensterhöhe aufweist.Ich gebe immer an, dass der Körper eine Mindesthöhe von 100 VH haben soll, und dies erleichtert die Positionierung und Berechnung.
quelle
Fügen
min-height: 100%
Sie eine Höhe hinzu und geben Sie sie nicht an (oder setzen Sie sie auf Auto). Es hat den Job für mich total erledigt:quelle
100vw === 100% der Breite des Ansichtsfensters.
100vh === 100% der Höhe des Ansichtsfensters.
Wenn Sie die
div
Breite oder Höhe auf 100% der Browserfenstergröße einstellen möchten, sollten Sie Folgendes verwenden:Für die Breite:
100vw
Für höhe:
100vh
Wenn Sie die Größe verringern möchten, verwenden Sie die CSS-
calc
Funktion. Beispiel:quelle
Es gibt verschiedene Methoden, um die Höhe von a
<div>
auf 100% einzustellen.Methode (A):
Methode (B) unter Verwendung von vh:
Methode (c) unter Verwendung einer Flexbox:
quelle
Das hat bei mir funktioniert:
Entnommen von dieser Seite .
quelle
Am einfachsten ist es, es so zu machen.
quelle
Versuchen Sie setzen
height:100%
inhtml
&body
Und wenn Sie 2 div Höhe gleich verwenden möchten, verwenden oder setzen Sie die übergeordnete Elementeigenschaft
display:flex
.quelle
Trotz all der Antworten hier war ich überrascht, dass niemand das Problem wirklich gelöst hat. Wenn ich
100vh
height
/ verwendet habemin-height
, ist das Layout unterbrochen, wenn der Inhalt länger als eine Seite war. Wenn ich stattdessen100%
height
/ verwendetemin-height
, brach das Layout, wenn der Inhalt kleiner als die Seitenhöhe war.Die Lösung, die ich gefunden habe und die beide Fälle löste, bestand darin, die beiden wichtigsten Antworten zu kombinieren:
quelle
Verwenden Sie einfach die "vh" -Einheit anstelle von "px", was die Höhe des Ansichtsfensters bedeutet.
quelle
Blockelemente belegen standardmäßig die gesamte Breite ihres übergeordneten Elements.
Auf diese Weise erfüllen sie ihre Entwurfsanforderungen, nämlich vertikales Stapeln.
Dieses Verhalten erstreckt sich jedoch nicht auf die Höhe.
Standardmäßig entsprechen die meisten Elemente der Höhe ihres Inhalts (
height: auto
).Anders als bei der Breite müssen Sie eine Höhe angeben, wenn Sie zusätzlichen Platz benötigen.
Beachten Sie daher diese beiden Dinge:
quelle
Hier ist etwas, das nicht genau dem entspricht, was Sie in früheren Antworten hatten, aber es könnte für einige hilfreich sein:
https://jsfiddle.net/newdark/qyxkk558/10/
quelle
Verwenden Sie FlexBox CSS
Flexbox ist perfekt für diese Art von Problem geeignet. Während Flexbox hauptsächlich für das Layout von Inhalten in horizontaler Richtung bekannt ist, eignet es sich auch für vertikale Layoutprobleme. Alles, was Sie tun müssen, ist, die vertikalen Abschnitte in einen Flex-Container zu wickeln und auszuwählen, welche Sie erweitern möchten. Sie belegen automatisch den gesamten verfügbaren Platz in ihrem Container.
quelle
Eine der Optionen ist die Verwendung der CSS-Tabelle. Es bietet hervorragende Browserunterstützung und funktioniert sogar in Internet Explorer 8.
JSFiddle-Beispiel
quelle
Versuchen Sie dies - getestet:
Edit: 2020 Update:
Sie können
vh
jetzt verwenden:quelle
Sie können
display: flex
und verwendenheight: 100vh
quelle
Sie müssen zwei Dinge tun: Zum einen müssen Sie die Höhe auf 100% einstellen, was Sie bereits getan haben. Zweitens wird die Position auf absolut gesetzt. Das sollte den Trick machen.
Quelle
quelle
vh
stattdessen.vh
wenn Sie Responsive Design auf Mobilgeräten verwenden möchten.Versuchen Sie das folgende CSS:
quelle
Eigentlich funktionierte für mich am besten die Nutzung des
vh
Grundstücks.In meiner React-Anwendung wollte ich, dass das div auch bei Größenänderung mit der Seite hoch übereinstimmt. Ich habe es versucht
height: 100%;
,overflow-y: auto;
aber keiner von ihnen hat funktioniert, als die Einstellungheight:(your percent)vh;
wie beabsichtigt funktioniert hat.Hinweis: Wenn Sie Polster, runde Ecken usw. verwenden, müssen Sie diese Werte von Ihrem
vh
Eigenschaftsprozentsatz abziehen. Andernfalls wird zusätzliche Höhe hinzugefügt und Bildlaufleisten angezeigt. Hier ist mein Beispiel:quelle
box-sizing: border-box;
davon aus, dass die Einstellung dies überwinden würde. Dies bedeutet, dass die Rahmengröße auch bei der Berechnung der Größe (Breite und Höhe) des Elements berücksichtigt wird.quelle
Wenn Sie
position: absolute;
und jQuery verwenden, können Sie verwendenquelle
HTML
CSS
quelle
widht
(gegen Ende)