欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談CSS浮動(dòng)的特性

  發(fā)布時(shí)間:2018-06-05 16:33:34   作者:GISChen   我要評(píng)論
浮動(dòng)的框可以向左或向右移動(dòng),直到它的外邊緣碰到包含框或另一個(gè)浮動(dòng)框的邊框?yàn)橹?。這篇文章主要介紹了淺談CSS浮動(dòng)的特性,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

本文介紹了CSS浮動(dòng)的特性,分享給大家,順便給自己留個(gè)筆記

浮動(dòng)具有以下特性:

  1. 蓋不住的文本
  2. 浮動(dòng)元素后面不是塊級(jí)元素,后面的元素將會(huì)和它并排(除非設(shè)置了元素的寬度,并且屏幕放不下時(shí)將會(huì)換行)
  3. 浮動(dòng)元素的上一個(gè)元素如果沒有浮動(dòng),浮動(dòng)只在當(dāng)前行浮動(dòng);當(dāng)浮動(dòng)遇到浮動(dòng),它們將在一行排序,除非沒有位置了
  4. 當(dāng)元素設(shè)置定位值為absolute、fixed時(shí),浮動(dòng)將被忽略
  5. float引起父元素高度塌陷
  6. 浮動(dòng)元素會(huì)被后一個(gè)元素的margin-top影響

蓋不住的文本

<style>
        body,div{
            margin:0;
            padding:0;
        }
       div{
           width:100px;
           height:100px;
       }
        .item1{
            float:left;
            background-color: pink;
        }
        .item2{
            background-color: #58d3e2;
        }
    </style>
<div class="item1">item1</div>
<div class="item2">item2</div>

可以看到,item2的div除了文本,其他的內(nèi)容都看不見了,因?yàn)樗艿絠tem1下面了。為什么文字不會(huì)被浮動(dòng)的元素蓋住呢?因?yàn)楦?dòng)的本質(zhì)就是用來(lái)實(shí)現(xiàn)文字環(huán)繞的。

從上面也可以得出:浮動(dòng)元素后面的塊級(jí)元素會(huì)占據(jù)浮動(dòng)元素的位置,并且浮動(dòng)元素總是在標(biāo)準(zhǔn)流元素上面。

浮動(dòng)元素后面不是塊級(jí)元素,后面的元素將會(huì)和它并排(除非設(shè)置了元素的寬度,并且屏幕放不下時(shí)將不會(huì)換行)

<style>
        body,div{
            margin:0;
            padding:0;
        }
       div{
           width:100px;
           height:100px;
       }
        .item1{
            float:left;
            background-color: pink;
        }
        .item2{
            display: inline-block;
            background-color: #58d3e2;
        }
    </style>
<div class="item1">item1</div>
<div class="item2">item2</div>

浮動(dòng)元素的上一個(gè)元素如果沒有浮動(dòng),浮動(dòng)只在當(dāng)前行浮動(dòng);當(dāng)浮動(dòng)遇到浮動(dòng),它們將在一行排序,除非沒有位置了

<style>
        body,div{
            margin:0;
            padding:0;
        }
       div{
           width:100px;
           height:100px;
       }
        .item1{
            background-color: pink;
        }
        .item2{
            float:left;
            background-color: #58d3e2;
        }
    </style>
<div class="item1">item1</div>
<div class="item2">item2</div>
<div class="item3">item3</div>

 <style>
        body,div{
            margin:0;
            padding:0;
        }
       div{
           width:400px;
           height:100px;
           float: left;
       }
        .item1{
            background-color: pink;
        }
        .item2{
            background-color: #58d3e2;
        }
        .item3{
            background-color: #61dafb;
        }
        .item4{
            background-color: #e9203d;
        }
    </style>
<div class="item1">item1</div>
<div class="item2">item2</div>
<div class="item3">item3</div>
<div class="item4">item4</div>

可以設(shè)置width為百分比來(lái)實(shí)現(xiàn)自適應(yīng)

 div{
           width:25%;
           height:100px;
           float: left;
       }

當(dāng)元素設(shè)置定位值為absolute、fixed時(shí),浮動(dòng)將被忽略

<style>
        body,div{
            margin:0;
            padding:0;
        }
       div{
           position: absolute;
           float: left;
           width:100px;
           height:100px;
           border: 1px solid red;
       }
    </style>
 <div class="item1">浮動(dòng)遇上定位</div>

行內(nèi)元素使用浮動(dòng)以后生成一個(gè)塊框,因此它就可以使用width,height,margin,padding等屬性了

 <style>
        body,div{
            margin:0;
            padding:0;
        }
       [class^='item']{

           float: left;
           width:100px;
           height:100px;
           line-height: 100px;
           text-align: center;
       }
        .item1{
            float: left;
            background-color: pink;
        }
        .item2{
            display: inline-block;
            background-color: #58d3e2;
        }

    </style>
<span class="item1">item1</span>
<div class="item2">item2</div>

float引起父元素高度塌陷

在網(wǎng)頁(yè)設(shè)計(jì)中,很常見的一種情況是給內(nèi)容一個(gè)div作為包裹容器,而這個(gè)包裹容器不設(shè)置高度,而是讓里面的內(nèi)容撐開包裹容器的高度。如果不給子元素設(shè)置浮動(dòng)的話,并不會(huì)出現(xiàn)什么問(wèn)題,而一旦給子元素設(shè)置了浮動(dòng),父元素會(huì)無(wú)法自適應(yīng)浮動(dòng)元素的高度,會(huì)出現(xiàn)父元素高度為0,從而背景色什么的都不能展示了。原因是:

因?yàn)闆]有預(yù)先設(shè)置div高度,所以div高度由其包含的子元素高度決定。而浮動(dòng)脫離文檔流,所以子元素并不會(huì)被計(jì)算高度。此時(shí)的div中,相當(dāng)于div中子元素高度為0,所以發(fā)生了父元素高度塌陷現(xiàn)象。

   <style>
        body,div{
            margin:0;
            padding:0;
        }

        .item{
            float: left;
            width:100px;
            height:100px;
            background-color: pink;
        }

    </style>
   <div class="box">
       <div class="item"></div>
   </div>

解決辦法,

1.給父元素增加“overflow:hidden"

當(dāng)然也可以是"overflow:auto"。但為了兼容IE最好用overflow:hidden。

.box{
  overflow:hidden;
}

那么為什么“overflow:hidden"會(huì)解決這個(gè)問(wèn)題呢?

是因?yàn)?ldquo;overflow:hidden”會(huì)觸發(fā)BFC,BFC反過(guò)來(lái)決定了"height:auto"是如何計(jì)算的

,即計(jì)算BFC的高度時(shí),浮動(dòng)元素也參與計(jì)算,因此此時(shí)父元素會(huì)自適應(yīng)浮動(dòng)元素的高度。

所以呢,也可以設(shè)置"display:inline-block"、"position:absolute"、"float:left"來(lái)解決父元素高度坍塌的問(wèn)題。因?yàn)榉彩悄軇?chuàng)建一個(gè)BFC,就能達(dá)到包裹浮動(dòng)子元素的效果。因此網(wǎng)上都說(shuō)成“BFC能包裹浮動(dòng)元素”.

2.在父元素內(nèi)容的后面或者前面增加偽元素+清除浮動(dòng)

可以給父元素的內(nèi)容添加一個(gè)偽元素,可以用::before或者::after,然后內(nèi)容為空,這樣就不會(huì)占據(jù)位置,最后為偽元素加上“clear:both"來(lái)清除浮動(dòng)。

 <style>
        body,div{
            margin:0;
            padding:0;
        }
        .box::after{
            content: '';
            display: block;
            clear:both;
        }
        .item{
            float:left;
            width:100px;
            height: 100px;
            background-color: deeppink;
        }

    </style>
<div class="box">
    <div class="item"></div>
</div>

為什么這樣可以呢?

弄清原因需要知道兩點(diǎn):一是偽元素的實(shí)際作用,二是css的清除浮動(dòng)(clear)只能影響使用清除的元素本身,不能影響其他元素,并且清除浮動(dòng)可以理解為打破橫向排列。

首先需要搞清除::after和::before起的作用,它們不是在一個(gè)元素的后面或者前面插入一個(gè)偽元素,而是會(huì)在元素內(nèi)容后面或者前面插入一個(gè)偽元素(是在元素里面),之前我一直以為:before和:after偽元素 插入的內(nèi)容會(huì)被注入到目標(biāo)元素的前或后注入,其實(shí)注入的內(nèi)容將是有關(guān)聯(lián)的目標(biāo)元素的子元素,但它會(huì)被置于這個(gè)元素的任何內(nèi)容的“前”或“后”。我們來(lái)舉個(gè)例子,可以看到.box的高度為300px,說(shuō)明兩個(gè)偽元素已經(jīng)插入到.box內(nèi)容里了。

<style>
        body,div{
            margin:0;
            padding:0;
        }
        .box::before{
            content: 'before';
            height: 100px;
            width: 100px;
            display: block;
            clear:both;
            background-color: #61dafb;
        }
        .box::after{
            content: 'after';
            width:100px;
            height:100px;
            display: block;
            clear:both;
            background-color: aquamarine;
        }
        .item{
            float:left;
            width:100px;
            height: 100px;
            background-color: deeppink;
        }

    </style>
<div class="box">
    <div class="item"></div>
</div>

綜上,所以我們常用下列方式來(lái)清除浮動(dòng)

.box::after{
  content:'';
  display:block;
  clear:both;
}
或者
.box::before{
  content:'';
  display:block;
  clear:both;
}
或者
.box::before,.box::after{
  content:'';
  display:block;
  clear:both;
}
//::before和::after必須配合content屬性來(lái)使用,content用來(lái)定義插入的內(nèi)容,content必須有值,至少是空。默認(rèn)情況下,偽類元素的display是默認(rèn)值inline,可以通過(guò)設(shè)置display:block來(lái)改變其顯示。

在父元素的內(nèi)容前后插入一個(gè)偽元素,content為空可以保證不占據(jù)位置(高度為0)。"clear:both"可以清除父元素左右的浮動(dòng),導(dǎo)致.box::before和.box::after遇到浮動(dòng)元素會(huì)換行,從而會(huì)撐開高度,父元素會(huì)自適應(yīng)這個(gè)高度從而不會(huì)出現(xiàn)高度坍陷。

其他解決高度坍塌的方法都是基于這兩個(gè)思想的,一個(gè)是觸發(fā)BFC,一個(gè)是添加元素+清除浮動(dòng)(clear)。

浮動(dòng)元素會(huì)被后一個(gè)元素的margin-top影響

<style>
        body,div{
            margin:0;
            padding:0;
        }
        div{
            width:100px;
            height:100px;
        }
        div:nth-of-type(1){
            float: left;
            background-color: #61dafb;
        }
        div:nth-of-type(2){
            margin-top: 100px;
            background-color: #58d3e2;
        }

    </style>
<div >div1</div>
<div>div2</div>

可以看到第一個(gè)div也跟著下來(lái)了,解決辦法是給后一個(gè)元素設(shè)置clear,此時(shí)后一個(gè)元素的margin-top將無(wú)效

<style>
        body,div{
            margin:0;
            padding:0;
        }
        div{
            width:100px;
            height:100px;
        }
        div:nth-of-type(1){
            float: left;
            background-color: #61dafb;
        }
        div:nth-of-type(2){
            clear:both;
            margin-top: 100px;
            background-color: #58d3e2;
        }

    </style>
<div >div1</div>
<div>div2</div>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Css實(shí)現(xiàn)清除浮動(dòng)的方法匯總

    這篇文章主要介紹了Css實(shí)現(xiàn)清除浮動(dòng)的方法匯總,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-11
  • 深入理解CSS overflow:hidden——溢出,坍塌,清除浮動(dòng)

    這篇文章主要介紹了深入理解CSS overflow:hidden——溢出,坍塌,清除浮動(dòng)的相關(guān)資料,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-03
  • CSS清除浮動(dòng)方法大全(小結(jié))

    這篇文章主要介紹了CSS清除浮動(dòng)方法大全(小結(jié))的相關(guān)資料,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-19
  • CSS3 清除浮動(dòng)的方法示例

    這篇文章主要介紹了CSS3 清除浮動(dòng)的方法示例的相關(guān)資料,通過(guò)本文,讓大家可以明白清除浮動(dòng)的原理和幾種方法,最后得出一種本文認(rèn)為最好用的方法,感興趣的小伙伴們可以參考
    2018-06-01
  • 深入理解css布局之定位與浮動(dòng)

    這篇文章主要介紹了css布局之定位與浮動(dòng)的相關(guān)資料,需要的朋友可以參考下
    2018-05-21
  • CSS實(shí)現(xiàn)元素浮動(dòng)和清除浮動(dòng)的方法

    這篇文章主要介紹了CSS實(shí)現(xiàn)元素浮動(dòng)和清除浮動(dòng)的方法,簡(jiǎn)單介紹了浮動(dòng)的基本知識(shí),通過(guò)截圖代碼的形式給大家介紹了css清除浮動(dòng)的方法,需要的朋友可以參考下
    2019-12-05

最新評(píng)論