BFC

一、BFC是什麼?

BFC是定義了在正常流中塊元素的佈局方式。怎麼理解,看下面敘述。

當一個元素的position聲明爲static或者是默認狀態下,這個元素就會被佈局在正常流中。我們知道在根元素也就是html或者body元素中嵌套一個塊元素的話,這個塊元素就會儘可能的向左和向上的位置進行佈局。那麼爲什麼會這樣?這是因爲這個根元素爲這個塊元素生成了一個BFC的環境,這個環境決定了這個塊元素的佈局方式要按照BFC定義的方式進行佈局,也就是儘可能的向上向左。

更直白的說,我只要將一個元素的內部也就是其子元素放置的環境聲明爲BFC環境,那麼在這個元素內部所有的子元素就會按照BFC規定的方式進行佈局。那麼如何聲明這麼一個BFC環境呢?

 

二、如何聲明BFC環境

如果一個元素滿足如下性質,那麼就會爲其子元素定義了一個BFC環境。

1.浮動

2.絕對定位

3.非塊盒的塊容器(一般是 inline-block 、table-cell、table-caption)注意沒有div或者廣義的說沒有display爲block的元素,因爲div是一個塊盒。

4.‘overflow’不爲visible的快盒。

 

那麼,問題來了,一個元素聲明瞭overflow:hidden和display:inline-block能不能產生BFC?

答案可能是yes,原因是滿足了非塊盒的塊容器,雖然不滿足‘overflow’不爲visible的快盒。

 

三、在BFC環境下的元素如何佈局?

在一個BFC環境下,豎直方向上,盒子一個接一個的從包含快的最頂端放置,也就是說儘可能的靠上放置。水平方向上,每個盒子儘可能的向左放置。即使存在浮動元素也不例外。並且由於BFC環境流失正常流環境,所以說垂直相鄰的塊元素的margin能夠合併。

 

四、聲明BFC元素的高度問題。

1如果它只含有內聯級子級,高度就是最高的行盒的top與最低的行盒的bottom之間的距離

2如果它只含有塊級子級,高度由就是最高的塊級子級盒的top margin-edge到最低的塊級子級盒的bottom margin-edge之間的距離

3絕對定位的子級會被忽略,而相對定位的盒不考慮其偏移。

4對於浮動元素,那麼聲明BFC的元素也就是“父元素”的高度要包含浮動元素的margin框。前提是這個浮動元素是該父元素的直接子元素。

 

五、應用

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
	h1 {text-align:center;}
	.catalogue {
		width:1000px;
		margin:0 auto;
	}
	.bfc {
		margin:30px 0;
		overflow: hidden;  /*清浮動*/ 
		zoom:1;
		height:20px;
		
	}
	.bfc > div {
		margin:0 20px;
	}
	.bfc .name {
		float: left;
	}
	.bfc .page {
		float: right;
	}
	.bfc .line {
		height:100%;
		background:#fff url(style/point.png) center repeat-x;
		overflow: hidden;  /*BFC在浮動周圍環繞 但是浮動元素不會覆蓋BFC*/
	}

</style>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>BFC應用之目錄線</title>
</head>
<body>
  <h1>日常應用目錄、欄目標題等</h1>
  <div class="catalogue">
    <div class="bfc">
      <div class="name">CSS3的REM設置字體大小</div>
      <div class="page">w3cplus</div>
      <div class="line"></div>
    </div>
    <div class="bfc">
      <div class="name">FONT SIZING WITH REM </div>
      <div class="page">Jonathan Snook</div>
      <div class="line"></div>
    </div> 
    <div class="bfc">
      <div class="name">There’s more to the CSS rem unit than font sizing </div>
      <div class="page">css-tricks</div>
      <div class="line"></div>
    </div>
</div>
</body>
</html> 



具體在該例子中對於浮動和BFC關係請到 http://blog.csdn.net/wmaoshu/article/details/52995912

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章