css筆記:清除子元素對父元素的浮動效果的三種方法


對於浮動元素,我們知道如果父元素不設置height,而子元素全部設置為浮動,父元素不會被撐開(也就是父元素為一條直線,height為0),我們看到的就是一條線在所有子元素上面。

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>clear_float</title>
    <style>
        #father{
            border:1px solid #000;
            background:#ccc;
        }
        .child{
            width:100px;
            height:100px;
            background:red;
            float:left;
            margin-top:10px;
            margin-left:10px;
        }
    </style>
</head>
<body>
    <div id="father">
        <div class="child">child1</div>
        <div class="child">child2</div>
        <div class="child">child3</div>
    </div>
</body>
</html>

結果截圖如下:

 

 

 

這是由於浮動元素脫離標准流而存在,對於標准流與浮動元素就是實物與虛物之間的關系,如何清除浮動子元素對父元素的影響,有三種方法。
一.使用空標記清除浮動
以上面的例子為例,我們在浮動元素之后添加一個空標記(沒有內容的標簽),並對該標記設置“clear:both”,即可清除上例中子元素對父元素的影響。
例如:
上述id為father的div標簽添加一個

<div id="father">
        <div class="child">child1</div>
        <div class="child">child2</div>
        <div class="child">child3</div>
        <div class="null"></div>
    </div>

然后style標簽中添加一個“null”類的樣式:

<style>
        #father{
            border:1px solid #000;
            background:#ccc;
        }
        .child{
            width:100px;
            height:100px;
            background:red;
            float:left;
            margin-top:10px;
            margin-left:10px;
        }
        .null{
            clear:both;
        }
    </style>

結果截圖如下: 

 

 注意:上述方法雖然可以清除浮動效果,但是卻增加了毫無意義的元素節點。 
二.使用overflow屬性清除浮動 
對父元素應用“overflow:hidden”也可以消除子元素對父元素的影響。 
例如針對上述例子:

#father{
            border:1px solid #000;
            background:#ccc;
            overflow:hidden;
        }

同樣能夠實現方法一中的效果。 
三.使用after偽對象清除浮動 
我們可以通過在上述的father后面添加一個內容來消除上述影響。 
注:只需設置屬性’content’值為空即可。

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>clear_float</title>
    <style>
        #father{
            border:1px solid #000;
            background:#ccc;
            overflow:hidden;
        }
        #father:after{
            content:'';
        }
        .child{
            width:100px;
            height:100px;
            background:red;
            float:left;
            margin-top:10px;
            margin-left:10px;
        }
    </style>
</head>
<body>
    <div id="father">
        <div class="child">child1</div>
        <div class="child">child2</div>
        <div class="child">child3</div>
    </div>
</body>
</html>

效果如上述其他方法,要注意的是,ie678其默認的內外邊距可能不同,故顯示的位置可能不同。

————————————————
原文鏈接:https://blog.csdn.net/yaodebian/article/details/78002147


免責聲明!

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



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