Warum nicht die Höhe des container-Elements zu erhöhen, wenn es mit gefloateten Elementen?
Würde ich mag zu Fragen, wie Höhe und float arbeiten. Ich habe eine äußere div-Element und ein inneres div, dass der Inhalt in ihm. Ihre Höhe kann je nach Inhalt des inneren div, aber es scheint, dass meine innere div überlauf wird dem äußeren div. Was wäre der richtige Weg, es zu tun?
HTML:
<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>
- mögliche Duplikate von CSS: min-height funktioniert nicht oder CSS: Div-height-problem auf float set
- schöne und sehr gut vielen Dank!
- mögliche Duplikate von schwimmende Sachen in ein div, schwimmt außerhalb von div. Warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die gefloateten Elemente nicht hinzufügen, um die Höhe des container-Elements, und daher, wenn Sie nicht reinigen Sie, Behälterhöhe nicht erhöhen...
Werde ich Ihnen zeigen, optisch:
Mehr Erklärung:
Können Sie auch hinzufügen
overflow: hidden;
auf container-Elemente, aber ich schlage vor, Sie verwendenclear: both;
statt.Auch wenn Sie vielleicht gerne selbst-klar, ein element, das Sie verwenden können,
Wie Funktioniert CSS Float Funktioniert?
Was ist float genau und was tut es?
Den
float
Eigenschaft ist missverstanden von den meisten Anfänger. Nun, was genau machtfloat
tun? Zunächst werden diefloat
Eigenschaft wurde eingeführt, um Textfluss um die Bilder die schwebteleft
oderright
. Hier ist eine weitere Erklärung von @Madara Uchicha.So, ist es falsch zu verwenden, die
float
Eigenschaft für die Platzierung von Boxen nebeneinander? Die Antwort ist keine; es ist kein problem, wenn Sie diefloat
Eigenschaft, um Boxen nebeneinander.Floating eine
inline
oderblock
level-element wird das element verhält sich wie eininline-block
element.Demo
Wenn du float ein element
left
oderright
, diewidth
des Elements beschränkt sich auf die Inhalte, die es hält, es sei dennwidth
explizit definiert wird ...Können Sie nicht
float
ein elementcenter
. Dies ist die größte Frage, die ich schon immer gesehen, mit Anfänger, mitist keine Gültiger Wert für diefloat: center;
float
Eigenschaft.float
ist in der Regel verwendet, umfloat
/verschieben von Inhalt auf die sehr Links oder das Recht. Es gibt nur vier gültige Werte fürfloat
Eigenschaft, die ich.eleft
,right
,none
(Standard) undinherit
.Übergeordneten element kollabiert, wenn es enthält schwebte Kind-Elemente, um dies zu verhindern, verwenden wir
clear: both;
Eigenschaft, klar, das schwebte Elemente auf beiden Seiten, so dass das kollabieren des parent-Elements. Weitere Informationen entnehmen Sie bitte meiner anderen Antwort hier.(Wichtig) Denke, wo wir einen Stapel verschiedener Elemente. Wenn wir
float: left;
oderfloat: right;
das element bewegt sich über den Stapel ein. Damit die Elemente in den normalen Belegfluss wird, verstecken Sie sich hinter der gefloateten Elemente, weil es auf stack-Ebene über dem normalen Schwamm Elemente. (Bitte nicht in Verbindung bringenz-index
da, der ganz anders ist.)Wobei ein Fall als ein Beispiel, um zu erklären, wie CSS-floats arbeiten, vorausgesetzt, wir brauchen eine einfache 2-Spalten-layout mit Kopfzeile, Fußzeile und 2 Spalten, also hier ist, was die Blaupause sieht aus wie...
Im obigen Beispiel, werden wir schweben und nur die roten Felder, Sie können entweder
float
sowohl für dieleft
oder Sie könnenfloat
aufleft
, und eine andere zuright
wie gut, hängt vom layout, wenn es 3 Spalten, können Siefloat
2 Spaltenleft
wo andere denright
so hängt, obwohl in diesem Beispiel haben wir eine vereinfachte 2-Spalten-layout, so wirdfloat
eine zuleft
und die anderen dieright
.Markup und styles für die Erstellung, das layout weiter unten erklärt...
Gehen wir Schritt für Schritt mit dem layout und zu sehen, wie float funktioniert..
Zunächst verwenden wir die wichtigsten wrapper-element können Sie nur davon ausgehen, dass es das Ansichtsfenster, dann verwenden wir
header
und vergeben Sie einenheight
von50px
also nichts besonderes gibt. Es ist nur eine normale, nicht schwebte block-level-element, das dauern wird, bis100%
horizontalen Raum, es sei denn, es schwebte oder wir weisen Sieinline-block
zu.Den ersten gültigen Wert für
float
istleft
also in unserem Beispiel verwenden wirfloat: left;
für.floated_left
, so wollen wir schweben einen block, um dieleft
unserer container-element.Spalte schwebte auf der linken Seite
Und ja, wenn Sie sehen, das übergeordnete element, das
.wrapper
ist zusammengebrochen, die Sie sehen mit einem grünen Rahmen nicht erweitern, aber es sollte richtig? Komme in eine Weile, jetzt haben wir eine Spalte Schwamm, umleft
.Kommen zur zweiten Spalte, lässt es
float
diese ein, um dieright
Eine weitere Spalte nach rechts gefloatet
Hier haben wir eine
300px
Breite Spalte, die wirfloat
zu denright
, die sich neben der ersten Spalte, wie es schwebte an dieleft
, und da ist es schwebte an dieleft
es leer angelegt Dachrinne, um dieright
, und da gab es reichlich Platz auf derright
unsereright
Schwebekörper saß perfekt neben dieleft
ein.Immer noch, das übergeordnete element ist eingestürzt, gut, wir korrigieren das jetzt. Es gibt viele Möglichkeiten, um zu verhindern, dass das übergeordnete element immer zusammengebrochen.
clear: both;
vor dem übergeordneten element endet, das hält schwebte Elemente, das jetzt ist eine günstige Lösungclear
Ihrem schwimmenden Elementen, die der job für Sie tun, aber ich würde empfehlen, diese nicht zu verwenden.Hinzufügen,
<div style="clear: both;"></div>
vor der.wrapper
div
endet, wieDemo
Gut, die fixes sehr gut, keine eingestürzten Elternteil nicht mehr, aber es fügt unnötige markup-Code der DOM, die so etwas vorschlagen, zu verwenden
overflow: hidden;
auf das Eltern-element holding schwebte child-Elemente, die so funktionieren wie Sie sollen.Verwenden
overflow: hidden;
auf.wrapper
Demo
Das spart uns ein element jedes mal, wenn wir brauchen, um
clear
float
aber als ich getestet verschiedenen Fällen mit dieser nicht in eine bestimmte, die verwendetbox-shadow
auf die Kind-Elemente.Demo (Kann nicht sehen, die Schatten auf allen 4 Seiten,
overflow: hidden;
dieses Problem verursacht)Also was jetzt? Speichern Sie ein element, keine
overflow: hidden;
so gehen Sie für eine klare fix-hack, verwenden Sie die unten-Schnipsel in deine CSS, und so wie Sie mitoverflow: hidden;
für das übergeordnete element, rufen Sie dieclass
unten auf das übergeordnete element selbst klar.Demo
Hier, Schatten wie vorgesehen funktioniert, auch, es sich selbst löscht das parent-element, das verhindert, dass zu kollabieren.
Und schließlich, wir verwenden Fußzeile, nachdem wir
clear
die gefloateten Elemente.Demo
Wann wird
float: none;
verwendet, egal, wie es ist der Standard, so dass jede Nutzung zu erklärenfloat: none;
?Gut, es hängt, wenn Sie sich für ein responsive design verwenden Sie diesen Wert eine Menge Zeit, wenn Sie wollen, dass Ihr schwebte Elemente zu Rendern, die man unter anderen bei einer bestimmten Auflösung. Für die, die
float: none;
Eigenschaft spielt eine wichtige Rolle.Paar Reale Beispiele, wie
float
nützlich ist.img
schwebte im innerenp
, die es ermöglichen, unsere Inhalte, die Strömung um.Demo (Ohne floating
img
)Demo 2 (
img
schwebte an dieleft
)float
für die Erstellung von horizontalen Menü - DemoFloat-das zweite element, oder verwenden Sie `margin`
Letzte, aber nicht zuletzt, möchte ich erklären, in diesem besonderen Fall, in dem Sie
float
nur einziges element, dasleft
aber nichtfloat
den anderen, was passiert also?Nehme an, wenn wir entfernen
float: right;
von unserer.floated_right
class
, diediv
dargestellt wird, von extremenleft
da er nicht schwebte.Demo
So, in diesem Fall, Sie können entweder
float
dieleft
als auchODER
Können Sie verwenden Sie
margin-left
, die gleich der Größe des Links gefloateten Spalte ich.e200px
Breite.clear: both;
, aber es ist in Ordnung wenn du dich beim Bearbeiten rechtfertigt so halten können, dass Art und Weiseoverflow: hidden;
besser funktioniert für meinen Gebrauch, weil ich einige unvorhersehbare float-Parametern, die dynamisch geändert von js. Hilfreiche Lösung.Müssen Sie
overflow:auto
zu Ihren übergeordneten div es für die Gesamtheit der inneren schwebte div:jsFiddle-Beispiel
Auftritt, das float-bug (obwohl ich nicht sicher bin, ob es technisch ein Fehler auf, wie viele Browser zeigen dieses Verhalten). Hier ist, was passiert:
Unter normalen Umständen, vorausgesetzt, dass keine explizite Höhe festgelegt worden ist, ein block-level-element wie z.B. ein div-Element wird festgelegt, dessen Höhe auf der Grundlage Ihres Inhalts. Den unteren Rand des übergeordneten div erweitern wird darüber hinaus das Letzte element. Leider floating element Stoppt den Eltern, von den gefloateten element zu berücksichtigen bei der Festlegung Ihrer Höhe. Dies bedeutet, dass, wenn Ihre Letzte element ist, Schwamm, wird es nicht "Strecken" der Eltern in der gleichen Weise ein normales element.
Clearing
Gibt es zwei gängige Möglichkeiten, um dieses Problem zu beheben. Das erste ist das hinzufügen einer "clearing" - element; das heißt, ein weiteres element, das unter dem schwebte eine, zwingt die Eltern, sich zu Strecken. So fügen Sie den folgenden html-Code als das Letzte Kind:
Sollte es nicht sichtbar sein, und mit clear:both, stellen Sie sicher, dass Sie sitzen nicht neben dem gefloateten element, aber nachdem es.
Overflow:
Die zweite Methode, das ist bevorzugt durch die meisten Leute (denke ich) ist die änderung der CSS des parent-Elements, so dass der überlauf ist alles andere als "sichtbar". Damit das setzen der überlauf auf "hidden" zu zwingen, die Eltern zu Strecken jenseits der Unterseite der schwebte Kind. Dies ist nur wahr, wenn man noch nicht Höhe festlegen, auf die Eltern, natürlich.
Wie gesagt, die zweite Methode ist bevorzugt, da es nicht erfordern, dass Sie gehen und fügen Sie semantisch bedeutungslose Elemente, um Ihre markup, aber es gibt Zeiten, wenn Sie Sie brauchen, die
overflow
sichtbar sein, in welchem Fall das hinzufügen eines clearing-element ist mehr als akzeptabel.Sein, weil der float von div. Hinzufügen
overflow: hidden
auf der Außenseite element.Demo
Verunsichern Sie, wie Browser rendert die Elemente, wenn es floating elements. Wenn ein block-element ist floating (Ihre inneren div in deinem Fall), anderen block-Elemente ignorieren, weil browser entfernt schwimmende Elemente aus dem normalen Textfluss der Webseite. Dann, weil die gefloateten div entfernt wurde, aus dem normalen Fluss, der außerhalb div gefüllt wird, wie die inneren div-gibt es nicht. Aber inline-Elemente (Bilder, links, text, blackquotes) respektieren die Grenzen der "floating Elements". Wenn Sie einführen, text, draußen in der div, der text wird Platz arround de innere div.
In anderen Worten, block-Elemente (überschriften, Absätze, divs, etc) ignorieren floating elements und ausfüllen, und inline-Elemente (Bilder, links, text, etc.) respektieren die Grenzen der schwimmenden Elemente.
Ein fiddle-Beispiel hier
können Sie overflow-Eigenschaft der div-container, wenn Sie keine div-show über die container z.B.:
Hier ist die folgende css:
-----------------------ODER------------------------------
Hier ist die folgende css:
Versuchen, diese