CSS之清除浮動

來源:互聯網
上載者:User

標籤:style   blog   http   color   java   ar   問題   div   代碼   

一、清除浮動的目的。

  1、當一個父元素的高度不寫或為auto時,而且這個父元素內又有浮動的子項目,那麼這時候該父元素的高度將不會自動適應子項目的高度,也可以說高度是0px;

  有如下代碼:

    <div class="divp" style="width:300px; background:red; border:3px solid #000000;">        <div style="height:300px;float:left; background-color:Green">123123</div>    </div>

  此代碼父元素高度不設定,而且裡面又有左浮動高度為300px的子項目。實際顯示效果為:

    

    可以看到,父div僅僅顯示為其邊框的高度,並沒有適應其子項目的高度,要正確顯示父元素的邊框的話,此時就要清除浮動。我們在原來的代碼的基礎上加多一個<br/>以用於清除浮動,實際代碼如下:

    <div class="divp" style="width:300px; background:red; border:3px solid #000000;">        <div style="height:300px;float:left; background-color:Green">123123</div>        <br/ style="clear:both;" >  //此行代碼用於清除浮動    </div>

    現在再來看看現在的效果:

    

    注意:清除浮動的元素要放在正確的位置上,必須緊貼著浮動元素。

  2、布局錯位問題。

    因為浮動元素脫離了標準文檔流,因此其它非浮動元素可能會受此影響而錯位。

    例如有如下代碼:

<div style="border:2px solid #000; width:320px;">        <div style="width:100px;height:100px;float:left; border:1px solod #555">左浮動元素</div>        <div style="width:100px;height:100px;float:right; border:1px solod #AAA">右浮動元素</div></div>        <div>看看我的位置</div>

    理論上說來,最下面的div與上面的div沒有關係,因此會自動排到上面的div的下面一行。來看效果:

    

    可以看到,效果不像預期,究其原因,還是上面的父div高度不適應子浮動元素而導致,高度僅僅為邊框的高度,從而下面的div自動頂上去了,因此到此錯位

    我們來改寫上面的代碼如下所示:

<div style="border:2px solid #000; width:320px;">        <div style="width:100px;height:100px;float:left; border:1px solid #555555">左浮動元素</div>        <div style="width:100px;height:100px;float:right; border:1px solid #AAAAAA">右浮動元素</div>        <br style="clear:both;" /></div>        <div>看看我的位置</div>

    上面的代碼僅僅添加了一個<br/>元素用於清除浮動,來看最終效果。

    

    看到效果已經正確了。

    但是,如果清除浮動的元素的位置放置不正確會有什麼後果呢?再來改寫下面的代碼:

<div style="border:2px solid #000; width:320px;">        <div style="width:100px;height:100px;float:left; border:1px solid #555555">左浮動元素</div>        <div style="width:100px;height:100px;float:right; border:1px solid #AAAAAA">右浮動元素</div></div>        <br style="clear:both;" />    //稍稍調整了一下清除浮動的元素的位置        <div>看看我的位置</div>  </body>

    效果如下:

    

    可以看到,雖然下面的div的位置正確了,但是上面的父元素還是沒有適應子浮動元素的高度。

   今天公司的前端發給了我一個清除浮動的解決方案列表,覺得挺好的,有的甚至見都未見過。整理如下:

1. float  缺點:層層往上找,沒完沒了,到了body那,算是個頭  float 和 margin:0 auto; 有衝突2. display:inline-block;  缺點:不能設定 margin:0 auto;3. overflow:hidden;  缺點:很多JS互動特效做不了,多出去的部分隱藏了4. 在父級內,加空DIV:clear:both;   缺點:父級不能加padding,否則IE6 IE7不相容5. <br clear="all" />  缺點:每次都要加這個分行符號6. .clear:after { content: ‘\20‘; clear: both; display: block; }  缺點:如果代碼多了點,也叫缺點的話……  此外,如果父級沒有寬,就必須為父級加上:zoom:1;用來解決IE6 IE7下的問題

CSS之清除浮動

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.