解決高度坍塌問題(二)


我們了解完高度坍塌問題之后,那么如何去解決高度坍塌問題呢

解決高度問題的方法一:

解決問題的原理:根據W3C標准,元素都有一個隱含的屬性(Block Formatting Context)簡稱BFC,塊級格式化環境,該屬性可以設置打開或是關閉,當開啟BFC后,元素將會具有如下特性:

1.父元素的垂直外邊距不會和子元素重疊。

2.開啟BFC的元素不會被浮動元素覆蓋。

3.開啟BFC的元素可以包含浮動的子元素。

 如何開啟BFC並沒有直接開啟BFC的方法,但是在操作的過程中可以通過一些間接的元素設置開啟浮動

1.設置元素浮動

當子元素box1設置了浮動定位的時候,同時也給父元素box也設置浮動定位。結果發現雖然父元素的高度被撐開了,但是如果沒有設置寬度,原有的默認占據一行的寬度就失效了(寬度變成被子元素撐開的元素了),而box2盒子依舊往上移動了。不推薦使用

 

2.設置元素絕對定位

給父元素設置絕對定位后,原有的默認寬度失效(變成被子元素撐開的寬度了),box2盒子依舊向上移動。不推薦使用

3.設置元素inline-block

子元素box1 保持float:left 的浮動定位,為父元素box設置display:inline-block變成行內塊元素,box2盒子不再上移,但是原有的默認寬度失效(變成被子元素撐開的寬度)不推薦使用

 

4.將元素的over-flow(超出部分)設置成一個非visible的值

回憶over-flow屬性的值有visible(默認值)、hidden、scroll、auto。非visible的值有hidden、scroll、auto

首先嘗試一下把box父元素設置為 overflow:scroll;寬度被保留了下來,高度也被子元素撐開,box2盒子也沒有趁機上移,頁面布局也很完美。但是scroll屬性值帶有的滾動條卻很礙眼。嘗試其他屬性值試試。

設置父元素屬性overflow: auto;效果完美

父元素overflow: hidden;

 

 推薦方式:將overflow設置為hidden開啟BFC最簡便的方式,解決overflow最簡便的方式就是設置overflow:hidden;

瀏覽器兼容:這樣設置,Chrome瀏覽器支持,Firefox瀏覽器支持,IE瀏覽器IE6版本及以下的瀏覽器不支持這種設置。所以使用這種方式不能兼容IE6及其以下的版本。

在IE6中雖然沒有BFC,但是有另一隱含屬性hasLayout,如果想開啟hasLayout,直接設置元素zoom為1即可。(zoom:表示放大,后面跟着放大倍數的數值;zoom:1表示不放大)zoom只在IE瀏覽器中支持,其他瀏覽器都不支持。

如果下想同時兼容所有版本的瀏覽器可以兩種方式都寫,既有overflow又有zoom。


 

解決高度塌陷結局方法之二

在了解這個方法之前,先來簡單回顧一下clear屬性(只能清除兄弟元素的影響,不能清除父元素的影響)

clear清除屬性的取值:

none:不清除浮動;

left:左側不允許出現浮動,清除左側浮動元素對當前元素產生的影響;

right:右側不允許出現浮動,清除右側浮動元素對當前元素產生的影響;

both:清除對元素影響最大的浮動。

清楚了clear屬性清除的用法之后,就可以運用到解決高度塌陷。

當為父元素中的子元素設置了向浮動時。為box1設置向左浮動。就會發現子元素的位置沒變,但是父元素box發生了高度坍塌

 

 

為box1盒子的兄弟元素box2 設置clear屬性

 

解決高度塌陷方案二

優點

可以直接在高度塌陷的父元素最后添加一個空白的div,由於這個div並沒有設置浮動,所以他可以撐開父元素的高度的。

再對其進行清除浮動(clear),通過這樣可以通過這個空白的div來撐開父元素的高度。

相比於上面的使用overflow屬性清除浮動,更加建議使用此方案,副作用相對而言更少(基本沒有),而且可以兼容所有的瀏覽器。

缺點

因為div屬於HTML元素,HTML屬於結構部分,所以使用這種方式雖然可以解決問題,但是會在頁面中添加多余的結構。

假如既不想添加結構,又希望可以解決高度塌陷問題

解決辦法通過after偽類,選中box父元素的后邊

可以通過after偽類向元素的最后添加一個空白的塊元素,然后對其清除浮動。這樣做和添加div原理一樣,可以達到一個相同的效果。

而且不會在頁面添加多余的div(結構),最推薦使用的方式,幾乎沒有副作用。

 

 


 

使用clearfix屬性,清除修復。

給box添加一個clearfix的屬性

 設置clearfix屬性值,其中最為關鍵的三點是

這是最推薦使用的一種方式。但是在IE6中不支持 :after偽類。如果想在IE6中顯示開啟hasLayout,設置zoom:1。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM