子元素浮動,父元素高度爲0現象解釋和原理淺見

   有的人在寫頁子的時候常常會碰見這樣的一個問題,就是有一個父級的div下面有子元素,子元素浮動起來後,父元素的高度變成0,撐不起來父級了。

  現在先不說解決辦法,先說下float屬性,float定義:float 屬性定義元素在哪個方向浮動。以往這個屬性總應用於圖像,使文本圍繞在圖像周圍,不過在 CSS 中,任何元素都可以浮動。浮動元素會生成一個塊級框,而不論它本身是何種元素。(摘自:w3c)。

  從定義看出,其實float屬性一開始是被應用與圖片,來形成文字環繞效果的,任何的元素只要定義了float屬相,就自動的變成一個塊級元素,同時本身就擁有了寬、高等屬性。


  由於浮動框不在文檔的普通流中,所以文檔的普通流中的塊框表現得就像浮動框不存在一樣。摘自w3c。 從這句話中看出,其實定義了float屬性後,其自身是脫離普通文檔流的,所以父級就會變爲0.


  知道原因後,其實很容易找到解決辦法了,那就是清除浮動,或者讓其父元素跟着浮動,還有一種辦法就是其父元素屬性加上 overflow:hidden,下面說下爲什麼加上這個屬性就會解決這個問題。


  這個屬性的定義:overflow 屬性規定當內容溢出元素框時發生的事情。摘自w3c。 看其字面意思,其實就是在他內容超出後所作的措施,那爲什麼父級加上這個屬性後,浮動就會關閉。overflow:hidden屬性相當於是讓父級緊貼內容,這樣即可緊貼其對象內內容(包括使用float的div盒子),從而實現了清除浮動;

   overflow有4個值:

    visible 元素的內容在元素框之外也可見,內容超出元素框時不會改變元素框的形狀。

    scroll 元素的內容會在元素框的邊界處裁剪,溢出的內容將看不見,但是瀏覽器會使用一個滾動條(或類似的東西)來訪問溢出的內容,不會改變元素本身的形狀。

    hidden 元素的內容會在元素框的邊界處裁剪,不過不會提供滾動接口使用戶訪問溢出的內容,也就是說被裁剪的內容對用戶來說不可用。

    auto 由瀏覽器自動判斷採用何種行爲,不過都建議在必要時提供一個滾動機制。

    overflow:hidden可以清楚浮動,overflow:scroll清除浮動時會產生滾動條,overflow:auto清除浮動

          

另外,如果一個絕對定位元素的內容溢出了其內容框,而且overflow設置爲要求裁該內容,可以通過使用屬性clip來設置裁剪區域的形狀。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章