CSS之浮動(dòng)元素影響清除方法歸納

前言

浮動(dòng)是CSS的三種基本定位機(jī)制之一,在現(xiàn)在網(wǎng)頁(yè)的DIV+CSS基本布局中,無(wú)論是兩列布局,三列布局,多列布局,還是混合型布局,浮動(dòng)幾乎無(wú)處不在。浮動(dòng)機(jī)制使用很簡(jiǎn)單,只需要設(shè)置元素的float屬性即可,使用也很廣泛,無(wú)論網(wǎng)頁(yè)的大布局,還是網(wǎng)頁(yè)中小模塊的排版,都可以輕松使用這種機(jī)制方式進(jìn)行CSS樣式設(shè)置完成想要的排版效果,但浮動(dòng)機(jī)制有一個(gè)問(wèn)題,就是浮動(dòng)的元素會(huì)脫離文檔流,并且對(duì)緊鄰它之后的不浮動(dòng)元素和它的父元素有影響,一不小心就會(huì)導(dǎo)致后續(xù)布局排版錯(cuò)亂,所以必須要在設(shè)置浮動(dòng)之后對(duì)其他可能會(huì)受影響的元素做清理。
我對(duì)浮動(dòng)元素導(dǎo)致父元素受影響后的清理的處理方法做了自己的一些簡(jiǎn)單歸納,下面通過(guò)自己的一個(gè)簡(jiǎn)單示例進(jìn)行分析說(shuō)明。

示例的html代碼:

<!DOCTYPE html>
<html>

<head>
    <title>CSS浮動(dòng)影響清除方法測(cè)試</title>
</head>

<body>
    <div class="container">
        <span class="left-img">
            ![](images/people.jpg)
        </span>
        <p class="right-paragraph">
            雨,像銀灰色黏濕的蛛絲,織成一片輕柔的網(wǎng),網(wǎng)住了整個(gè)秋的世界。天也是暗沉沉的,像古老的住宅里纏滿(mǎn)著蛛絲網(wǎng)的屋頂。那堆在天上的灰白色的云片,就像屋頂上剝落的白粉。在這古舊的屋頂?shù)幕\罩下,一切都是異常的沉悶。園子里綠翳翳的石榴、桑樹(shù)、葡萄藤,都不過(guò)代表著過(guò)去盛夏的繁榮,現(xiàn)在已成了古羅馬建筑的遺跡一樣,在蕭蕭的雨聲中瑟縮不寧,回憶著光榮的過(guò)去。草色已經(jīng)轉(zhuǎn)入憂(yōu)郁的蒼黃,地下找不出一點(diǎn)新鮮的花朵;宿舍墻外一帶種的嬌嫩的洋水仙,垂了頭,含著滿(mǎn)眼的淚珠,在那里嘆息它們的薄命,才過(guò)了兩天的晴美的好日子又遇到這樣霉氣薰薰的雨天。只有墻角的桂花,枝頭已經(jīng)綴著幾個(gè)黃金一樣寶貴的嫩蕊,小心地隱藏在綠油油橢圓形的葉瓣下,透露出一點(diǎn)新生命萌芽的希望。
              雨靜悄悄地下著,只有一點(diǎn)細(xì)細(xì)的淅瀝瀝的聲音。桔紅色的房屋,像披著鮮艷的袈裟的老僧,垂頭合目,受著雨底洗禮。那潮濕的紅磚,發(fā)出有刺激性的豬血的顏色和墻下綠油油的桂葉成為強(qiáng)烈的對(duì)照。灰色的癩蛤蟆,在濕爛發(fā)霉的泥地里跳躍著;在秋雨的沉悶的網(wǎng)底,只有它是唯一的充滿(mǎn)愉快的生氣的東西。它背上灰黃斑駁的花紋,跟沉悶的天空遙遙相應(yīng),造成和諧的色調(diào)。它噗通噗通地跳著,從草窠里,跳到泥里,濺出深綠的水花。   雨,像銀灰色黏濡的蛛絲,織成一片輕柔的網(wǎng),網(wǎng)住了整個(gè)秋的世界。 --張愛(ài)玲
        </p>
    </div>
</body>

</html>

css代碼:

    * {
        margin: 0;
        padding: 0;
    }
    
    .container {
        width: 700px;
        margin: 10px auto;
        background-color: darkgray;
        border: 10px dotted #333;
    }
    
    .left-img {
        float: left;
        width: 177px;
        border: 5px dotted burlywood;
    }
    
    .right-paragraph {
        float: right;
        width: 500px;
        border: 5px dotted dodgerblue;
    }

示例在網(wǎng)頁(yè)上的效果截圖:

示例效果圖.png

父容器container中包含一張圖片以及一段文字,其中父元素仍在普通的文檔流中,而圖片設(shè)置左浮動(dòng),文本p設(shè)置右浮動(dòng),兩個(gè)元素均脫離了文檔流。所以受子元素浮動(dòng)設(shè)置的影響,其中父元素中相當(dāng)于沒(méi)有任何元素,在未設(shè)置固定高度的情況下無(wú)法撐開(kāi),默認(rèn)內(nèi)容高度為0
這種css樣式設(shè)置在布局中很常見(jiàn),但如果父元素?zé)o法撐開(kāi),在父容器之后的元素布局可能會(huì)因此出現(xiàn)位置的排版錯(cuò)亂。這種效果往往不是我們所需要的。我們更期待的布局效果是,父元素?zé)o需設(shè)置固定高度,而是根據(jù)其中子元素的最大高度來(lái)?yè)伍_(kāi)父元素的高度,即父元素height=子元素中高度最大值
本身普通文檔流中css樣式布局可自動(dòng)父元素會(huì)根據(jù)其子元素的最高值撐開(kāi)相應(yīng)高度,但由于子元素均浮動(dòng)導(dǎo)致脫離文檔流的影響,父元素只能通過(guò)方法進(jìn)行清理浮動(dòng)元素的影響。

清理之后實(shí)現(xiàn)的效果圖

期望效果圖.png

清理方法思路解析

1. 在父容器的最后一個(gè)子元素的下面添加一個(gè)空元素并且清理它

代碼展示:

    <div class="container">
        <span class="left-img">
            ![](images/people.jpg)
        </span>
        <p class="right-paragraph">
            <!--文本內(nèi)容-->
        </p>
        <div style="clear:both;"></div>
    </div>

這種方式會(huì)添加多余的不必要的代碼。

2. 選擇浮動(dòng)父容器

代碼展示:

.container {
        float: left;
    }

但下一個(gè)元素會(huì)受到這個(gè)浮動(dòng)元素的影響。

3. 設(shè)置父容器的屬性overflow等于hidden或auto

代碼展示:

.container {
        overflow: hidden;
        /*overflow: auto;*/
    }

overflow屬性定義在包含的內(nèi)容對(duì)于指定的尺寸太大的情況下元素應(yīng)該怎么樣。在默認(rèn)的情況下,內(nèi)容會(huì)溢出到框外,進(jìn)入相鄰的空間。應(yīng)用值為hidden或auto的overflow屬性有一個(gè)有用的副作用,這會(huì)自動(dòng)地清理包含的任何浮動(dòng)元素。但這個(gè)方法并不適合所有的情況,因?yàn)樵O(shè)置框的overflow屬性會(huì)影響他的表現(xiàn)。更具體來(lái)說(shuō),這種方法在某種情況下會(huì)產(chǎn)生滾動(dòng)條或截?cái)鄡?nèi)容。

4. 使用CSS方法時(shí)結(jié)合使用:after偽類(lèi)和內(nèi)容聲明在指定的現(xiàn)有內(nèi)容的末尾添加新的內(nèi)容

代碼展示:

.clear:after {
        content: '';
        height: 0;
        visibility: hidden;
        display: block;
        clear: both;
    }
<div class="container clear">
        <span class="left-img">
            ![](images/people.jpg)
        </span>
        <p class="right-paragraph">
            雨,像銀灰色黏濕的蛛絲,織成一片輕柔的網(wǎng),網(wǎng)住了整個(gè)秋的世界。天也是暗沉沉的,像古老的住宅里纏滿(mǎn)著蛛絲網(wǎng)的屋頂。那堆在天上的灰白色的云片,就像屋頂上剝落的白粉。在這古舊的屋頂?shù)幕\罩下,一切都是異常的沉悶。園子里綠翳翳的石榴、桑樹(shù)、葡萄藤,都不過(guò)代表著過(guò)去盛夏的繁榮,現(xiàn)在已成了古羅馬建筑的遺跡一樣,在蕭蕭的雨聲中瑟縮不寧,回憶著光榮的過(guò)去。草色已經(jīng)轉(zhuǎn)入憂(yōu)郁的蒼黃,地下找不出一點(diǎn)新鮮的花朵;宿舍墻外一帶種的嬌嫩的洋水仙,垂了頭,含著滿(mǎn)眼的淚珠,在那里嘆息它們的薄命,才過(guò)了兩天的晴美的好日子又遇到這樣霉氣薰薰的雨天。只有墻角的桂花,枝頭已經(jīng)綴著幾個(gè)黃金一樣寶貴的嫩蕊,小心地隱藏在綠油油橢圓形的葉瓣下,透露出一點(diǎn)新生命萌芽的希望。
              雨靜悄悄地下著,只有一點(diǎn)細(xì)細(xì)的淅瀝瀝的聲音。桔紅色的房屋,像披著鮮艷的袈裟的老僧,垂頭合目,受著雨底洗禮。那潮濕的紅磚,發(fā)出有刺激性的豬血的顏色和墻下綠油油的桂葉成為強(qiáng)烈的對(duì)照。灰色的癩蛤蟆,在濕爛發(fā)霉的泥地里跳躍著;在秋雨的沉悶的網(wǎng)底,只有它是唯一的充滿(mǎn)愉快的生氣的東西。它背上灰黃斑駁的花紋,跟沉悶的天空遙遙相應(yīng),造成和諧的色調(diào)。它噗通噗通地跳著,從草窠里,跳到泥里,濺出深綠的水花。   雨,像銀灰色黏濡的蛛絲,織成一片輕柔的網(wǎng),網(wǎng)住了整個(gè)秋的世界。 --張愛(ài)玲
        </p>
    </div>

這個(gè)方法在IE6以及更低版本中不起作用。

以上大概就是幾種清理方式的簡(jiǎn)單歸納,大家可以根據(jù)自己的實(shí)際使用場(chǎng)景和局限進(jìn)行選擇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,814評(píng)論 1 92
  • relative:生成相對(duì)定位的元素,通過(guò)top,bottom,left,right的位置相對(duì)于其正常位置進(jìn)行定位...
    zx9426閱讀 969評(píng)論 0 2
  • 一,浮動(dòng)元素有什么特征?對(duì)父容器、其他浮動(dòng)元素、普通元素、文字分別有什么影響? 浮動(dòng)模型是一種可視化格式模型,浮動(dòng)...
    DeeJay_Y閱讀 907評(píng)論 0 4
  • 1.CSS基本概念 1.1 CSS的定義 CSS(Cascading Style Sheets)層疊樣式表,主要用...
    寥寥十一閱讀 1,880評(píng)論 0 6
  • 人的地位是由自身的強(qiáng)大決定的,動(dòng)物已經(jīng)成了自然界中的低能寄生者。但是,人和動(dòng)物到底有什么區(qū)別呢?我們最容易想到的就...
    汲思廣溢閱讀 221評(píng)論 0 2