Ich möchte ein zweispaltiges Div-Layout, bei dem jedes eine variable Breite haben kann, z
div {
float: left;
}
.second {
background: #ccc;
}
<div>Tree</div>
<div class="second">View</div>
Ich möchte, dass das 'view'-Div auf die gesamte verfügbare Breite erweitert wird, nachdem das' tree'-Div den benötigten Platz gefüllt hat.
Derzeit wird die Größe meines 'view'-Div auf den Inhalt geändert, den es enthält. Es ist auch gut, wenn beide Divs die gesamte Höhe einnehmen.
Haftungsausschluss nicht doppelt:
- Erweitern Sie div auf max width, wenn float: left gesetzt ist, da dort die linke eine feste Breite hat.
- Hilfe bei div - passe div an die verbleibende Breite an, da ich zwei Spalten benötige, die beide nach links ausgerichtet sind
html
css
multiple-columns
Anurag Uniyal
quelle
quelle
overflow hidden
Antworten:
Die Lösung dieses Problems ist eigentlich sehr einfach, aber nicht bei allen offensichtlich. Sie müssen einen sogenannten "Block Formatierungskontext" (BFC) auslösen, der auf bestimmte Weise mit Floats interagiert.
Nehmen Sie einfach das zweite Div, entfernen Sie den Schwimmer und geben Sie ihn
overflow:hidden
stattdessen. Jeder andere als der sichtbare Überlaufwert macht den Block, auf den er gesetzt ist, zu einem BFC. BFCs erlauben weder Nachkommen-Floats, ihnen zu entkommen, noch erlauben sie Geschwister- / Ahnen-Floats, in sie einzudringen. Der Nettoeffekt hier ist, dass das schwebende Div seine Sache macht, dann wird das zweite Div ein gewöhnlicher Block sein, der die gesamte verfügbare Breite außer der vom Float belegten einnimmt .Dies sollte in allen aktuellen Browsern funktionieren, obwohl Sie möglicherweise hasLayout in IE6 und 7 auslösen müssen. Ich kann mich nicht erinnern.
Demos:
quelle
Ich habe gerade die Magie der Flexboxen entdeckt (Anzeige: Flex). Versuche dies:
Flexboxen geben mir die Kontrolle, die ich mir seit 15 Jahren gewünscht habe. Es ist endlich da! Weitere Informationen: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
quelle
flex-grow: 100;
stattflex-grow: 1;
?flex-grow:10
und dann #b setzen könnte,flex-grow: 90
würde #a 10% der Linienbreite und #b 90% der Linienbreite betragen. Wenn keine anderen Elemente einen flexiblen Breitenstil haben, spielt es technisch keine Rolle, was Sie eingeben.Flexbox-Lösung
Dafür ist die
flex-grow
Immobilie da.Hinweis: Fügen Sie bei Bedarf von Ihren unterstützten Browsern Präfixe für Flex-Anbieter hinzu .
quelle
Dies wäre ein gutes Beispiel für etwas, das mit Tabellen trivial und mit CSS schwer (wenn nicht unmöglich, zumindest im Sinne eines Cross-Browsers) zu tun hat.
Wenn beide Spalten eine feste Breite hätten, wäre dies einfach.
Wenn eine der Spalten eine feste Breite hätte, wäre dies etwas schwieriger, aber durchaus machbar.
Wenn beide Spalten eine variable Breite haben, müssen Sie meiner Meinung nach nur eine zweispaltige Tabelle verwenden.
quelle
display:none;
Während ich auf einer verschiebbaren Skala so viel wie möglich zu 100% reagiere, ist es manchmal besser, Ihr Design vollständig zu ändern, damit ein Mobiltelefon das Touchscreen-Gefühl nutzt und Schaltflächenstil.Überprüfen Sie diese Lösung
quelle
Verwendung
calc
:Das Problem dabei ist, dass alle Breiten explizit definiert werden müssen, entweder als Wert (px und em funktionieren einwandfrei) oder als Prozentsatz von etwas, das explizit selbst definiert wurde.
quelle
Hier könnte dies helfen ...
quelle
<div class="clear" style="clear: both; height: 1px; overflow: hidden; font-size:0pt; margin-top: -1px;"></div>
Ich verstehe nicht, warum die Leute bereit sind, so hart zu arbeiten, um eine reine CSS-Lösung für einfache Spaltenlayouts zu finden, die mit dem alten
TABLE
Tag SO EINFACH sind .Alle Browser haben immer noch die Logik des Tabellenlayouts ... Nennen Sie mich vielleicht einen Dinosaurier, aber ich sage, lassen Sie es Ihnen helfen.
Auch in Bezug auf die Cross-Browser-Kompatibilität viel weniger riskant.
quelle
media-queries
, dass es mit dem altentable
Tag unmöglich ist, beide Spalten in kleinen Geräten übereinander zu platzieren . Damit dies funktioniert, müssen SieCSS
Tabellenstile anwenden . Daher ist es heutzutage besser, dies zu lösen,CSS
wenn Sie ein ansprechendes Layout für jede Bildschirmgröße wünschen.Wenn die Breite der anderen Spalte festgelegt ist, können Sie die
calc
CSS-Funktion für alle gängigen Browser verwenden :Auf diese Weise wird die Breite der zweiten Reihe berechnet (dh die verbleibende Breite) und entsprechend angewendet.
quelle
css-grid
. Funktioniert auch damitposition: fixed
, was es rundum zur perfekten Wahl macht! Vielen Dank!quelle
Sie können CSS Grid Layout ausprobieren .
quelle
Flex-Grow - Dies definiert die Fähigkeit eines Flex-Elements, bei Bedarf zu wachsen. Es akzeptiert einen Wert ohne Einheit, der als Anteil dient. Es bestimmt, wie viel Platz im Flex-Container der Artikel einnehmen soll.
Wenn für alle Elemente Flex-Grow auf 1 gesetzt ist, wird der verbleibende Platz im Container gleichmäßig auf alle untergeordneten Elemente verteilt. Wenn eines der Kinder den Wert 2 hat, nimmt der verbleibende Speicherplatz doppelt so viel Speicherplatz ein wie die anderen (oder es wird zumindest versucht). Sehen Sie hier mehr
quelle
Eine etwas andere Implementierung,
Zwei Div-Panels (Inhalt + Extra) nebeneinander werden
content panel
erweitert, wennextra panel
nicht vorhanden sind.jsfiddle: http://jsfiddle.net/qLTMf/1722/
quelle
Pat - Du hast recht. Deshalb würde diese Lösung sowohl "Dinosaurier" als auch Zeitgenossen zufriedenstellen. :) :)
quelle
Sie können die CSS-Bibliothek von W3 verwenden, die eine Klasse mit dem Namen enthält
rest
, die genau das tut:Vergessen Sie nicht, die CSS-Bibliothek auf den folgenden Seiten zu verknüpfen
header
:Hier ist die offizielle Demo: W3 School Tryit Editor
quelle
Ich bin mir nicht sicher, ob dies die Antwort ist, die Sie erwarten, aber warum setzen Sie die Breite von Tree nicht auf 'auto' und die Breite von 'View' auf 100%?
quelle
Schauen Sie sich die verfügbaren CSS-Layout-Frameworks an. Ich würde Simpl oder das etwas komplexere Blueprint-Framework empfehlen .
Wenn Sie Simpl verwenden (bei dem nur eine simpl.css- Datei importiert wird ), können Sie Folgendes tun:
für ein 50-50-Layout oder:
für einen 25-75.
So einfach ist das.
quelle
Danke für den Plug von Simpl.css!
Denken Sie daran, alle Ihre Spalten
ColumnWrapper
so einzuschließen.Ich bin im Begriff, Version 1.0 von Simpl.css zu veröffentlichen, also helfen Sie, das Wort zu verbreiten!
quelle
Ich habe eine Javascript-Funktion geschrieben, die ich von jQuery $ (document) .ready () aus aufrufe. Dadurch werden alle untergeordneten Elemente des übergeordneten div analysiert und nur das am weitesten rechts stehende untergeordnete Element aktualisiert.
html
Javascript
quelle
Dies ist mit Flexbox ziemlich einfach. Siehe den Ausschnitt unten. Ich habe einen Wrapper-Container hinzugefügt, um den Fluss zu steuern und eine globale Höhe festzulegen. Es wurden auch Rahmen hinzugefügt, um die Elemente zu identifizieren. Beachten Sie, dass Divs jetzt bei Bedarf auch auf die volle Höhe erweitert werden. Herstellerpräfixe sollten in einem realen Szenario für Flexbox verwendet werden, da dies noch nicht vollständig unterstützt wird.
Ich habe ein kostenloses Tool entwickelt, um Layouts mithilfe von Flexbox zu verstehen und zu entwerfen. Überprüfen Sie es hier: http://algid.com/Flex-Designer
quelle
stretch
da dies der Standardwert ist unddisplay:flex
derWenn beide Breiten variabel sind, warum berechnen Sie die Breite nicht mit Skripten oder Serverseiten?
<div style="width: <=% getTreeWidth() %>">Tree</div>
quelle