如何清除浮動(dòng)

本文概述

本文的框架圖如下:

image

一第焰、浮動(dòng)到底是什么驶睦?

W3school中給出的浮動(dòng)定義為<b>浮動(dòng)的框可以向左或向右移動(dòng),直到它的外邊緣碰到包含框或另一個(gè)浮動(dòng)框的邊框?yàn)橹埂?lt;/b>由于浮動(dòng)框脫離文檔的普通流中,所以文檔的普通流中的塊框表現(xiàn)得就像浮動(dòng)框不存在一樣侧但。


css浮動(dòng)

二介评、浮動(dòng)有什么特點(diǎn)库北?

浮動(dòng)的特點(diǎn)爬舰,可以用八個(gè)字總結(jié):脫標(biāo)、貼邊寒瓦、字圍和收縮情屹。

為了更好說(shuō)明,請(qǐng)看下圖:
當(dāng)框 1 向左浮動(dòng)時(shí)杂腰,它脫離文檔流(脫標(biāo))并且向左移動(dòng)(貼邊)垃你,直到它的左邊緣碰到包含框的左邊緣。因?yàn)樗辉偬幱谖臋n流中喂很,所以它不占據(jù)空間惜颇,實(shí)際上覆蓋住了框 2,使框 2 從視圖中消失少辣。如果框2中有文字凌摄,就會(huì)圍著框1排開(kāi)(字圍)。

如果把所有三個(gè)框都向左浮動(dòng)漓帅,那么框 1 向左浮動(dòng)直到碰到包含框锨亏,另外兩個(gè)框向左浮動(dòng)直到碰到前一個(gè)浮動(dòng)框。


CSS 浮動(dòng)實(shí)例 - 向左浮動(dòng)的元素

下面著重講解下第四個(gè)特點(diǎn)--收縮

一個(gè)浮動(dòng)的內(nèi)聯(lián)元素(比如span img標(biāo)簽)不需要設(shè)置display:block就可以設(shè)置寬度煎殷。

<style>
        div{
            float: left;
            background-color: greenyellow;
        }
    </style>
</head>
<body>
<div>
    這是一段文字
</div>
</body>

得到以下的效果:


image

我們都知道div標(biāo)簽是塊級(jí)元素屯伞,會(huì)獨(dú)占一行,然而上面的例子中將div設(shè)置為左浮后豪直,其寬度不再是占滿一行劣摇,而是收緊為內(nèi)部元素的寬度,這就是浮動(dòng)第四個(gè)特征的含義弓乙。

三末融、浮動(dòng)有什么缺點(diǎn)?

先看下面這段代碼:

  <style>
      .parent{
          border: solid 5px;
          width:300px;
      }
      .child:nth-child(1){
          height: 100px;
          width: 100px;
          background-color: yellow;
          float: left;
      }
      .child:nth-child(2){
          height: 100px;
          width: 100px;
          background-color: red;
          float: left;
      }
      .child:nth-child(3){
          height: 100px;
          width: 100px;
          background-color: greenyellow;
          float: left;
      }
    </style>
</head>
<body>
<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
</div>
</body>

我們想讓父容器包裹著三個(gè)浮動(dòng)元素暇韧,然而事與愿違勾习,得到卻是這樣的結(jié)果:


父容器高度塌陷

這就是浮動(dòng)帶來(lái)副作用----父容器高度塌陷,于是清理浮動(dòng)就顯著至關(guān)重要懈玻。

四巧婶、如何清理浮動(dòng)?

清除浮動(dòng)不是不用浮動(dòng)涂乌,清除浮動(dòng)產(chǎn)生的父容器高度塌陷艺栈。

套路1:給浮動(dòng)元素的父元素添加高度(擴(kuò)展性不好)

如果一個(gè)元素要浮動(dòng),那么它的父元素一定要有高度湾盒。高度的盒子湿右,才能關(guān)住浮動(dòng)》9矗可以通過(guò)直接給父元素設(shè)置height毅人,實(shí)際應(yīng)用中我們不大可能給所有的盒子加高度吭狡,不僅麻煩,并且不能適應(yīng)頁(yè)面的快速變化丈莺;另外一種划煮,父容器的高度可以通過(guò)內(nèi)容撐開(kāi)(比如img圖片),實(shí)際當(dāng)中此方法用的比較多场刑。

套路2:clear:both;

在最后一個(gè)子元素新添加最后一個(gè)冗余元素般此,然后將其設(shè)置clear:both,這樣就可以清除浮動(dòng)蚪战。這里強(qiáng)調(diào)一點(diǎn)牵现,即在父級(jí)元素末尾添加的元素必須是一個(gè)塊級(jí)元素,否則無(wú)法撐起父級(jí)元素高度邀桑。

    <div id="wrap">
        <div id="inner"></div>
        <div style="clear: both;"></div>
    </div>
    #wrap{
          border: 1px solid;
    }
    #inner{
          float: left;
          width: 200px;
          height: 200px;
          background: pink;
    }

套路3:偽元素清除浮動(dòng)

上面那種辦法固然可以清除浮動(dòng)瞎疼,但是我們不想在頁(yè)面中添加這些沒(méi)有意義的冗余元素,此時(shí)如何清除浮動(dòng)嗎壁畸?
結(jié)合 :after 偽元素和 IEhack 贼急,可以完美兼容當(dāng)前主流的各大瀏覽器,這里的 IEhack 指的是觸發(fā) hasLayout捏萍。

<div id="wrap" class="clearfix">
    <div id="inner"></div>
</div>
      #wrap {
        border: 1px solid;
      }
      #inner {
        float: left;
        width: 200px;
        height: 200px;
        background: pink;
      }
      /*開(kāi)啟haslayout*/
      .clearfix {
        *zoom: 1;
      }
      /*ie6 7 不支持偽元素*/
      .clearfix:after {
        content: '';
        display: block;
        clear: both;
        height:0;
        line-height:0;
        visibility:hidden;//允許瀏覽器渲染它太抓,但是不顯示出來(lái)
      }

給浮動(dòng)元素的父容器添加一個(gè)clearfix的class,然后給這個(gè)class添加一個(gè):after偽元素令杈,實(shí)現(xiàn)元素末尾添加一個(gè)看不見(jiàn)的塊元素來(lái)清理浮動(dòng)走敌。這是通用的清理浮動(dòng)方案,推薦使用

套路4:給父元素使用overflow:hidden;

這種方案讓父容器形成了BFC(塊級(jí)格式上下文)逗噩,而B(niǎo)FC可以包含浮動(dòng)掉丽,通常用來(lái)解決浮動(dòng)父元素高度坍塌的問(wèn)題。

<b>BFC的觸發(fā)方式</b>

我們可以給父元素添加以下屬性來(lái)觸發(fā)BFC:

  • float 為 left | right

  • overflow 為 hidden | auto | scorll

  • display 為 table-cell | table-caption | inline-block

  • position 為 absolute | fixed

這里可以給父元素設(shè)置overflow:auto异雁,但是為了兼容IE最好使用overflow:hidden捶障。

但這種辦法有個(gè)缺陷:如果有內(nèi)容出了盒子,用這種方法就會(huì)把多的部分裁切掉纲刀,所以這時(shí)候不能使用项炼。

BFC的主要特征:

  • BFC容器是一個(gè)隔離的容器,和其他元素互不干擾示绊;所以我們可以用觸發(fā)兩個(gè)元素的BFC來(lái)解決垂直邊距折疊問(wèn)題锭部。

  • BFC不會(huì)重疊浮動(dòng)元素

  • BFC可以包含浮動(dòng),這可以清除浮動(dòng)。

套路5:br標(biāo)簽清浮動(dòng)

br標(biāo)簽存在一個(gè)屬性:clear耻台。這個(gè)屬性就是能夠清除浮動(dòng)的利器空免,在br標(biāo)簽中設(shè)置屬性clear,并賦值all盆耽。即能清除掉浮動(dòng)蹋砚。

    <div id="wrap">
      <div id="inner"></div>
      <br clear="all" />
    </div>
      #wrap {
        border: 1px solid;
      }
      #inner {
        float: left;
        width: 200px;
        height: 200px;
        background: pink;
      }

本文于2018.11.9重新修改扼菠,如果對(duì)你有些許幫助,歡迎在我的GitHub博客點(diǎn)贊和關(guān)注坝咐,感激不盡循榆!

參考文章

br清浮動(dòng)的原理與clear:both的兼容

清浮動(dòng) | 如何清除浮動(dòng)

CSS-清除浮動(dòng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市墨坚,隨后出現(xiàn)的幾起案子秧饮,更是在濱河造成了極大的恐慌,老刑警劉巖泽篮,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盗尸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡帽撑,警方通過(guò)查閱死者的電腦和手機(jī)泼各,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)亏拉,“玉大人扣蜻,你說(shuō)我怎么就攤上這事〖疤粒” “怎么了莽使?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)笙僚。 經(jīng)常有香客問(wèn)我芳肌,道長(zhǎng),這世上最難降的妖魔是什么味咳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任庇勃,我火速辦了婚禮,結(jié)果婚禮上槽驶,老公的妹妹穿的比我還像新娘责嚷。我一直安慰自己,他們只是感情好掂铐,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布罕拂。 她就那樣靜靜地躺著,像睡著了一般全陨。 火紅的嫁衣襯著肌膚如雪爆班。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天辱姨,我揣著相機(jī)與錄音柿菩,去河邊找鬼。 笑死雨涛,一個(gè)胖子當(dāng)著我的面吹牛枢舶,可吹牛的內(nèi)容都是我干的懦胞。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼凉泄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼躏尉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起后众,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胀糜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蒂誉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體教藻,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年拗盒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怖竭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陡蝇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哮肚,到底是詐尸還是另有隱情登夫,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布允趟,位于F島的核電站恼策,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏潮剪。R本人自食惡果不足惜涣楷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抗碰。 院中可真熱鬧狮斗,春花似錦、人聲如沸弧蝇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)看疗。三九已至沙峻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間两芳,已是汗流浹背摔寨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怖辆,地道東北人是复。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓沉填,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親佑笋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翼闹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,761評(píng)論 1 92
  • 在非IE瀏覽器(如Firefox)下蒋纬,當(dāng)容器的高度為auto猎荠,且容器的內(nèi)容中有浮動(dòng)(float為left或righ...
    Maggie_77閱讀 1,595評(píng)論 1 3
  • relative:生成相對(duì)定位的元素,通過(guò)top,bottom,left,right的位置相對(duì)于其正常位置進(jìn)行定位...
    zx9426閱讀 947評(píng)論 0 2
  • 浮動(dòng)蜀备,從誕生那天起关摇,它就是個(gè)特別的屬性——既為網(wǎng)頁(yè)布局帶來(lái)新的方法,卻又隨之產(chǎn)生一系列的問(wèn)題碾阁。當(dāng)然输虱,隨著時(shí)間的推移...
    郝特么冷閱讀 844評(píng)論 0 6
  • 1.浮動(dòng)元素有什么特征蚕钦?對(duì)父容器亭病、其他浮動(dòng)元素、普通元素嘶居、文字分別有什么影響? 何謂浮動(dòng)元素罪帖?有什么特征?所謂浮動(dòng)...
    草鞋弟閱讀 818評(píng)論 0 1