Ich möchte fragen, wie Höhe und Schwimmer funktionieren. Ich habe eine äußere und eine innere Abteilung, die Inhalt enthält. Seine Höhe kann je nach Inhalt des inneren Div variieren, aber es scheint, dass mein innerer Div seinen äußeren Div überlaufen wird. Was wäre der richtige Weg, um es zu tun?
<html>
<body>
<div style="margin:0 auto;width: 960px; min-height: 100px; background-color:orange">
<div style="width:500px; height:200px; background-color:black; float:right"></div>
</div>
</body>
</html>
Antworten:
Die schwebenden Elemente erhöhen nicht die Höhe des Containerelements. Wenn Sie sie nicht löschen, erhöht sich die Containerhöhe nicht ...
Ich zeige dir visuell:
Weitere Erläuterungen:
Sie können auch
overflow: hidden;
Containerelemente hinzufügen , aber ich würde vorschlagen, dass Sieclear: both;
stattdessen verwenden.Auch wenn Sie ein Element selbst löschen möchten, können Sie es verwenden
Wie funktioniert CSS Float?
Was ist float genau und was macht es?
Das
float
Anwesen wird von den meisten Anfängern missverstanden. Was genau machtfloat
das? Ursprünglich wurde diefloat
Eigenschaft eingeführt, um Text um Bilder zu fließen, die schwebendleft
oder schwebend sindright
. Hier ist eine weitere Erklärung von @Madara Uchicha.Ist es also falsch, die
float
Eigenschaft zu verwenden, um Kisten nebeneinander zu platzieren? Die Antwort ist nein ; Es ist kein Problem, wenn Sie diefloat
Eigenschaft verwenden, um Boxen nebeneinander zu setzen.Wenn Sie ein Element
Demoinline
oder eineblock
Ebene schweben lassen, verhält sich das Element wie eininline-block
Element.Wenn Sie ein Element
left
oder schweben lassenright
, wird daswidth
Element auf den Inhalt beschränkt, den es enthält, eswidth
sei denn, es ist explizit definiert ...Sie können kein
float
Elementcenter
. Dies ist das größte Problem, das ich bei Anfängern immer gesehen habe. Dies istkein gültiger Wert für diefloat: center;
float
Immobilie.float
wird im Allgemeinen verwendet,float
um Inhalte nach ganz links oder ganz nach rechts zu verschieben . Es gibt nur vier gültige Werte fürfloat
Eigenschaft , dhleft
,right
,none
(Standard) undinherit
.Übergeordnetes Element wird reduziert, wenn es schwebende untergeordnete Elemente enthält. Um dies zu verhindern, verwenden wir die
clear: both;
Eigenschaft, um die schwebenden Elemente auf beiden Seiten zu löschen, wodurch das Reduzieren des übergeordneten Elements verhindert wird. Für weitere Informationen können Sie meine andere Antwort hier verweisen .(Wichtig) Denken Sie daran, wo wir einen Stapel verschiedener Elemente haben. Wenn wir verwenden
float: left;
oder sichfloat: right;
das Element um eins über den Stapel bewegt. Daher verbergen sich die Elemente im normalen Dokumentfluss hinter den schwebenden Elementen, da sie sich auf Stapelebene über den normalen schwebenden Elementen befinden. (Bitte beziehen Sie sich nicht darauf,z-index
da dies völlig anders ist.)Nehmen Sie einen Fall als Beispiel, um zu erklären, wie CSS-Floats funktionieren, vorausgesetzt, wir benötigen ein einfaches 2-Spalten-Layout mit Kopf-, Fuß- und 2-Spalten. Hier ist also, wie die Blaupause aussieht ...
Im obigen Beispiel schweben nur die roten Kästchen, entweder können Sie
float
beide zumleft
oder Sie könnenfloat
zumleft
und ein anderesright
auch, abhängig vom Layout. Wenn es 3 Spalten sind, können Siefloat
2 Spalten zuleft
einem anderen eineright
davon hängt davon ab, obwohl wir in diesem Beispiel ein vereinfachtes 2-Spalten-Layout haben, so dassfloat
eine davonleft
und die andere von derright
.Markup und Stile zum Erstellen des Layouts werden weiter unten erläutert ...
Lassen Sie uns Schritt für Schritt mit dem Layout fortfahren und sehen, wie float funktioniert.
Zunächst einmal verwenden wir das Haupt - Hüllenelement, können Sie einfach davon ausgehen , dass es Ihr Ansichtsfenster ist, dann verwenden wir
header
und weisen eineheight
von50px
so nichts Besonderes gibt. Es ist nur ein normales nicht schwebendes Element auf Blockebene, das100%
horizontalen Raum einnimmt, es sei denn, es schwebt oder wir weiseninline-block
es zu.Der erste gültige Wert für
float
istleft
so , dass wir in unserem Beispielfloat: left;
für verwenden.floated_left
, sodass wir beabsichtigen, einen Block in dasleft
Element unseres Containers zu verschieben.Die Säule schwebte nach links
Und ja, wenn Sie sehen, dass das übergeordnete Element, das reduziert
.wrapper
ist , das Element, das Sie mit einem grünen Rand sehen, nicht erweitert wurde, aber es sollte richtig sein? Wir werden in einer Weile darauf zurückkommen, für den Moment haben wir eine Kolumne, zu der wir schwebtenleft
.Wenn Sie zur zweiten Spalte kommen, lassen Sie
float
diese in dieright
Eine weitere Säule schwebte nach rechts
Hier haben wir eine
300px
breite Säule, die wirfloat
zu derright
, die neben der ersten Säule sitzt, wenn sie zu der schwimmtleft
, und da sie zu der geschwommen ist,left
hat sie eine leere Rinne zu der geschaffenright
, und da auf derright
unsere reichlich Platz warright
Das schwebende Element saß perfekt neben demleft
einen.Trotzdem ist das übergeordnete Element reduziert. Nun, lassen Sie uns das jetzt beheben. Es gibt viele Möglichkeiten, um zu verhindern, dass das übergeordnete Element reduziert wird.
clear: both;
bevor das übergeordnete Element endet, das schwebende Elemente enthält. Jetzt ist dieses Element eine kostengünstige Lösung fürclear
Ihre schwebenden Elemente, die die Arbeit für Sie erledigt. Ich würde jedoch empfehlen, dies nicht zu verwenden.Fügen Sie
<div style="clear: both;"></div>
vor den.wrapper
div
Enden wie hinzuDemo
Nun, das behebt sich sehr gut, kein zusammengeklapptes übergeordnetes
overflow: hidden;
Element mehr, aber es fügt dem DOM unnötiges Markup hinzu, so dass einige vorschlagen, es für das übergeordnete Element zu verwenden, das schwebende untergeordnete Elemente enthält, die wie beabsichtigt funktionieren.Verwenden Sie
overflow: hidden;
auf.wrapper
Demo
Das erspart uns jedes Mal ein Element,
clear
float
aber da ich verschiedene Fälle damit getestet habe, ist es in einem bestimmten Fall fehlgeschlagen, derbox-shadow
für die untergeordneten Elemente verwendet wird.Demo (Kann den Schatten nicht auf allen 4 Seiten sehen,
overflow: hidden;
verursacht dieses Problem)So was nun? Speichern Sie ein Element, und versuchen Sie
overflow: hidden;
es mit einem eindeutigen Fix-Hack. Verwenden Sie das folgende Snippet in Ihrem CSS.overflow: hidden;
Rufen Sie genau wie beim übergeordneten Element das folgende Element für das übergeordnete Element auf,class
um sich selbst zu löschen.Demo
Hier funktioniert der Schatten wie beabsichtigt. Außerdem wird das übergeordnete Element selbst gelöscht, wodurch ein Zusammenbruch verhindert wird.
Und schließlich verwenden wir die Fußzeile, nachdem wir
clear
die schwebenden Elemente erstellt haben.Demo
Wann wird
float: none;
sowieso verwendet, da es die Standardeinstellung ist, also eine Verwendung zum Deklarierenfloat: none;
?Nun, es hängt davon ab, ob Sie diesen Wert häufig verwenden, wenn Sie möchten, dass Ihre schwebenden Elemente mit einer bestimmten Auflösung untereinander gerendert werden. Dafür
float: none;
spielt dort die Immobilie eine wichtige Rolle.Nur wenige Beispiele aus der Praxis, wie
float
nützlich dies ist.img
Floated Insidep
, damit unsere Inhalte herumfließen können.Demo (ohne zu schweben
img
)Demo 2 (
img
schwebte zumleft
)float
zum Erstellen eines horizontalen Menüs - DemoSchweben Sie auch das zweite Element oder verwenden Sie "margin"
Last but not least möchte ich diesen speziellen Fall erklären, in dem Sie
float
nur ein einzelnes Element zum,left
aber nichtfloat
das andere, also was passiert?Angenommen, wenn wir
float: right;
von unserem entfernen.floated_right
class
,div
wird das von extrem gerendert,left
da es nicht schwebt.Demo
Also in diesem Fall können Sie entweder
float
dasleft
auchODER
Sie können verwenden,
margin-left
was der Größe der linken schwebenden Spalte entspricht, dh200px
breit .quelle
clear: both;
, aber es ist in Ordnung, wenn Sie der Meinung sind, dass die Bearbeitung gerechtfertigt ist, also lassen Sie uns so bleibenSie müssen
overflow:auto
Ihrem übergeordneten Div hinzufügen , damit es das innere schwebende Div umfasst:jsFiddle Beispiel
quelle
Sie stoßen auf den Float-Fehler (obwohl ich nicht sicher bin, ob es sich technisch gesehen um einen Fehler handelt, da so viele Browser dieses Verhalten aufweisen). Folgendes passiert:
Unter normalen Umständen setzt ein Blockebenenelement wie ein div unter der Annahme, dass keine explizite Höhe festgelegt wurde, seine Höhe basierend auf seinem Inhalt fest. Der untere Rand des übergeordneten Divs erstreckt sich über das letzte Element hinaus. Leider hindert das Schweben eines Elements das übergeordnete Element daran, das schwebende Element bei der Bestimmung seiner Höhe zu berücksichtigen. Dies bedeutet, dass wenn Ihr letztes Element schwebt, das übergeordnete Element nicht wie ein normales Element "gedehnt" wird.
Clearing
Es gibt zwei Möglichkeiten, dies zu beheben. Das erste ist das Hinzufügen eines "Clearing" -Elements; Das heißt, ein weiteres Element unterhalb des schwebenden Elements, das den Elternteil zum Dehnen zwingt. Fügen Sie also als letztes Kind das folgende HTML hinzu:
Es sollte nicht sichtbar sein, und indem Sie clear: beides verwenden, stellen Sie sicher, dass es nicht neben dem schwebenden Element sitzt, sondern danach.
Überlauf:
Die zweite Methode, die von den meisten Leuten bevorzugt wird (glaube ich), besteht darin, das CSS des übergeordneten Elements so zu ändern, dass der Überlauf alles andere als "sichtbar" ist. Wenn Sie also den Überlauf auf "versteckt" setzen, wird der Elternteil gezwungen, sich über den Boden des schwebenden Kindes hinaus zu strecken. Dies gilt natürlich nur, wenn Sie keine Höhe für das übergeordnete Element festgelegt haben.
Wie ich bereits sagte, wird die zweite Methode bevorzugt, da Sie nicht semantisch bedeutungslose Elemente zu Ihrem Markup hinzufügen müssen. Manchmal muss das
overflow
jedoch sichtbar sein. In diesem Fall ist das Hinzufügen eines Clearing-Elements mehr als akzeptabel .quelle
Es ist wegen des Schwebens der Div. Fügen Sie
overflow: hidden
das äußere Element hinzu.Demo
quelle
Sie verwirren, wie Browser die Elemente rendern, wenn schwebende Elemente vorhanden sind. Wenn ein Blockelement schwebt (in Ihrem Fall Ihr inneres Div), werden es von anderen Blockelementen ignoriert, da der Browser schwebende Elemente aus dem normalen Fluss der Webseite entfernt. Dann wird, da das schwebende Div aus dem normalen Fluss entfernt wurde, das äußere Div ausgefüllt, als ob das innere Div nicht da wäre. Inline-Elemente (Bilder, Links, Text, schwarze Anführungszeichen) berücksichtigen jedoch die Grenzen des schwebenden Elements. Wenn Sie Text in das äußere Div einfügen, wird der Text um das innere Div herum platziert.
Mit anderen Worten, Blockelemente (Überschriften, Absätze, Divs usw.) ignorieren schwebende Elemente und füllen sie aus, und Inline-Elemente (Bilder, Links, Text usw.) berücksichtigen die Grenzen schwebender Elemente.
Ein Geigenbeispiel hier
quelle
Probier diese
quelle
Sie können die Überlaufeigenschaft für das Container-Div verwenden, wenn Sie kein Div über dem Container anzeigen können, z.
Hier ist das folgende CSS:
-----------------------ODER-------------------------- ----
Hier ist das folgende CSS:
quelle