Ich habe 2 Divs: einen auf der linken Seite und einen auf der rechten Seite meiner Seite. Der auf der linken Seite hat eine feste Breite und ich möchte, dass der auf der rechten Seite den verbleibenden Raum ausfüllt.
#search {
width: 160px;
height: 25px;
float: left;
background-color: #ffffff;
}
#navigation {
width: 780px;
float: left;
background-color: #A53030;
}
<div id="search">Text</div>
<div id="navigation">Navigation</div>
html
css
width
responsive
alexchenco
quelle
quelle
Antworten:
Dies scheint zu erreichen, was Sie wollen.
quelle
Das Problem, das ich bei Boushleys Antwort gefunden habe, ist, dass wenn die rechte Spalte länger als die linke ist, sie sich nur um die linke wickelt und den gesamten Raum wieder ausfüllt. Dies ist nicht das Verhalten, nach dem ich gesucht habe. Nachdem ich viele 'Lösungen' durchsucht hatte, fand ich ein Tutorial (jetzt ist der Link tot) zum Erstellen von drei Spaltenseiten.
Der Autor bietet drei verschiedene Möglichkeiten an, eine mit fester Breite, eine mit drei variablen Spalten und eine mit festen äußeren Spalten und einer Mitte mit variabler Breite. Viel eleganter und effektiver als andere Beispiele, die ich gefunden habe. Mein Verständnis des CSS-Layouts wurde erheblich verbessert.
Grundsätzlich schweben Sie im obigen einfachen Fall die erste Spalte nach links und geben Sie ihr eine feste Breite. Geben Sie der rechten Spalte dann einen linken Rand, der etwas breiter als die erste Spalte ist. Das ist es. Erledigt. Ala Boushleys Code:
Hier ist eine Demo in Stack Snippets & jsFiddle
Bei Boushleys Beispiel enthält die linke Spalte die andere Spalte rechts. Sobald die linke Spalte endet, füllt die rechte wieder den gesamten Raum aus. Hier wird die rechte Spalte einfach weiter in die Seite ausgerichtet und die linke Spalte nimmt den großen Fettrand ein. Keine Flusswechselwirkungen erforderlich.
quelle
Die Lösung stammt aus der Anzeigeeigenschaft.
Grundsätzlich müssen Sie die beiden Divs wie Tabellenzellen verhalten. Anstatt also zu verwenden
float:left
, müssen Siedisplay:table-cell
beide Divs verwenden, und für die dynamische Breite müssen Siewidth:auto;
auch div festlegen . Die beiden Divs sollten mit derdisplay:table
Eigenschaft in einen Container mit 100% Breite gestellt werden .Hier ist die CSS:
Und der HTML:
WICHTIG: Für Internet Explorer müssen Sie die Eigenschaft float in der dynamischen Breite div angeben, da sonst der Speicherplatz nicht gefüllt wird.
Ich hoffe, dass dies Ihr Problem lösen wird. Wenn Sie möchten, können Sie den vollständigen Artikel, den ich darüber geschrieben habe, in meinem Blog lesen .
quelle
Heutzutage sollten Sie die
flexbox
Methode verwenden (kann an alle Browser mit einem Browserpräfix angepasst werden).Weitere Informationen: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
quelle
Da dies eine sehr beliebte Frage ist, neige ich dazu, eine nette Lösung mit BFC zu teilen.
Codepen-Beispiel für Folgendes hier .
In diesem Fall wird das
overflow: auto
Kontextverhalten ausgelöst und das richtige Element wird nur auf die verfügbare verbleibende Breite erweitert. Wenn es.left
verschwindet, wird es natürlich auf die volle Breite erweitert . Ein sehr nützlicher und sauberer Trick für viele UI-Layouts, aber vielleicht schwer zu verstehen, warum es zuerst funktioniert.quelle
auto
kann dies je nach Inhalt auslösen. Sie können auch einen anderen Überlaufwert verwenden, um den gleichen Effekt zu erzielen.hidden
Dies funktioniert möglicherweise besser für Ihren Fall.Wenn Sie keine Kompatibilität mit älteren Versionen bestimmter Browser benötigen ( z. B. IE
108 oder weniger), können Sie diecalc()
CSS-Funktion verwenden:quelle
@ Boushleys Antwort war die nächste, es gibt jedoch ein Problem, das nicht angesprochen wurde und auf das hingewiesen wurde. Das rechte Div nimmt die gesamte Breite des Browsers ein. Der Inhalt nimmt die erwartete Breite an. Um dieses Problem besser zu sehen:
http://jsfiddle.net/79hpS/
Der Inhalt befindet sich an der richtigen Stelle (in Firefox), die Breite ist jedoch falsch. Wenn untergeordnete Elemente die Breite erben (z. B. die Tabelle mit
width: 100%
), erhalten sie eine Breite, die der des Browsers entspricht, wodurch sie rechts von der Seite überlaufen und eine horizontale Bildlaufleiste (in Firefox) erstellen oder nicht schweben und nach unten gedrückt werden ( in Chrom).Sie können dies einfach beheben, indem Sie
overflow: hidden
zur rechten Spalte hinzufügen . Dies gibt Ihnen die richtige Breite sowohl für den Inhalt als auch für das div. Darüber hinaus erhält die Tabelle die richtige Breite und füllt die verbleibende verfügbare Breite aus.Ich habe einige der anderen oben genannten Lösungen ausprobiert, sie funktionierten bei bestimmten Randfällen nicht vollständig und waren einfach zu kompliziert, um eine Behebung zu rechtfertigen. Das funktioniert und ist einfach.
Wenn es Probleme oder Bedenken gibt, können Sie diese gerne ansprechen.
quelle
overflow: hidden
in der Tat behebt dies, danke. (Die markierte Antwort ist übrigens falsch, daright
tatsächlich der gesamte verfügbare Speicherplatz auf dem übergeordneten Element belegt ist. Sie können dies in allen Browsern sehen, wenn Sie Elementeoverflow: hidden
versetzt die rechte Spalte in einen eigenen Blockformatierungskontext. Blockelemente nehmen den gesamten ihnen zur Verfügung stehenden horizontalen Raum ein. Siehe: developer.mozilla.org/en-US/docs/Web/Guide/CSS/…overflow:xxx
Attribut ist der Schlüssel. Wie Sie sagen, hört es auf#right
, sich darunter auszudehnen#left
. Es löst sehr ordentlich ein Problem, bei dem ich die Größe der jQuery-Benutzeroberfläche geändert habe. Wenn Sie die Größe#right
mit einem Überlaufattribut#left
festlegen und die Größe ändern, haben Sie eine einfache bewegliche Grenze. Siehe jsfiddle.net/kmbro/khr77h0t .Hier ist eine kleine Korrektur für die akzeptierte Lösung, die verhindert, dass die rechte Spalte unter die linke Spalte fällt. Ersetzt
width: 100%;
durchoverflow: hidden;
eine knifflige Lösung, wenn jemand es nicht wusste.http://jsfiddle.net/MHeqG/2600/
[Bearbeiten] Überprüfen Sie auch ein Beispiel für das dreispaltige Layout: http://jsfiddle.net/MHeqG/3148/
quelle
Wenn Sie versuchen, den verbleibenden Platz in einer Flexbox zwischen zwei Elementen zu füllen, fügen Sie die folgende Klasse zu einem leeren Div zwischen den beiden Elementen hinzu, die Sie trennen möchten:
quelle
Verwenden
display:flex
quelle
Boushleys Antwort scheint der beste Weg zu sein, um dies mit Schwimmern zu arrangieren. Es ist jedoch nicht ohne Probleme. Verschachteltes Floating innerhalb des erweiterten Elements steht Ihnen nicht zur Verfügung. es wird die Seite brechen.
Die gezeigte Methode "fälscht es", wenn es um das expandierende Element geht - es schwebt nicht wirklich, es spielt nur mit den schwebenden Elementen mit fester Breite zusammen, indem es seine Ränder verwendet.
Das Problem ist dann genau das: Das expandierende Element wird nicht schwebend. Wenn Sie versuchen, ein verschachteltes Floating innerhalb des expandierenden Elements zu haben, sind diese "verschachtelten" Floated-Elemente überhaupt nicht wirklich verschachtelt. Wenn Sie versuchen, ein
clear: both;
unter Ihre "verschachtelten" schwebenden Objekte zu kleben , werden Sie am Ende auch die Floats der obersten Ebene löschen.Um Boushleys Lösung zu verwenden, möchte ich hinzufügen, dass Sie ein div wie das folgende platzieren sollten: .fakeFloat {height: 100%; Breite: 100%; float: left; } und platziere dies direkt innerhalb des erweiterten div; Der gesamte Inhalt des erweiterten Div sollte sich dann in diesem fakeFloat-Element befinden.
Aus diesem Grund würde ich empfehlen, in diesem speziellen Fall Tabellen zu verwenden. Floated-Elemente sind wirklich nicht für die gewünschte Erweiterung ausgelegt, wohingegen die Lösung mit einer Tabelle trivial ist. Im Allgemeinen wird argumentiert, dass Floating eher für Layouts geeignet ist, nicht für Tabellen. Aber Sie verwenden Floating hier sowieso nicht, Sie fälschen es - und diese Art von Niederlage macht den Zweck des stilistischen Arguments für diesen speziellen Fall zunichte meine bescheidene Meinung.
quelle
overflow: hidden
. jsfiddle.net/dave2/a5jbpc85Ich habe die obigen Lösungen für eine flüssige Linke ausprobiert und eine feste Rechte, aber keine davon hat funktioniert (ich bin mir bewusst, dass die Frage umgekehrt ist, aber ich denke, dass dies relevant ist). Folgendes hat funktioniert:
quelle
Ich hatte ein ähnliches Problem und fand die Lösung hier: https://stackoverflow.com/a/16909141/3934886
Die Lösung ist für ein festes Zentrum div und flüssige Seitensäulen.
Wenn Sie eine feste linke Spalte möchten, ändern Sie einfach die Formel entsprechend.
quelle
Sie können die Grid-CSS-Eigenschaften verwenden. Dies ist die klarste, sauberste und intuitivste Art, Ihre Boxen zu strukturieren.
quelle
Ich frage mich, dass niemand
position: absolute
mit verwendetposition: relative
Eine andere Lösung wäre also:
HTML
CSS
Jsfiddle Beispiel
quelle
/ * * css * /
/ * * html * /
quelle
Ich habe eine sehr einfache Lösung dafür! // HTML
// CSS
Link: http://jsfiddle.net/MHeqG/
quelle
Ich hatte ein ähnliches Problem und fand Folgendes, das gut funktionierte
CSS:
HTML:
Diese Methode wird nicht umbrochen, wenn das Fenster verkleinert wird, sondern erweitert automatisch den Bereich "Inhalt". Die statische Breite für das Site-Menü (links) bleibt erhalten.
Und für die automatische Erweiterung des Inhaltsfelds und der Demo des linken vertikalen Felds (Site-Menü):
https://jsfiddle.net/tidan/332a6qte/
quelle
Versuchen Sie, Position
relative
, Entfernungwidth
undfloat
Eigenschaften der rechten Seite hinzuzufügen,left
und fügen Sie dann eineright
Eigenschaft mit0
Wert hinzu.Sie können auch eine
margin left
Regel hinzufügen, deren Wert auf der Breite des linken Elements basiert (+ einige Pixel, wenn Sie dazwischen Platz benötigen) , um seine Position beizubehalten.Dieses Beispiel funktioniert für mich:
quelle
Versuche dies. Es hat bei mir funktioniert.
quelle
Ich arbeite seit zwei Tagen an diesem Problem und habe eine Lösung, die für Sie und alle anderen, die versuchen, eine reaktionsschnelle feste Breite links zu erstellen, funktioniert. Die rechte Seite füllt den Rest des Bildschirms aus, ohne die linke Seite zu umwickeln. Ich gehe davon aus, dass die Seite sowohl in Browsern als auch auf Mobilgeräten reaktionsfähig sein soll.
Hier ist der Code
Hier ist meine Geige, die vielleicht genauso für dich funktioniert wie für mich. https://jsfiddle.net/Larry_Robertson/62LLjapm/
quelle
Regeln für Gegenstände und Behälter;
Verwenden Sie Leerzeichen: nowrap;für Texte in den letzten Punkten für ihre Unstrukturierung.
Artikel X% | Artikel Y% | Artikel Z%
Gesamtlänge immer = 100%!
wenn
dann
Punkt X = 70%
Element X ist dominant (erste Elemente dominieren im CSS-Layout der Tabelle)!
Versuchen Sie es mit max-content. Eigenschaft für div innen zum Verteilen von div im Container:
}}
quelle
Die einfachste Lösung ist die Verwendung von Margin. Dies wird auch reagieren!
quelle
Die einfachste Lösung besteht darin, die Breite des linken Div gleich 100% zu machen - die Breite des rechten Div plus einen beliebigen Abstand zwischen ihnen.
https://codepen.io/tamjk/pen/dybqKBN
quelle
Ich bin auf dasselbe Problem gestoßen, als ich versucht habe, einige jqueryUI- Steuerelemente zu gestalten. Obwohl die gängige Philosophie jetzt "Verwenden
DIV
stattTABLE
" ist, fand ich in meinem Fall, dass die Verwendung von TABLE viel besser funktioniert. Insbesondere wenn Sie eine einfache Ausrichtung innerhalb der beiden Elemente benötigen (z. B. vertikale Zentrierung, horizontale Zentrierung usw.), bieten die mit TABLE verfügbaren Optionen hierfür einfache, intuitive Steuerelemente.Hier ist meine Lösung:
quelle
<font>
,<b>
etc. HTML entwickeltem Vergangenheit , die weniger auf der Präsentation zu konzentrieren.overflow
.display:table
, um das gewünschte Erscheinungsbild von nicht tabellarischen Daten zu erzielen, ist sauber. Das Erzwingen nicht tabellarischer Daten wie Seitenspalten oder Formularsteuerelemente in HTML-Tabellen zur Steuerung des Layouts ist unrein.