Wie kann ich feststellen, dass eine Flexbox-Layoutzeile den verbleibenden vertikalen Platz in einem Browserfenster belegt?
Ich habe ein 3-reihiges Flexbox-Layout. Die ersten beiden Zeilen haben eine feste Höhe, aber die dritte ist dynamisch und ich möchte, dass sie auf die volle Höhe des Browsers anwächst.
Ich habe eine andere Flexbox in Zeile 3, die eine Reihe von Spalten erstellt. Um Elemente in diesen Spalten richtig anzupassen, müssen sie die volle Höhe des Browsers verstehen - für Dinge wie Hintergrundfarbe und Elementausrichtungen an der Basis. Das Hauptlayout würde letztendlich so aussehen:
.vwrapper {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: stretch;
align-content: stretch;
//height: 1000px;
}
.vwrapper #row1 {
background-color: red;
}
.vwrapper #row2 {
background-color: blue;
}
.vwrapper #row3 {
background-color: green;
flex 1 1 auto;
display: flex;
}
.vwrapper #row3 #col1 {
background-color: yellow;
flex 0 0 240px;
}
.vwrapper #row3 #col2 {
background-color: orange;
flex 1 1;
}
.vwrapper #row3 #col3 {
background-color: purple;
flex 0 0 240px;
}
<body>
<div class="vwrapper">
<div id="row1">
this is the header
</div>
<div id="row2">
this is the second line
</div>
<div id="row3">
<div id="col1">
col1
</div>
<div id="col2">
col2
</div>
<div id="col3">
col3
</div>
</div>
</div>
</body>
Ich habe versucht, ein height
Attribut hinzuzufügen , das funktioniert, wenn ich es auf eine harte Zahl setze, aber nicht, wenn ich es setze 100%
. Ich verstehe, dass height: 100%
es nicht funktioniert, weil der Inhalt das Browserfenster nicht ausfüllt. Kann ich die Idee jedoch mithilfe des Flexbox-Layouts replizieren?
Antworten:
Sie sollten eingestellt
height
vonhtml, body, .wrapper
zu100%
(um zu erben volle Höhe) und legen Sie nur einenflex
Wert , der größer ist als1
zu.row3
und nicht auf die anderen.DEMO
quelle
Stellen Sie den Wrapper auf 100% Höhe ein
und stellen Sie die 3. Reihe auf Flex-Grow
Demo
quelle
Lassen Sie mich Ihnen einen anderen Weg zeigen, der zu 100% funktioniert. Ich werde auch einige Polster für das Beispiel hinzufügen.
Wie Sie sehen, können wir dies mit ein paar Wrappern zur Kontrolle erreichen, während wir das Attribut flex-grow & flex-direction verwenden.
1: Wenn die übergeordnete "Flex-Richtung" eine "Zeile" ist, arbeitet das untergeordnete "Flex-Grow" horizontal. 2: Wenn die übergeordnete "Flex-Richtung" "Spalten" ist, arbeitet das untergeordnete "Flex-Grow" vertikal.
Hoffe das hilft
Daniel
quelle
div
Overkill.flex-pad-y
:)