摘要:原因是因?yàn)闆]有預(yù)先設(shè)置高度,所以高度由其包含的子元素高度決定。而浮動(dòng)脫離文檔流,所以子元素并不會(huì)被計(jì)算高度。此時(shí)的中,相當(dāng)于中子元素高度為,所以發(fā)生了父元素高度塌陷現(xiàn)象。因?yàn)榉彩悄軇?chuàng)建一個(gè),就能達(dá)到包裹浮動(dòng)子元素的效果。
浮動(dòng)具有以下特性:
蓋不住的文本
浮動(dòng)元素后面不是塊級(jí)元素,后面的元素將會(huì)和它并排(除非設(shè)置了元素的寬度,并且屏幕放不下時(shí)將會(huì)換行)
浮動(dòng)元素的上一個(gè)元素如果沒有浮動(dòng),浮動(dòng)只在當(dāng)前行浮動(dòng);當(dāng)浮動(dòng)遇到浮動(dòng),它們將在一行排序,除非沒有位置了
當(dāng)元素設(shè)置定位值為absolute、fixed時(shí),浮動(dòng)將被忽略
float引起父元素高度塌陷
浮動(dòng)元素會(huì)被后一個(gè)元素的margin-top影響
蓋不住的文本item1item2
可以看到,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ì)換行)浮動(dòng)元素的上一個(gè)元素如果沒有浮動(dòng),浮動(dòng)只在當(dāng)前行浮動(dòng);當(dāng)浮動(dòng)遇到浮動(dòng),它們將在一行排序,除非沒有位置了item1item2
item1item2item3
item1item2item3item4
可以設(shè)置width為百分比來實(shí)現(xiàn)自適應(yīng)
div{ width:25%; height:100px; float: left; }當(dāng)元素設(shè)置定位值為absolute、fixed時(shí),浮動(dòng)將被忽略
行內(nèi)元素使用浮動(dòng)以后生成一個(gè)塊框,因此它就可以使用width,height,margin,padding等屬性了浮動(dòng)遇上定位
item1float引起父元素高度塌陷item2
在網(wǎng)頁(yè)設(shè)計(jì)中,很常見的一種情況是給內(nèi)容一個(gè)div作為包裹容器,而這個(gè)包裹容器不設(shè)置高度,而是讓里面的內(nèi)容撐開包裹容器的高度。如果不給子元素設(shè)置浮動(dòng)的話,并不會(huì)出現(xià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)象。
解決辦法,
1.給父元素增加“overflow:hidden"
當(dāng)然也可以是"overflow:auto"。但為了兼容IE最好用overflow:hidden。
.box{ overflow:hidden; }
那么為什么“overflow:hidden"會(huì)解決這個(gè)問題呢?
是因?yàn)椤皁verflow: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)。
為什么這樣可以呢?
弄清原因需要知道兩點(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)容里了。
綜上,所以我們常用下列方式來清除浮動(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影響div1div2
可以看到第一個(gè)div也跟著下來了,解決辦法是給后一個(gè)元素設(shè)置clear,此時(shí)后一個(gè)元素的margin-top將無(wú)效
div1div2
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/113398.html
摘要:它是頁(yè)面中的一塊渲染區(qū)域,并且有一套渲染規(guī)則,它決定了其子元素將如何定位,以及和其他元素的關(guān)系和相互作用。而,塊級(jí)格式化上下文,就是一個(gè)塊級(jí)元素的渲染顯示規(guī)則。定位和清除浮動(dòng)的樣式規(guī)則只適用于處于同一塊格式化上下文內(nèi)的元素。 什么是BFC(Block Formatting Context) Formatting context(格式化上下文) 是 W3C CSS2.1 規(guī)范中的一個(gè)概念...
摘要:它是頁(yè)面中的一塊渲染區(qū)域,并且有一套渲染規(guī)則,它決定了其子元素將如何定位,以及和其他元素的關(guān)系和相互作用。而,塊級(jí)格式化上下文,就是一個(gè)塊級(jí)元素的渲染顯示規(guī)則。定位和清除浮動(dòng)的樣式規(guī)則只適用于處于同一塊格式化上下文內(nèi)的元素。 什么是BFC(Block Formatting Context) Formatting context(格式化上下文) 是 W3C CSS2.1 規(guī)范中的一個(gè)概念...
摘要:在正常情況下,頁(yè)面總是從左到右,從上到下布局,這種被稱為正常的流。破壞文檔流這是最本質(zhì)的特性,因此設(shè)計(jì)的初衷就是破壞文檔流。但是也有一種情況是,浮動(dòng)元素前后并沒有內(nèi)聯(lián)元素,因此也就不存在行框盒子,這時(shí)候就是浮動(dòng)錨點(diǎn)在起作用。 前幾天有小伙伴說對(duì)float的學(xué)習(xí)云里霧里的,下面我就給大家說一下關(guān)于float的一些問題。 在css中,是存在流的概念的。在正常情況下,頁(yè)面總是從左到右,從上到...
摘要:破壞文檔流這是最本質(zhì)的特性,因此設(shè)計(jì)的初衷就是破壞文檔流。但是也有一種情況是,浮動(dòng)元素前后并沒有內(nèi)聯(lián)元素,因此也就不存在行框盒子,這時(shí)候就是浮動(dòng)錨點(diǎn)在起作用。 前言 在css中,是存在流的概念的。在正常情況下,頁(yè)面總是從左到右,從上到下布局,這種被稱為正常的流。但是有很多情況,正常流是沒辦法實(shí)現(xiàn)的,因此我們需要一些手段來破壞流,從而實(shí)現(xiàn)一些特殊的布局,而本節(jié)的主角float就具備破壞流...
摘要:前言本文將帶你重新認(rèn)識(shí)布局,帶你解剖布局原理,前提是你要有基礎(chǔ)本文將解除你在布局方面的疑惑。以下將對(duì)布局元素和文檔流進(jìn)行詳細(xì)講解。而且還能保持文檔流,這是其他元素做不到的。 前言 本文將帶你重新認(rèn)識(shí)CSS布局,帶你解剖布局原理,前提是你要有基礎(chǔ)!本文將解除你在布局方面的疑惑。認(rèn)識(shí)每個(gè)布局元素,了解他們的特性,你才知道為什么會(huì)是這樣的結(jié)果。本文內(nèi)容純屬個(gè)人理解,不代表官方。 此文主要為理...
閱讀 2636·2021-11-18 10:07
閱讀 1089·2021-08-03 14:04
閱讀 731·2019-08-30 13:08
閱讀 2586·2019-08-29 15:33
閱讀 1099·2019-08-29 14:07
閱讀 2997·2019-08-29 14:04
閱讀 1447·2019-08-29 11:19
閱讀 1152·2019-08-29 10:59