Angenommen, Sie haben eine div
, geben Sie eine bestimmte width
und setzen Sie Elemente hinein, in meinem Fall eine img
und eine andere div
.
Die Idee ist, dass der Inhalt des Containers dazu div
führt, dass sich der Container div
ausdehnt und ein Hintergrund für den Inhalt ist. Aber wenn ich das mache, div
schrumpft der Inhalt, um zu den nicht schwebenden Objekten zu passen, und die schwebenden Objekte sind entweder ganz heraus oder halb raus, halb rein und haben keinen Einfluss auf die Größe der großen div
.
Warum ist das? Gibt es etwas , was ich bin fehlt, und wie kann ich Einzelteile erhalten schwebte die auszustrecken height
eines enthält div
?
overflow:hidden
zwingt den Browser so gut es geht, dieoverflow: hidden
ist hier: Link . Und vielen Dank, es hat bei mir funktioniertoverflow: hidden
nur Teile eines Elements ausgeblendet werden, die aus dem übergeordneten Container herausfließen. Für mich führte dies dazu, dass bestimmte Textteile nicht mehr lesbar waren.Grund
Das Problem ist, dass schwimmende Elemente nicht mehr fließen :
Daher sie haben keine Auswirkungen auf Elemente als umgebende in Strömungselement würde.
Dies wird in 9.5 Floats erklärt :
Code-Snippet anzeigen
Dies wird auch in 10.6 Berechnung von Höhen und Rändern angegeben . Für „normale“ Blöcke ,
Code-Snippet anzeigen
Hacky Lösung: Clearance
Eine Möglichkeit, das Problem zu lösen, besteht darin, ein unterströmendes Element unter allen Schwimmern zu platzieren. Dann wächst die Höhe des übergeordneten Elements, um dieses Element (und damit auch die Floats) zu umschließen.
Dies kann mit der
clear
Eigenschaft erreicht werden :Code-Snippet anzeigen
Eine Lösung besteht also darin, ein leeres Element
clear: both
als letztes Geschwister der Floats hinzuzufügenDas ist jedoch nicht semantisch. Generieren Sie also besser ein Pseudoelement am Ende des übergeordneten Elements :
Es gibt mehrere Varianten dieses Ansatzes, z. B. die Verwendung der veralteten Einzelpunkt-Syntax
:after
zur Unterstützung alter Browser oder die Verwendung anderer Anzeigen auf Blockebene wiedisplay: table
.Lösung: BFC-Wurzeln
Es gibt eine Ausnahme auf das problematische Verhalten zu Beginn definiert: Wenn ein Block Element eines legt Blockforma Context (BFC ist eine Wurzel), dann wird es auch seinen schwebenden Inhalt wickeln.
Gemäß 10.6.7 'Auto'-Höhen für Blockformatierungskontextwurzeln ,
Code-Snippet anzeigen
Wie in 9.5 Floats erläutert , sind BFC-Wurzeln außerdem aus folgenden Gründen nützlich:
Code-Snippet anzeigen
Ein Blockformatierungskontext wird von erstellt
Blockboxen mit
overflow
anderen alsvisible
zhidden
Block Container , die Boxen nicht blockieren: wenn
display
eingestellt istinline-block
,table-cell
odertable-caption
.Schwimmelemente: Wenn
float
gesetzt wirdleft
oderright
.Absolut Elemente positioniert: Wenn
position
gesetzt wirdabsolute
oderfixed
.Hinweis die unerwünschte Nebenwirkungen haben kann, wie überfüllt Clipping Inhalt, Berechnen von Autobreiten mit dem Schrumpf-to-fit - Algorithmus, oder wird out-of-flow. Das Problem ist also, dass es nicht möglich ist, ein Element auf Blockebene mit sichtbarem Überlauf zu haben, das einen BFC erstellt.
Display L3 behebt folgende Probleme:
Leider gibt es noch keine Browserunterstützung. Möglicherweise können wir verwenden
quelle
Setzen Sie Ihr Floating
div(s)
in eindiv
und in CSS geben Sieoverflow:hidden;
es wird es gut funktionieren.
quelle
W3Schools Empfehlung:
Wenn Sie das
overflow: auto
übergeordnete Element aufsetzen, wird der gesamte Hintergrund einschließlich der Elementränder "eingefärbt". Auch schwebende Elemente bleiben innerhalb des Rahmens.http://www.w3schools.com/css/tryit.asp?filename=trycss_layout_clearfix
quelle
Es fehlt nichts. Float wurde für den Fall entwickelt, dass ein Bild (zum Beispiel) neben mehreren Textabschnitten stehen soll, damit der Text um das Bild herum fließt. Das würde nicht passieren, wenn der Text den Container "dehnen" würde. Ihr erster Absatz würde enden und dann würde Ihr nächster Absatz unter dem Bild beginnen (möglicherweise mehrere hundert Pixel darunter).
Und deshalb erhalten Sie das Ergebnis, das Sie sind.
quelle
In einigen Fällen, dh wenn (wenn) Sie nur
float
Elemente in derselben "Linie" fließen lassen, können Sie diese verwendenanstatt
Andernfalls
clear
funktioniert die Verwendung eines Elements am Ende, auch wenn es möglicherweise gegen den Strich geht, ein Element zu benötigen, um die CSS-Arbeit auszuführen.quelle
Hier ist ein moderner Ansatz:
Keine Clearfixes mehr.
ps Überlauf verwenden: versteckt; versteckt den Kastenschatten also ...
quelle
Danke LSerni, du hast es für mich gelöst.
Um das zu erreichen :
Das musst du machen :
quelle
Wie Lucas sagt, beschreiben Sie das beabsichtigte Verhalten für die Eigenschaft float. Was viele Leute verwirrt, ist, dass float weit über seinen ursprünglichen Verwendungszweck hinausgeschoben wurde, um Mängel im CSS-Layoutmodell auszugleichen.
Werfen Sie einen Blick auf Floatutorial , wenn Sie ein besseres Verständnis davon , wie diese Eigenschaft Werke bekommen möchten.
quelle
Sie können es einfach tun, indem Sie zuerst den Div-Flex machen und rechts oder links begründende Inhalte anwenden, und Ihr Problem ist gelöst.
quelle