Wie kann ich ein Div dazu bringen, die verbleibende Breite auszufüllen?
<div id="Main" style="width: 500px;">
<div id="div1" style="width: 100px;"></div>
<div id="div2"></div>
<div id="div3" style="width: 100px; float: right;"></div>
</div>
Wie kann ich div2
den Rest auffüllen?
Antworten:
Probieren Sie so etwas aus:
divs nehmen natürlich 100% der Breite ihres Containers ein, diese Breite muss nicht explizit festgelegt werden. Durch Hinzufügen eines linken / rechten Randes, der dem der beiden Seitendivs entspricht, wird der eigene Inhalt gezwungen, zwischen ihnen zu sitzen.
Beachten Sie, dass das "mittlere Div" im HTML nach dem "rechten Div" steht
quelle
Aktuelle Lösung (Oktober 2014): Bereit für flüssige Layouts
Einführung:
Diese Lösung ist noch einfacher als die von
Leigh
. Es basiert tatsächlich darauf.Hier können Sie feststellen , dass das mittlere Element (in unserem Fall mit
"content__middle"
Klasse) ist nicht jede dimensionale Eigenschaft angegeben hat - keine Breite, noch Polsterung, noch Spielraum ähnliche Eigenschaft überhaupt - aber nur einoverflow: auto;
(siehe Anmerkung 1).Der große Vorteil ist, dass Sie
max-width
min-width
jetzt ein und ein für Ihre linken und rechten Elemente angeben können . Das ist fantastisch für Fluid - Layout .. daher ansprechendes Layout :-)Anmerkung 1: Versus Leighs Antwort, bei der Sie der Klasse die
margin-left
&margin-right
-Eigenschaften hinzufügen müssen"content__middle"
.Code mit nicht fließendem Layout:
Hier haben die linken und rechten Elemente (mit Klassen
"content__left"
und"content__right"
) eine feste Breite (in Pixel): daher als nicht fließendes Layout bezeichnet.Live-Demo auf http://jsbin.com/qukocefudusu/1/edit?html,css,output
Code mit flüssigem Layout:
Hier haben die linken und rechten Elemente (mit Klassen
"content__left"
und"content__right"
) eine variable Breite (in Prozent), aber auch eine minimale und maximale Breite: daher als fließendes Layout bezeichnet.Live-Demo in einem fließenden Layout mit den
max-width
Eigenschaften http://jsbin.com/runahoremuwu/1/edit?html,css,outputBrowser-Unterstützung
Getestet auf BrowserStack.com in den folgenden Webbrowsern:
quelle
overflow
ein Blockformatierungskontext erstellt wird? hättedisplay: flex
den gleichen Effekt?overflow-y: hidden
es a) erlaubte, die Breite einzustellen, b) die beste Browser-Unterstützung hat und c) keine Tabelle warFlexboxen sind die Lösung - und sie sind fantastisch. Ich wollte so etwas seit einem Jahrzehnt aus CSS. Alles, was Sie brauchen, ist,
display: flex
Ihren Stil für "Main" undflex-grow: 100
(wobei 100 willkürlich ist - es ist nicht wichtig, dass es genau 100 ist) zu ergänzen . Versuchen Sie, diesen Stil hinzuzufügen (Farben hinzugefügt, um den Effekt sichtbar zu machen):Weitere Informationen zu Flexboxen finden Sie hier: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
quelle
Flexbox-Lösung
Hinweis: Fügen Sie bei Bedarf von Ihren unterstützten Browsern Präfixe für Flex-Anbieter hinzu .
quelle
Obwohl es zu
bit
spät ist, eine Antwort zu veröffentlichen, ist hier ein alternativer Ansatz ohne Verwendung von Rändern.Diese Methode funktioniert wie Magie, aber hier ist eine Erklärung :) \
Spielen Sie hier mit einem ähnlichen Beispiel.
quelle
Die Div, die den verbleibenden Platz einnehmen muss, muss eine Klasse sein. Die anderen Divs können IDs sein, aber sie müssen breit sein.
CSS :
HTML :
Über den folgenden Link ist der Code in Aktion, mit dem das Problem der verbleibenden Gebietsabdeckung behoben werden soll.
jsFiddle
quelle
Ich suchte nach einer Lösung für das entgegengesetzte Problem, bei dem ich ein Div mit fester Breite in der Mitte und ein Div mit flüssiger Breite auf beiden Seiten benötigte. Deshalb habe ich mir Folgendes ausgedacht und dachte, ich würde es hier posten, falls jemand es braucht.
Wenn Sie die Breite des
#center
Elements ändern , müssen Sie die Eigenschaft width von.fluid
auf Folgendes aktualisieren :quelle