2016-05-12 19 views
0

Wenn I #p1float:left zu setzen, wird nur der Inhalt der #p2 umschlingt die schwimmenden #p1 und nicht der div#p2 .Der div#p2 scheint von der linken Kante des Browsers nur dann vorhanden zu sein, wenn .Allerdings (wie in Chrome Developer Tools gesehen) I Stellen Sie sowohl divs zu float:left, der Inhalt als auch der Container wraps umeinander. Warum ist es so?Wie funktioniert Floating 2 (oder mehr) divs?

#p1 { 
 
    background-color: blue; 
 
    border: 1px solid black; 
 
    float: left; 
 
    width: 100px; 
 
} 
 
#p2 { 
 
    background-color: red; 
 
    border: 1px solid black; 
 
    width: 100px; 
 
    float: left; 
 
}
<title>Floating Divs</title> 
 
<h1>Floating Divs</h1> 
 
<div> 
 
    <div id="p1">DIV</div> 
 
    <div id="p2">DIVDIVDIV</div> 
 
</div>

#p1 { 
 
    background-color: blue; 
 
    border: 1px solid black; 
 
    float: left; 
 
    width: 100px; 
 
} 
 
#p2 { 
 
    background-color: red; 
 
    border: 1px solid black; 
 
    width: 100px; 
 
}
<title>Floating Divs</title> 
 
<h1>Floating Divs</h1> 
 
<div> 
 
    <div id="p1">DIV</div> 
 
    <div id="p2">DIVDIVDIV</div> 
 
</div>
Single float,#p2 is entire #p1 but content is wrapped

Both #p1 and #p2 i floated,however both container and content is wrapped

+0

Ich würde empfehlen, https://developer.mozilla.org/en-US/docs/Web/CSS/float zu lesen. Alles ist dort ziemlich gut erklärt. AUSSER vielleicht nur "es ist nur wie es funktioniert und soll funktionieren": P – thepio

Antwort

1

Die precise rules for floats wie in der CSS 2.1-Spezifikation in Punkt sagt beschrieben 2:

Wenn die aktuelle Feld links schwebend, und es irgendwelche links floating durch Elemente erzeugten Schachteln früher in dem Quelldokument, dann jede solche früheren Feld entweder die linke Außenkante des aktuellen Box muss rechts von der rechten äußeren Kante der früheren Box sein, oder seine Spitze muss niedriger sein als der Boden der früheren Box. Analog Regeln gelten für rechts schwebende Boxen.

So #p2, wenn es schwimmt wird #p1 vermeiden. Wenn es nicht schwebt, ignoriert es das Vorhandensein von #p1. Aber dann vermeidet die in #p2 enthaltene Zeilenbox die schwebende #p1, wodurch die Höhe von #p2 so groß wird, dass sie diese Zeilenbox enthalten kann.

+0

Was ist eigentlich die "line box"? Beziehen Sie sich auf den Inhalt? – avistein

+1

@avistein - Eine Zeile des Inhalts. In Ihrem Beispiel '# p2' passt der gesamte Inhalt auf eine Zeile, aber wenn Sie mehr Text hinzugefügt haben, würde es zu einer zweiten und weiteren Zeilen fließen. Jede Zeile dieses Textes ist in einer Zeile enthalten. [Line Box in der CSS 2.1 Spezifikation] (https://www.w3.org/TR/CSS22/visuren.html#line-box) – Alohci

+0

Also sind die Line Boxen standardmäßig floated, oder? Sonst würde es das floated '# p1' nicht vermeiden. Werden alle Inhalte in html in Line-Boxen gespeichert? Ich wollte jedes Ding, das wir in HTML schreiben, als Inhalt sagen, haben alle eine Box um es herum? Noch wusste ich nur, dass nur HTML-Elemente Boxen sind. – avistein

Verwandte Themen