首頁  >  文章  >  web前端  >  總結CSS浮動所差生的內容溢出問題及清除浮動的方法

總結CSS浮動所差生的內容溢出問題及清除浮動的方法

高洛峰
高洛峰原創
2017-03-09 17:50:251805瀏覽

CSS的float浮動效果在某些情況下非常不穩定,控制不好的時候一般還是清除浮動為妙,這裡我們就來總結CSS浮動所差生的內容溢出問題及清除浮動的方法

拋一塊問題磚(display: block)先看現象:
在非IE瀏覽器(如Firefox)下,當容器的高度為auto,且容器的內容中有浮動( float為left或right)的元素,在這種情況下,容器的高度不能自動伸長以適應內容的高度,使得內容溢出到容器外面而影響(甚至破壞)佈局的現象。這個現象叫浮動溢出,為了防止這個現象的出現而進行的CSS處理,就叫CSS清除浮動。
引用W3C的例子,news容器沒有包圍浮動的元素。

.news {   
  background-color: gray;   
  border: solid 1px black;   
  }   

.news img {   
  float: left;   
  }   

.news p {   
  float: rightright;   
  }
<p class="news">
<img  src="news-pic.jpg" / alt="總結CSS浮動所差生的內容溢出問題及清除浮動的方法" >
<p>some text</p>
</p>

總結CSS浮動所差生的內容溢出問題及清除浮動的方法

#清除浮動:

##1,在浮動元素後面增加
標籤;

 <br/>标签有自带的清除浮动属性;

#2,在浮動元素後面增加一個清除浮動層;

 <p>

    <p style="float:left"></p>

    <p style="float:left"></p>

    <p style="clear:both"></p>

  </p>

3,為浮動元素新增overflow:auto樣式;

#4,設定最後一個浮動元素如下樣式:#

/* 清理浮动 */
.clearfix:after {   
 visibility:hidden;   
 display:block;   
 font-size:0;   
 content:" ";   
 clear:both;   
 height:0;   
}   
.clearfix {   
 zoom:1;   
}

其原理是,在「進階」瀏覽器中使用:after 偽類別在浮動區塊後面加上一個非display:none 的不可見塊狀內容來,並給它設定clear :both 來清理浮動。在 ie6 和 7 中為浮動區塊添加 haslayout 來讓浮動區塊撐高並正常影響文件流。


5,另一個簡潔的方法:

.cf:before, .cf:after {   
    content:"";   
    display:table;   
}   
.cf:after {   
    clear:both;   
}   
.cf {   
    zoom:1;   
}

#原理還是一樣的。使用 :after 偽類來提供浮動區塊後的 clear:both。不同的是,隱藏這個空白使用的是 display: table。而不是設定 visibility:hidden;height:0;font-size:0; 這樣的 hack。

值得注意的是這裡中的 :before 偽類別。其實他是來用處理 top-margin 邊折疊的,跟清理浮動沒有太大的關係。但因為浮動會創建block formatting context,這樣浮動元素上的另而一元素上如果剛好有margin-bottom 而這個浮動元素剛好有margin-top 的話,應該讓他們不折疊(雖然這種情況並不常見) 。

以上是總結CSS浮動所差生的內容溢出問題及清除浮動的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn