国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > CSS > 正文

css 如何清除浮動的示例代碼

2024-07-11 08:59:38
字體:
來源:轉載
供稿:網友

本文概述

本文的框架圖如下:

一、浮動到底是什么?

W3school中給出的浮動定義為浮動的框可以向左或向右移動,直到它的外邊緣碰到包含框或另一個浮動框的邊框為止。由于浮動框脫離文檔的普通流中,所以文檔的普通流中的塊框表現得就像浮動框不存在一樣。

在非IE瀏覽器(如Firefox)下,當容器的高度為auto,且容器的內容中有浮動(float為left或right)的元素,在這種情況下,容器的高度不能自動伸長以適應內容的高度,使得內容溢出到容器外面而影響(甚至破壞)布局的現象。這個現象叫浮動溢出,為了防止這個現象的出現而進行的CSS處理,就叫CSS清除浮動。
 

二、浮動有什么特點?

浮動的特點,可以用八個字總結:脫標、貼邊、字圍和收縮。

為了更好說明,請看下圖:
當框 1 向左浮動時,它脫離文檔流(脫標)并且向左移動(貼邊),直到它的左邊緣碰到包含框的左邊緣。因為它不再處于文檔流中,所以它不占據空間,實際上覆蓋住了框 2,使框 2 從視圖中消失。如果框2中有文字,就會圍著框1排開(字圍)。

如果把所有三個框都向左浮動,那么框 1 向左浮動直到碰到包含框,另外兩個框向左浮動直到碰到前一個浮動框。

下面著重講解下第四個特點--收縮

一個浮動的內聯元素(比如span img標簽)不需要設置display:block就可以設置寬度。

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

得到以下的效果:

我們都知道div標簽是塊級元素,會獨占一行,然而上面的例子中將div設置為左浮后,其寬度不再是占滿一行,而是收緊為內部元素的寬度,這就是浮動第四個特征的含義。

三、浮動有什么缺點?

先看下面這段代碼:

 <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>

我們想讓父容器包裹著三個浮動元素,然而事與愿違,得到卻是這樣的結果:

這就是浮動帶來副作用----父容器高度塌陷,于是清理浮動就顯著至關重要。

四、如何清理浮動?

清除浮動不是不用浮動,清除浮動產生的父容器高度塌陷。

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

如果一個元素要浮動,那么它的父元素一定要有高度。高度的盒子,才能關住浮動??梢酝ㄟ^直接給父元素設置height,實際應用中我們不大可能給所有的盒子加高度,不僅麻煩,并且不能適應頁面的快速變化;另外一種,父容器的高度可以通過內容撐開(比如img圖片),實際當中此方法用的比較多。

套路2:clear:both;

在最后一個子元素新添加最后一個冗余元素,然后將其設置clear:both,這樣就可以清除浮動。這里強調一點,即在父級元素末尾添加的元素必須是一個塊級元素,否則無法撐起父級元素高度。

    <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:偽元素清除浮動

上面那種辦法固然可以清除浮動,但是我們不想在頁面中添加這些沒有意義的冗余元素,此時如何清除浮動嗎?
結合 :after 偽元素和 IEhack ,可以完美兼容當前主流的各大瀏覽器,這里的 IEhack 指的是觸發 hasLayout。

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

給浮動元素的父容器添加一個clearfix的class,然后給這個class添加一個:after偽元素,實現元素末尾添加一個看不見的塊元素來清理浮動。這是通用的清理浮動方案,推薦使用

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

這種方案讓父容器形成了BFC(塊級格式上下文),而BFC可以包含浮動,通常用來解決浮動父元素高度坍塌的問題。

BFC的觸發方式

我們可以給父元素添加以下屬性來觸發BFC:

  • float 為 left | right
  • overflow 為 hidden | auto | scorll
  • display 為 table-cell | table-caption | inline-block
  • position 為 absolute | fixed

這里可以給父元素設置overflow:auto,但是為了兼容IE最好使用overflow:hidden。

但這種辦法有個缺陷:如果有內容出了盒子,用這種方法就會把多的部分裁切掉,所以這時候不能使用。

BFC的主要特征:

  • BFC容器是一個隔離的容器,和其他元素互不干擾;所以我們可以用觸發兩個元素的BFC來解決垂直邊距折疊問題。
  • BFC不會重疊浮動元素
  • BFC可以包含浮動,這可以清除浮動。套路5:br標簽清浮動

br標簽存在一個屬性:clear。這個屬性就是能夠清除浮動的利器,在br標簽中設置屬性clear,并賦值all。即能清除掉浮動。

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

如果覺得文章對你有些許幫助,歡迎在我的GitHub博客點贊和關注,感激不盡!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青川县| 汉川市| 普安县| 平阳县| 伊宁县| 重庆市| 萨嘎县| 通江县| 昌都县| 蓬溪县| 临江市| 郴州市| 南岸区| 琼海市| 盐池县| 黎平县| 库车县| 会理县| 六安市| 舒城县| 承德市| 天峨县| 安泽县| 黄龙县| 双流县| 宜州市| 大化| 甘洛县| 赞皇县| 漠河县| 五华县| 英吉沙县| 从化市| 女性| 贡嘎县| 吉安县| 岚皋县| 花莲市| 高阳县| 方正县| 樟树市|