CSS使用BFC規(guī)則布局引發(fā)外層div包裹內(nèi)層div的處理方法

BFC的概念
BFC全稱Block Formatting Context ,直譯“塊級格式化上下文”,也有譯作“塊級格式化范圍”。它是 W3C CSS 2.1 規(guī)范中的一個概念,它決定了元素如何對其內(nèi)容進(jìn)行定位,以及與其他元素的關(guān)系和相互作用。通俗的講,就是一個div內(nèi)部,我們用float和margin布局元素。
BFC布局規(guī)則:
1.內(nèi)部的Box會在垂直方向,一個接一個地放置。
2.Box垂直方向的距離由margin決定。屬于同一個BFC的兩個相鄰Box的margin會發(fā)生重疊
3.每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對于從左往右的格式化,否則相反)。即使存在浮動也是如此。
4.BFC的區(qū)域不會與float box重疊。
5.BFC就是頁面上的一個隔離的獨(dú)立容器,容器里面的子元素不會影響到外面的元素。反之也如此。
6.計算BFC的高度時,浮動元素也參與計算
創(chuàng)建一個BFC
一個BFC可以被顯式的觸發(fā)。如果想要創(chuàng)建一個新的BFC,只需要給它添加上面提到的任何一個CSS樣式就可以了。
例如,請看下面的 HTML :
- <div class="container">
- Some Content here
- </div>
一個新的BFC可以通過給容器添加任何一個觸發(fā)BFC的CSS樣式,如 overflow: scroll , overflow: hidden , display: flex , float: left ,或者 display: table 來創(chuàng)建。
display:table 可能會產(chǎn)生一些問題
overflow:scroll 可能會顯示不必要的滾動條
float:left 將會把元素置于容器的左邊,其他元素環(huán)繞著它
overflow:hidden 將會剪切掉溢出的元素
所以每當(dāng)想要創(chuàng)建一個新的BFC的時候,我們會基于我們的需求選擇最好的樣式條件。為了一致性,我在這篇文章所給出的例子中全部使用了 overflow: hidden
- container {
- overflow: hidden;
- }
你可以自由使用除了 overflow: hidden 之外的樣式聲明。
BFC布局引發(fā)的問題
我們看看BFC布局引發(fā)的問題吧。
例如如下代碼
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Clear float</title>
- <style type="text/css">
- .container{
- margin: 30px auto;
- width:600px;
- height: 300px;
- }
- .p{
- border:solid 3px #a33;
- }
- .c{
- width: 100px;
- height: 100px;
- background-color: #060;
- margin: 10px;
- float: left;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="p">
- <div class="c"></div>
- <div class="c"></div>
- <div class="c"></div>
- </div>
- </div>
- </body>
- </html>
我們希望看到的效果是:
結(jié)果出現(xiàn)如下:
解決方案:
解決方法一般有2種。
1.利用 clear屬性,清除浮動
2.使父容器形成BFC
清除浮動的方法,我們可以用如下辦法:
對父元素加一個class
- <div class="p floatfix">
- <div class="c">1</div>
- <div class="c">2</div>
- <div class="c">3</div>
- </div>
添加如下CSS
- .floatfix{
- *zoom:1;
- }
- .floatfix:after{
- content:"";
- display:table;
- clear:both;
- }
這種方法是比較好的解決方案!
另一種解決方法就是讓父元素成為BFC,這種方法有個小弊端,就是父元素也變成了浮動,不推薦用這種方法!
相關(guān)文章
- 這篇文章主要介紹了10分鐘理解BFC原理及其應(yīng)用的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-01
- 這篇文章主要介紹了淺析CSS里的BFC和IFC的用法的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-30
- 這篇文章主要介紹了淺談CSS潛藏著的BFC的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-08
css布局之BFC模式(block formatting context)
這篇文章主要介紹了css布局之BFC模式(block formatting context),通過BFC盒子的一些特性和應(yīng)用場景解釋了BFC模式,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙2017-08-16- 這篇文章主要介紹了CSS布局基礎(chǔ)BFC 的相關(guān)資料,需要的朋友可以參考下2016-07-14
- BFC(Block formatting context)直譯為"塊級格式化上下文"。它規(guī)定了內(nèi)部的Block-level Box如何布局,并且與這個區(qū)域外部毫不相干.接下來通過本文給大家介紹CSS理2018-02-22