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

首頁(yè) > 開發(fā) > CSS > 正文

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

2024-07-11 08:59:13
字體:
供稿:網(wǎng)友

本文介紹了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ì)就是用來實(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為百分比來實(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)什么問題,而一旦給子元素設(shè)置了浮動(dòng),父元素會(huì)無法自適應(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è)問題呢?

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

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

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

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

可以給父元素的內(nèi)容添加一個(gè)偽元素,可以用::before或者::after,然后內(nèi)容為空,這樣就不會(huì)占據(jù)位置,最后為偽元素加上“clear:both"來清除浮動(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)容的“前”或“后”。我們來舉個(gè)例子,可以看到.box的高度為300px,說明兩個(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>

綜上,所以我們常用下列方式來清除浮動(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屬性來使用,content用來定義插入的內(nèi)容,content必須有值,至少是空。默認(rèn)情況下,偽類元素的display是默認(rèn)值inline,可以通過設(shè)置display:block來改變其顯示。

在父元素的內(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也跟著下來了,解決辦法是給后一個(gè)元素設(shè)置clear,此時(shí)后一個(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){            clear:both;            margin-top: 100px;            background-color: #58d3e2;        }    </style><div >div1</div><div>div2</div>

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 抚宁县| 民县| 长宁县| 崇信县| 龙南县| 清原| 甘谷县| 新宾| 博客| 锡林浩特市| 辽源市| 宿松县| 武安市| 罗源县| 巩留县| 沛县| 团风县| 临夏县| 镇江市| 宁远县| 泽普县| 土默特右旗| 隆德县| 苏尼特左旗| 吉林市| 霍山县| 乾安县| 玉林市| 井研县| 灵武市| 泾阳县| 鄂伦春自治旗| 岑巩县| 三原县| 铁力市| 喀喇沁旗| 贺兰县| 三江| 扬州市| 图们市| 上蔡县|