對float佈局一直是隻知其一;不知其二,只知道會脫離文本流,今日看了一道題:css
CSS佈局:高度已知,左邊 300px, 右邊300px, 中間自適應。 這是實現(演示):html
<html>
<style type="text/css"> html *{ margin: 0; } #wrap div{ height: 300px; } #left{ float: left; width: 300px; background-color: red; } #mid{ text-align: left; background-color: yellow; } #right{ width: 300px; float: right; background-color: blue; } </style>
<body>
<div id = "wrap">
<div id = "left"></div>
<div id = "right"></div>
<div id = "mid">中間中間</div>
</div>
</body>
</html>
複製代碼
存在三個疑問:ide
帶着這些問題,重讀了MDN關於float 佈局的文檔佈局
float CSS屬性指定一個元素應沿其容器的左側或右側放置,容許文本和內聯元素環繞它。該元素從網頁的正常流動(文檔流)中移除,儘管仍然保持部分的流動性(與絕對定位相反)。 —— MDNui
答:若是吧mid 放在中間,以下:spa
<div id = "wrap">
<div id = "left"></div>
<div id = "mid">中間中間</div>
<div id = "right"></div>
</div>
複製代碼
渲染後以下: code
這種怪異狀況,right爲何會跑到下面? hmtl文檔渲染過程當中,是邊解析邊渲染的。按照咱們的代碼,第一個是:<div id = "wrap"></div>
複製代碼
這時候就建立了一個wrap的塊,高度300px,寬度默認100%。接着渲染:orm
<div id = "left"></div>
複製代碼
left塊它的容器是wrap塊,因此它沿着wrap的左側放置,並脫離文本流,不影響後面非float元素。cdn
<div id = "mid">中間中間</div>
複製代碼
普通塊元素,由於left是float元素,不參與文本流佈局,因此mid塊平鋪,寬度默認100%,當設置left背景透明時,能夠看到黃色mid塊;htm
<div id = "right"></div>
複製代碼
right塊也是脫離文本流。可是float佈局有一點:沿其容器左側或右側「不是左上或右上」,也就是說,right塊所處的第二行「第一行已經被mid平鋪了」,向右放置。
答:float的一個特性:容許文本和內聯元素環繞它,就是文本會正常佈局換行,但會避開float塊。
當有兩個mid,Left塊比較大的時候,也會橫跨兩個mid塊z-index只能使用處於同個文本流,這裏沒法經過設置mid的z-index使它處於Left上面
若是想是某個塊元素不受這個 float影響;只須要設置 clear:both
這裏可看出,最後一個塊把上面的都當成普通的塊,而後根據自身特性,該獨具一行仍是從左到右填充只要觸發容器的BFC特性,容器會直接被float塊撐開「容器爲灰色」
見 塊格式上下文float佈局很奇妙,也漸漸被其餘佈局給替代了。