2016-05-12 22 views
0

當我設置#p1float:left,只有浮動#p1而不是相反的#p2包裹內容div#p2 .The div#p2似乎只從瀏覽器的左邊緣存在(如Chrome開發者工具看到的)。但是,當我同時設置div divfloat:left,內容以及容器相互纏繞。爲什麼?浮動2(或更多)div如何工作?

#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>
如在CSS 2.1規範在點2表示描述 Single float,#p2 is entire #p1 but content is wrapped

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

+0

我只是推薦閱讀https://developer.mozilla.org/en-US/docs/Web/CSS/float。在那裏一切都很好解釋。除了可能只是「它是如何工作並且意味着工作的」:P – thepio

回答

1

precise rules for floats的:

如果當前框是左浮置,並且有由元件較早源文檔中生成的任何向左浮動 盒,然後 每個這樣的早期中,或者當前框 的左外邊緣必須在早期盒子的右邊緣右側,或者其頂部必須低於早期盒子的底部。類似的 規則適用於右浮動框。

所以#p2當它浮動時將避免#p1。當它不漂浮時,它將忽略#p1的存在。但是,#p2中包含的線框避免浮動的#p1,導致#p2的高度增長到足以允許其包含該線框。

+0

實際上「線框」是什麼?你是指內容? – avistein

+1

@avistein - 內容的一行。在你的例子'#p2'中,所有的內容都適用於一行,但是如果你添加了更多的文本,它會流到第二行和更多行。該文本的每一行都包含在一個線框中。 [CSS 2.1規範中的線框](https://www.w3.org/TR/CSS22/visuren.html#line-box) – Alohci

+0

所以線框默認是浮動的,對不對?否則,它不會避免浮動的'#p1'.Also中的所有內容存儲在行盒?我的意思是說我們用html作爲內容編寫的每一件事情,儘管它們周圍都有一個盒子?現在我只知道只有html元素是盒子。 – avistein