中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

好程序員web前端學習路線分享CSS浮動-清除浮動篇

發布時間:2020-08-07 18:16:05 來源:ITPUB博客 閱讀:168 作者:好程序員IT 欄目:web開發

好程序員web前端學習路線分享CSS浮動-清除浮動篇,為什么要清除浮動

  這里所說的清除浮動,并不是不要浮動了,而是清除浮動與浮動之間的影響。那么到底會有什么影響呢?

1. 高度塌陷

  舉個例子我們看一下。

   好程序員web前端學習路線分享CSS浮動-清除浮動篇

  我們在這里設置了div0 是外容器, div1 是內部容器, div1 因為設置了寬高是 100 ,所以顯示的時候就是一個橙色的 100*100 的方塊,但是 div0 僅設置了背景色,因為 div 特有的獨占一行,寬度會自動 100% ,高度被內部容器 div1 撐開了,撐開的高度是 100 像素,所有看到一個綠色高 100 像素,寬度 100% 的容器

  現在我們給div1 設置浮動

   好程序員web前端學習路線分享CSS浮動-清除浮動篇

  這時候我們發現div0 這個外容器沒了,看不見了。。別急,我們在 div0 里打一些字看看

   好程序員web前端學習路線分享CSS浮動-清除浮動篇

  我們發現aaa 這些文字出來了,環繞在橙色方塊周圍了,這個原因在浮動中我們已經講解了,而且我們也發現綠色的容器也出來了,但是它的高度僅僅是文字的行高。這就說明,內部的橙色塊設置浮動后,它的父級容器綠色塊就不知道橙色容器的高度了,因此綠色容器的高度變成了 0 ,寫入文字后,綠色容器重新被撐開高度才可以看到。我們把這種情況稱為 高度塌陷

  我們其實是希望一個容器中的內容不斷的撐開容器的高度,這樣我們后續的內容就可以緊貼在上面了,而網頁中的內容并不是都是靜態的,很多都需要每天更新,更新的內容多少,圖片高度,都不相同。那么后面的東西想要緊貼上面的內容,上面內容的高度就不能設置一個固定數值,否則很多數據的時候放不下。如果不設置高度,一旦設置浮動后,就會出現高度塌陷。丟失了高度后,頁面后續的內容就會插在上面內容的底部,頁面就會錯亂,因此我們就需要做清除浮動來解決這個問題,最終做到即使使用浮動,外容器也會因為內容的多少自動撐開高度,不會高度塌陷。

margin padding設置值不能正確顯示

2. Margin padding 屬性值不正確

   由于浮動導致父級子級之間設置了css padding css margin 屬性的值不能正確表達。特別是上下邊的 padding margin 不能正確顯示。

  要來解決這個問題,我們就必須來認識一下BFC

什么是BFC

  要來理解BFC ,先介紹一下 Box Formatting Context

Box  是  CSS  布局的對象和基本單位,  簡單來說頁面就是由Box 組成, 元素的類型和 display  屬性,決定了這個  Box  的類型。 不同類型的  Box , 會參與不同的  Formatting Context (一個決定如何渲染文檔的容器),因此 Box 內的元素會以不同的方式渲染。

1 block-level box:display  屬性為  block, list-item, table  的元素,會生成  block-level box 。并且參與  block formatting context

2 inline-level box:display  屬性為  inline, inline-block, inline-table  的元素,會生成  inline-level box 。并且參與  inline formatting context

3 run-in box: css3  中才有, 這兒先不講了。

  Formatting context  是  W3C CSS2.1  規范中的一個概念。它是頁面中的一塊渲染區域,并且有一套渲染規則,它決定了其子元素將如何定位,以及和其他元素的關系和相互作用。最常見的  Formatting context  有  Block fomatting context ( 簡稱 BFC) 和  Inline formatting context ( 簡稱 IFC)

  BFC(Block formatting context) 直譯為 " 塊級格式化上下文 " 。它是一個獨立的渲染區域,只有 Block-level box 參與, 它規定了內部的 Block-level Box 如何布局,并且與這個區域外部毫不相干。

BFC 布局規則:

(1) 內部的Box 會在垂直方向,一個接一個地放置。

(2)Box 垂直方向的距離由 margin 決定。屬于同一個 BFC 的兩個相鄰 Box margin 會發生重疊

(3) 每個元素的margin box 的左邊, 與包含塊 border box 的左邊相接觸 ( 對于從左往右的格式化,否則相反 ) 。即使存在浮動也是如此。

(4)BFC 的區域不會與 float box 重疊。

(5)BFC 就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素。反之也如此。

(6) 計算BFC 的高度時,浮動元素也參與計算

瞧,最后一條就是我們需要利用的了,我們只需要利用BFC 就可以解決浮動后外容器高度塌陷的問題

如何生成BFC

  1. 根元素 BFC 模式

  這種不能考慮,因為都不是根元素

  1. 設置高度

  顯然也是不可以的。

  1. float 屬性不為 none

  本來就要設置浮動的。所以也不考慮

  1. position absolute fixed

  這樣設置后,就失去浮動的意義了。因此也不使用

  1. display inline-block, table-cell, table-caption, flex, inline-flex

  雖然可以開啟,但是導致父元素原有寬度丟失

  1. overflow 不為 visible

這種方法副作用比較小,但是還是有問題的。比如overflow 設置為 hidden ,這個不行,內容的高度是撐開的寬度也不能確定。設置為 scroll ,會出現右邊和下邊的滾動條寬度

設置為auto 最合適,不過,如果里面的內容使用了定位,并且超出去就會出現滾動條。所以只能保證內容不能有定位。

Clear:both

  清除:兩者間,顧名思義就是清除浮動

   好程序員web前端學習路線分享CSS浮動-清除浮動篇

  我們看到如果要使用clear:both ,就需要給高度塌陷的容器里面最后追加一個 div ,并且給這個 div 設置為 clear both ,我們發現這種使用方法比較麻煩,每次設置都需要最后增加 div

  因此我們做了一個修改

  

<!DOCTYPE  html>
< html  lang= "en">
< head>
    < meta  charset= "UTF-8">
    < title>Title</ title>
    < style>
         #div0
        {


             background-colorgreenyellow;
        }
         #div1
        {

             width: 100 px;
             height: 100 px;
             background-colororange;
             floatleft;
        }
         /* 在外容器的里面最后添加內容 */
        . clearFloat: after
        {

             content""; /* 添加一個空字符串 */
             displayblock; /* 設置這個空字符串是一個塊,這樣會獨占一行 */
             height: 0; /* 設置這個添加的空字符串的高度是 0*/
             visibilityhidden; /* 不讓這個空字符串顯示 */
             clearboth; /* 清除浮動 */
        }

        . clearFloat
        {

             zoom: 1; /*IE6 以下的瀏覽器也可以利用這種方式清除浮動 */
        }

    </ style>
</ head>
< body>
    < div  id= "div0"  class= "clearFloat">
        < div  id= "div1"></ div>
    </ div>
</ body>
</ html>

  

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

左贡县| 皮山县| 永寿县| 保亭| 马龙县| 玉门市| 凤冈县| 简阳市| 新沂市| 墨江| 涡阳县| 白沙| 大石桥市| 柳州市| 凌海市| 堆龙德庆县| 乐平市| 怀安县| 辽阳市| 瑞安市| 梁山县| 绵阳市| 天柱县| 格尔木市| 翼城县| 通榆县| 昌都县| 比如县| 临泽县| 当阳市| 乐安县| 涿州市| 宁陕县| 定南县| 新竹市| 邛崃市| 余江县| 当雄县| 昌邑市| 塘沽区| 宾阳县|