1. 程式人生 > >CSS清除float浮動的常用幾種方法

CSS清除float浮動的常用幾種方法

一、關於float浮動及其產生

在網頁佈局排版中我們會經常用到float元素,float定義元素往哪個方向浮動,使元素脫離文件流,按照指定方向發生移動,遇到父級邊界或者相鄰的浮動元素停了下來它有四個屬性值:

none (預設值,元素不浮動,並會顯示在其在文字中出現的位置)。

left (元素向左浮動) 。

right (元素向右浮動)。

inherit (規定應該從父元素繼承 float 屬性的值) 。

先來看看浮動的效果,為了讓兩個塊級元素並排顯示,我們使用了float屬性

<head>
    <meta charset="UTF-8">
    <title
>浮動</title> <style> body>div{width:500px;border: 2px solid red} .div1{width: 100px;height: 100px;background-color: blue;float: left} .div2{width: 100px;height: 100px;background-color: yellow; float: left} </style> </head> <body> <div > <
div class="div1">我是div1</div> <div class="div2">我是div2</div> </div> </body>
效果:
div1和div2都是向左浮動,達到了我們並排排列的效果但是我們也看到了float也產生了很多副作用:父元素邊框塌陷,
背景不能顯示、不能設定padding和margin等等。所以這就是我們要學習消除浮動影響的原因。

二、消除浮動的方法

1.clear清除法

在浮動元素後面新增一個空的div。

<head>
    <meta charset="UTF-8"
> <title>浮動</title> <style> body>div{width:500px;border: 2px solid red} .div1{width: 100px;height: 100px;background-color: blue;float: left} .div2{width: 100px;height: 100px;background-color: yellow; float: left} .empty{clear: both;} </style> </head> <body> <div > <div class="div1">我是div1</div> <div class="div2">我是div2</div> <div class="empty"></div> </div> </body>

效果:


2.給父元素設定高度

在css中父div中加height:200px;效果為:


這個方法是最簡單的,但是會導致我們程式碼的擴充套件性變差,因為我們的子元素一旦變化父元素也要變化,這樣就變得很不靈活了,所以在專案中我們不一般不用這種方法。

3.讓父元素也浮動

在父元素div中加float:left;但是這種方法的缺點是要給每一個父元素都加float比較麻煩,如果父元素多的話那就更麻煩了,同時浮動多了容易出問題,所以一般也不推薦這種方法。

4.overflow:hidden

這個方法非常簡單方便,在父元素中加overflow:hidden;(body>div{width:500px;border: 2px solid red;overflow: hidden;})這樣可以解決邊框塌陷的問題,但是要注意這個方法在下拉列表框場景下會遇到新的問題,並且還要考慮瀏覽器的相容問題。

5.after偽類清除法

這個方法是最好的,就出了寫法稍微麻煩一點點,沒有什麼副作用。寫法如下:

.father:after{ /*father是指浮動div元素的父元素*/

content:'';  /*把father類後面的新增元素設定為空*/

display:block; /*把新增元素的內容設定為block塊級元素*/

clear:both;  /*清除這個元素兩邊的浮動

}

下面來看我們上面的程式碼用after偽類清除,同樣達到了我們的目的:

<style>
        body>div{width:500px;border: 2px solid red;}
       body div:after{
            content: '';
            display: block;
            clear: both;
        }
        .div1{width: 100px;height: 100px;background-color: blue;float: left}
        .div2{width: 100px;height: 100px;background-color: yellow; float: left}

    </style>
</head>
<body>
<div >
    <div class="div1">我是div1</div>
    <div class="div2">我是div2</div>
</div>
</body>
效果:


三、總結

在實際專案中我是比較推薦最後兩種方法,當然清除浮動的方法還有很多,我們可以自由選擇使用哪一種,只要最後能達到我們的目標並不出現其他問題就可以。本人只是羅列了我認為常見的清除浮動的方法,肯定還有其他方法,歡迎大家補充。