css清除浮動

浮動產生的問題:css

 若是父容器的高度爲auto,而不是定值,在給子元素設置浮動後,父容器的高度會塌陷,不能被子元素的高度撐開,爲了解決這一問題會進行清除浮動佈局

清除浮動的方法:flex

一、給父容器設置固定的height值,此方法不適用於浮動元素高度不肯定的狀況spa

二、添加額外標籤,給浮動的元素後面添加一個clear屬性的空標籤code

<div style="clear:both;"></div>

缺點:會增長無心義的標籤blog

三、添加一個帶clear屬性的<br/>標籤,方法與2相似文檔

<br style="clear:both;" />

四、給父容器添加overflow:hidden;it

.box {
   overflow:hidden;    
}
.box .son{
   float:left;
}

五、給浮動元素的父容器也添加浮動,可是在這樣又會影響父容器相鄰元素的佈局io

六、給父元素設置display:inline-block;或display:table;可是盒模型屬性改變會致使一系列問題table

七、給浮動元素的父容器添加一個clear屬性的::after僞元素,IE6-7不支持僞元素,使用 zoom:1觸發 hasLayout

.clearfix::after{
  content: ""; 
  display: block; 
  height: 0; 
  clear: both; 
  visibility: hidden;  
  }
.clearfix { *zoom:1; }

小結:

一、經過clear屬性清除

二、經過觸發BFC(塊級格式化上下文)

 推薦:使用::after僞元素

拓展:

一、BFC概念:具備BFC特性的元素能夠看作是隔離了的獨立容器,容器裏面的元素不會在佈局上影響到外面的元素,能夠把BFC理解爲一個封閉的大箱子,箱子內部的元素不管如何翻江倒海,都不會影響到外部。

在定位體系中屬於標準文檔流(另外兩種定位體系爲浮動和絕對定位)

二、觸發BFC:只要知足下面任意一條便可觸發

①body根元素

②浮動元素:float除none之外的值

③絕對定位元素:psition:absolute;

④display爲inline-block、table-cells、flex

⑤overflow除了visible之外的值(hidden、auto、scroll)

 三、BFC特性及應用

①同一個BFC下外邊距會發生摺疊(兩個塊級元素的距離爲margin大的值);若是想要避免外邊局的重疊,能夠將其放在不一樣的BFC容器中

②BFC能夠包含浮動的元素(清除浮動)

正常狀況下,浮動會脫離標準文檔流,父級容器高度會塌陷

<div style="border: 1px solid #000;">
    <div style="width: 100px;height: 100px;background: #eee;float: left;"></div>
</div>

因爲容器內元素浮動,因此容器只剩下2px的邊距高度。若是觸發容器的BFC,那麼容器將會包裹着浮動的元素

<div style="border: 1px solid #000;overflow: hidden">
    <div style="width: 100px;height: 100px;background: #eee;float: left;"></div>     
</div>

③BFC不與浮動元素重疊

<div style="height: 100px;width: 100px;float: left;background: lightblue">我是一個左浮動的元素</div>
<div style="width: 200px; height: 200px;background: #eee">我是一個沒有設置浮動, 
也沒有觸發 BFC 元素, width: 200px; height:200px; background: #eee;</div>

這時候其實第二個元素有部分被浮動元素覆蓋(文本不會被覆蓋)若是想避免元素覆蓋,可觸發第二個元素的BFC特性,在第二個元素中加入overflow:hidden;

相關文章
相關標籤/搜索