Füllen Sie die verbleibende Höhe oder Breite in einen Flexbehälter
Lesezeit: 5 Minuten
Adam Benson
Ich habe 2 Divs nebeneinander in einer Flexbox. Der rechte sollte immer die gleiche Breite haben, und ich möchte, dass der linke nur den verbleibenden Platz ergreift. Aber es wird nicht, es sei denn, ich stelle seine Breite ausdrücklich ein.
Im Moment ist es also auf 96% eingestellt, was OK aussieht, bis Sie den Bildschirm wirklich zusammendrücken – dann wird dem rechten Div ein wenig der Platz verhungert, den es benötigt.
Ich denke, ich könnte es so lassen, wie es ist, aber es fühlt sich falsch an – als müsste es einen Weg geben, zu sagen:
der rechte ist immer gleich; Sie auf der linken Seite – Sie bekommen alles, was übrig ist
<br/>
<br/>
<div class="ar-course-nav" style="display:flex; justify-content:space-between;">
<div style="width:96%;">
<div style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">
<strong title="Course Name Which is Really Quite Long And Does Go On a Bit But Then When You Think it's Stopped it Keeps on Going for even longer!">
Course Name Which is Really Quite Long And Does Go On a Bit But Then When You Think it's Stopped it Keeps on Going for even longer!
</strong>
</div>
<div style="width:100%; display:flex; justify-content:space-between;">
<div style="color:#555555; margin-right:8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;" title="A really really really really really really really really really really really long department name">
A really really really really really really really really really really really long department name
</div>
<div style="color:#555555; text-align:right; white-space:nowrap;">
Created: 21 September 2016
</div>
</div>
</div>
<div style="margin-left:8px;">
<strong>></strong>
</div>
</div>
Könntest du auch verwenden grid-template-rows/columns
– Scott Anderson
29. Oktober 2020 um 13:29 Uhr
Michael Benjamin
Verwenden Sie die flex-grow -Eigenschaft, um ein Flex-Element dazu zu bringen, freien Speicherplatz zu verbrauchen auf der Hauptachse.
Diese Eigenschaft erweitert das Element so weit wie möglich und passt die Länge an dynamische Umgebungen an, z. B. die Größenänderung des Bildschirms oder das Hinzufügen / Entfernen anderer Elemente.
Ein gängiges Beispiel ist flex-grow: 1 oder unter Verwendung der Kurzschrifteigenschaft flex: 1.
Daher statt width: 96% Verwenden Sie auf Ihrem div flex: 1.
Sie schrieben:
Im Moment ist es also auf 96% eingestellt, was OK aussieht, bis Sie den Bildschirm wirklich zusammendrücken – dann wird dem rechten Div ein wenig der Platz verhungert, den es benötigt.
Das Zusammendrücken des Div mit fester Breite hängt mit einer anderen Flex-Eigenschaft zusammen: flex-shrink
Standardmäßig sind Flex-Elemente auf eingestellt flex-shrink: 1 wodurch sie schrumpfen können, um ein Überlaufen des Behälters zu verhindern.
Verwenden Sie zum Deaktivieren dieser Funktion flex-shrink: 0.
Näheres siehe Die flex-shrink Faktor Abschnitt in der Antwort hier:
Was sind die Unterschiede zwischen Flex-Basis und Breite?
Erfahren Sie mehr über die flexible Ausrichtung entlang der Hauptachse Hier:
Warum gibt es in CSS Flexbox keine „justify-items“- und „justify-self“-Eigenschaften?
Erfahren Sie mehr über die flexible Ausrichtung entlang der Querachse Hier:
Wie funktioniert Flex-Wrap mit align-self, align-items und align-content?
Ich hatte die gleiche Situation und mit flex-grow: 1 hatte nicht die gleichen Auswirkungen wie flex: 1. Wisst ihr vielleicht warum das anders ist? (Ich habe mein Problem mit letzterem behoben, thx)
– WhGandalf
12. September 2018 um 15:39 Uhr
Mit flex-grow: 1der flex-basis Eigentum verbleibt bei auto, sein Standardwert. Mit flex: 1der flex-basis Eigentumsänderungen an 0. Siehe meine Antwort hier für eine ausführliche Überprüfung: stackoverflow.com/q/43520932/3597276 @WhGandalf
– Michael Benjamin
12. September 2018 um 22:26 Uhr
Flex-Shrink war der Schlüssel für mich 🙂
– Pixelerde
1. April 2019 um 5:33 Uhr
Nicht nur das, Sie sollten auch verhindern, dass ein Element mehr Platz einnimmt, als verfügbar ist min-width: 0 (oder min-height:0 ist Flexrichtungsspalte), oder es wird über den verfügbaren Platz im Layout hinausgehen, was ehrlich gesagt super seltsam ist. stackoverflow.com/a/66689926/454780
– trusktr
10. Februar um 18:56 Uhr
HaulinHafer
Im Grunde habe ich versucht, meinen Code so zu bekommen, dass er einen mittleren Abschnitt in einer “Zeile” hat, um sich automatisch an den Inhalt auf beiden Seiten anzupassen (in meinem Fall ein Trennzeichen mit gepunkteter Linie). Wie @Michael_B vorgeschlagen hat, verwendet der Schlüssel display:flex auf dem Reihencontainer und stellen Sie zumindest sicher, dass Ihr mittlerer Container in der Reihe eine hat flex-grow Wert um mindestens 1 höher als die Außenbehälter (wenn Außenbehälter keine haben flex-grow Eigenschaften angewendet, mittlerer Behälter benötigt nur 1 für flex-grow).
Hier ist ein Bild von dem, was ich versucht habe, und ein Beispielcode, wie ich es gelöst habe.
Könntest du auch verwenden
grid-template-rows/columns
– Scott Anderson
29. Oktober 2020 um 13:29 Uhr