BFC | 浮動(dòng) | 折疊

BiliPala....

浮動(dòng)元素的特征描睦,對(duì)父容器、對(duì)其他浮動(dòng)元素导而、普通元素忱叭、文字的影響。

  • 浮動(dòng)會(huì)使應(yīng)用的元素脫離文檔流今艺。按指定的位置來(lái)移動(dòng)位置韵丑。當(dāng)遇到其父元素或者相鄰的元素時(shí)即停下。此樣式可用于 塊級(jí)元素 或 行內(nèi)元素洼滚。
  • 使用float浮動(dòng)樣式的行內(nèi)元素埂息,會(huì)跟使用inline-block樣式一樣可以設(shè)置寬高.
float 樣式版已經(jīng)脫離文檔流,能看到黃色父元素背景是因?yàn)樘砑恿薿verflow..
  • 默認(rèn)撐開文本內(nèi)容的高度遥巴。(沒(méi)內(nèi)容的話就顯示空白..不過(guò)只設(shè)置寬高背景色可以看到輪廓的千康。)

  • 脫離了文檔流,那就意味著父元素?zé)o法感知到有該元素铲掐,那么即顯示沒(méi)有內(nèi)容時(shí)的默認(rèn)寬高(除非設(shè)置固定寬高 | 樣式)拾弃。


    float 會(huì)把元素?cái)D到最前...
  • 浮動(dòng)后,會(huì)置頂摆霉,文字會(huì)環(huán)繞...

看圖...

清除浮動(dòng) & 清除浮動(dòng):

  • 清除浮動(dòng)不是不要浮動(dòng)豪椿,而是清除浮動(dòng)帶來(lái)的不利影響。另外携栋,結(jié)合clear屬性也可讓父元素在視覺(jué)上包圍浮動(dòng)元素搭盾。

  • 至于清除浮動(dòng):

  • 在父元素的子元素最后添加一個(gè)空div,并對(duì)其設(shè)置樣式:clear:both;
    由于在子元素最后添加了空div婉支,并清除了浮動(dòng)鸯隅,因此父容器被撐開,實(shí)現(xiàn)了在視覺(jué)上包圍浮動(dòng)元素的效果向挖。(略顯浪費(fèi)..)

  • 利用BFC(后有介紹)來(lái)清除浮動(dòng):
    因?yàn)锽FC可以包含浮動(dòng)蝌以,因此可以讓父元素生成一個(gè)新的BFC從而包圍浮動(dòng)的子元素。
    可以對(duì)父元素設(shè)定以下樣式之一生成新BFC何之。

`float: left | right;`
`overflow: hidden | auto | scroll;`
`display: table-cell | table-caption | inline-block;`
`position: absolute | fixed;`
  • 結(jié)合CSS特性的通用清除浮動(dòng)方案跟畅,其本質(zhì)還是第1種方法(通用)。
.clearfix {
      *zoom: 1;
   } 
                                     <!-- 隔行是總美 -->
.clearfix:after {
      content: "";
      display: block;
      clear: both;
}

幾種定位方式溶推,如何實(shí)現(xiàn)定位徊件,參考點(diǎn)奸攻,使用場(chǎng)景:

  • inherit:從父元素繼承;
  • static:默認(rèn)值庇忌,沒(méi)有定位舞箍,元素出現(xiàn)在正常的文檔流中舰褪。參考點(diǎn)是文檔流中的位置皆疹。
  • relative:相對(duì)定位。相對(duì)于元素本來(lái)的位置進(jìn)行定位占拍,通過(guò)top略就、bottom、left晃酒、right屬性來(lái)設(shè)置偏移量表牢。使用場(chǎng)景:為絕對(duì)定位設(shè)定參照物或?qū)υ刈陨砦恢眠M(jìn)行局部調(diào)整。
  • absolute:絕對(duì)定位的元素的位置是相對(duì)于距離最近的非static祖先元素位置決定的贝次。如果元素沒(méi)有已定位的祖先元素崔兴,那么他的位置就相對(duì)于初始包含塊html來(lái)定位。使用場(chǎng)景:當(dāng)想讓元素參照特定參照物進(jìn)行定位時(shí)使用蛔翅。
  • fixed:固定定位敲茄。生成絕對(duì)定位元素,相對(duì)于屏幕窗口(viewport)進(jìn)行定位山析。
  • sticky:對(duì)象在常態(tài)時(shí)遵循普通流堰燎。它就像是relative和fixed的合體,當(dāng)在屏幕中時(shí)按常規(guī)流排版笋轨,當(dāng)卷動(dòng)到屏幕外時(shí)則表現(xiàn)如fixed秆剪。(CSS3 產(chǎn)物。兼容性現(xiàn)在好多了...)
Sticky兼容性

z-index 作用 & 使用.

因?yàn)榻^對(duì)定位的元素脫離了普通流爵政,所以絕對(duì)定位的元素可以覆蓋頁(yè)面上的其它元素仅讽。這時(shí)可以通過(guò)給元素設(shè)置z-index屬性來(lái)控制疊放順序,該屬性值越高钾挟,元素位置越靠上洁灵。

實(shí)操最要緊

position:relative 和 負(fù)margin 可以使元素位置發(fā)生偏移,區(qū)別:

  • position:relative; 只相對(duì)自己原本位置發(fā)生偏移等龙,不影響其它普通流中元素的位置处渣。
  • margin 除了讓元素自身發(fā)生偏移還影響其它普通流中的元素。
margin后面的元素也會(huì)跟進(jìn)...

BFC (Block formatting contexts)

  • w3c規(guī)范中的BFC定義
    浮動(dòng)元素和絕對(duì)定位元素蛛砰,非塊級(jí)盒子的塊級(jí)容器(例如 inline-blocks, table-cells, 和 table-captions)罐栈,以及overflow值不為“visiable”的塊級(jí)盒子,都會(huì)為他們的內(nèi)容創(chuàng)建新的BFC(塊級(jí)格式上下文)泥畅。
    在BFC中荠诬,盒子從頂端開始垂直地一個(gè)接一個(gè)地排列,兩個(gè)盒子之間的垂直的間隙是由他們的margin 值所決定的。在一個(gè)BFC中柑贞,兩個(gè)相鄰的塊級(jí)盒子的垂直外邊距會(huì)產(chǎn)生折疊方椎。
    在BFC中,每一個(gè)盒子的左外邊緣(margin-left)會(huì)觸碰到容器的左邊緣(border-left)(對(duì)于從右到左的格式來(lái)說(shuō)钧嘶,則觸碰到右邊緣)棠众。

  • BFC的通俗理解:
    首先BFC是一個(gè)名詞,是一個(gè)獨(dú)立的布局環(huán)境有决,我們可以理解為一個(gè)箱子(實(shí)際上是看不見摸不著的)闸拿,箱子里面物品的擺放是不受外界的影響的。轉(zhuǎn)換為BFC的理解則是:BFC中的元素的布局是不受外界的影響(我們往往利用這個(gè)特性來(lái)消除浮動(dòng)元素對(duì)其非浮動(dòng)的兄弟元素和其子元素帶來(lái)的影響书幕。)并且在一個(gè)BFC中新荤,塊盒與行盒(行盒由一行中所有的內(nèi)聯(lián)元素所組成)都會(huì)垂直的沿著其父元素的邊框排列。

添加創(chuàng)建:
  • 浮動(dòng)台汇,絕對(duì)定位元素苛骨,inline-blocks, table-cells, table-captions,和overflow的值不為visible的元素,(除了這個(gè)值已經(jīng)被傳到了視口的時(shí)候)將創(chuàng)建一個(gè)新的塊級(jí)格式化上下文

  • 上面的引述幾乎總結(jié)了一個(gè)BFC是怎樣形成的苟呐。但是讓我們以另一種方式來(lái)重新定義以便能更好的去理解痒芝。一個(gè)BFC是一個(gè)HTML盒子并且至少滿足下列條件中的任何一個(gè):

  • float的值不為none.

  • position的值不為static或者relative.

  • display的值為 table-cell, table-caption,inline-block, 或者 inline-flex中的其中一個(gè).

  • overflow的值不為visible.

  • 一個(gè)BFC可以被顯式的觸發(fā)。如果想要?jiǎng)?chuàng)建一個(gè)新的BFC掠抬,只需要給它添加上面提到的任何一個(gè)CSS樣式就可以了吼野。

  • 一個(gè)新的BFC可以通過(guò)給容器添加任何一個(gè)觸發(fā)BFC的CSS樣式,如overflow: scroll, overflow: hidden, display: flex, float: left,或者 display: table來(lái)創(chuàng)建两波。

  • display:table可能會(huì)產(chǎn)生一些問(wèn)題

  • overflow:scroll可能會(huì)顯示不必要的滾動(dòng)條

  • float:left將會(huì)把元素置于容器的左邊瞳步,其他元素環(huán)繞著它

  • overflow:hidden將會(huì)剪切掉溢出的元素

  • 所以每當(dāng)想要?jiǎng)?chuàng)建一個(gè)新的BFC的時(shí)候,我們會(huì)基于我們的需求選擇最好的樣式條件腰奋。

運(yùn)用場(chǎng)景:
  • 假設(shè)单起,一個(gè) div容器 它設(shè)置了浮動(dòng)...那么此時(shí)它的父元素是不會(huì)有任何高度的,它將不會(huì)去包含已經(jīng)浮動(dòng)的子元素劣坊,那么此時(shí)可以通過(guò)給其添加一個(gè) overflow:hidden嘀倒,在容器中創(chuàng)建一個(gè)新的BFC。那么這個(gè)將包含浮動(dòng)的子元素局冰,它的高度可擴(kuò)展到可以包含它的子元素测蘑,這些元素會(huì)回到頁(yè)面的常規(guī)文檔流。

  • 有時(shí)候一個(gè)浮動(dòng)div周圍的文字環(huán)繞著它(如下圖中的左圖所示)但是在某些案例中這并不是可取的康二,我們想要的是外觀跟下圖中的右圖一樣的碳胳。為了解決這個(gè)問(wèn)題,我們可能使用外邊距沫勿,但是我們也可以使用一個(gè)BFC來(lái)解決挨约。

image.png
  • 還可以在多列布局中使用BFC
    如果我們正在創(chuàng)建的一個(gè)多列布局占滿了整個(gè)容器的寬度味混,在某些瀏覽器中最后一列有時(shí)候?qū)?huì)被擠到下一行。會(huì)發(fā)生這樣可能是因?yàn)闉g覽器舍入(取整)了列的寬度使得總和的寬度超過(guò)了容器的寬度诫惭。然而翁锡,如果我們?cè)谝粋€(gè)列的布局中建立了一個(gè)新的BFC,它將會(huì)在前一列填充完之后的后面占據(jù)所剩余的空間夕土。

在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并(折疊)馆衔?如何合并?如何不讓相鄰元素外邊距合并隘弊?給個(gè)父子外邊距合并的范例

  • 合并外邊距與BFC
    在CSS當(dāng)中哈踱,相鄰的兩個(gè)盒子(可能是兄弟關(guān)系也可能是祖先關(guān)系)的外邊距可以結(jié)合成一個(gè)單獨(dú)的外邊距。這種合并外邊距的方式被稱為折疊梨熙,并且因而所結(jié)合成的外邊距稱為折疊外邊距。

  • 折疊的結(jié)果:
    兩個(gè)相鄰的外邊距都是正數(shù)時(shí)刀诬,折疊結(jié)果是它們兩者之間較大的值咽扇。
    兩個(gè)相鄰的外邊距都是負(fù)數(shù)時(shí),折疊結(jié)果是兩者絕對(duì)值的較大值陕壹。
    兩個(gè)外邊距一正一負(fù)時(shí)质欲,折疊結(jié)果是兩者的相加的和。

  • 產(chǎn)生折疊的必備條件:margin必須是鄰接的!
    而根據(jù)w3c規(guī)范糠馆,兩個(gè)margin是鄰接的必須滿足以下條件:

  • 必須是處于常規(guī)文檔流(非float和絕對(duì)定位)的塊級(jí)盒子,并且處于同一個(gè)BFC當(dāng)中嘶伟。

  • 沒(méi)有線盒,沒(méi)有空隙(clearance)又碌,沒(méi)有padding和border將他們分隔開

  • 都屬于垂直方向上相鄰的外邊距九昧,可以是下面任意一種情況元素的margin-top與其第一個(gè)常規(guī)文檔流的子元素的margin-top

  • 元素的margin-bottom與其下一個(gè)常規(guī)文檔流的兄弟元素的margin-top

  • height為auto的元素的margin-bottom與其最后一個(gè)常規(guī)文檔流的子元素的margin-bottom

  • 高度為0并且最小高度也為0,不包含常規(guī)文檔流的子元素毕匀,并且自身沒(méi)有建立新的BFC的元素的margin-top和margin-bottom

  • 以上的條件意味著下列的規(guī)則:
  • 創(chuàng)建了新的BFC的元素(例如浮動(dòng)元素或者'overflow'值為'visible'以外的元素)與它的子元素的外邊距不會(huì)折疊
  • 浮動(dòng)元素不與任何元素的外邊距產(chǎn)生折疊(包括其父元素和子元素)
  • 絕對(duì)定位元素不與任何元素的外邊距產(chǎn)生折疊
  • inline-block元素不與任何元素的外邊距產(chǎn)生折疊
  • 一個(gè)常規(guī)文檔流元素的margin-bottom與它下一個(gè)常規(guī)文檔流的兄弟元素的margin-top會(huì)產(chǎn)生折疊铸鹰,除非它們之間存在間隙(clearance)。
  • 一個(gè)常規(guī)文檔流元素的margin-top 與其第一個(gè)常規(guī)文檔流的子元素的margin-top產(chǎn)生折疊皂岔,條件為父元素不包含 padding 和 border 蹋笼,子元素不包含 clearance。
  • 一個(gè) 'height' 為 'auto' 并且 'min-height' 為 '0'的常規(guī)文檔流元素的 margin-bottom 會(huì)與其最后一個(gè)常規(guī)文檔流子元素的 margin-bottom 折疊躁垛,條件為父元素不包含 padding 和 border 剖毯,子元素的 margin-bottom 不與包含 clearance 的 margin-top 折疊。
  • 一個(gè)不包含border-top教馆、border-bottom逊谋、padding-top、padding-bottom的常規(guī)文檔流元素活玲,并且其 'height' 為 0 或 'auto'涣狗, 'min-height' 為 '0'谍婉,其里面也不包含行盒(line box),其自身的 margin-top 和 margin-bottom 會(huì)折疊镀钓。
  • 浮動(dòng)和絕對(duì)定位不與任何元素產(chǎn)生 margin 折疊

  • inline-block元素與其兄弟元素穗熬、子元素和父元素的外邊距都不會(huì)折疊(包括其父元素和子元素)


參考傳送門: ??
**參考傳送門: **??


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丁溅,隨后出現(xiàn)的幾起案子唤蔗,更是在濱河造成了極大的恐慌,老刑警劉巖窟赏,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妓柜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡涯穷,警方通過(guò)查閱死者的電腦和手機(jī)棍掐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拷况,“玉大人作煌,你說(shuō)我怎么就攤上這事∽荩” “怎么了粟誓?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)起意。 經(jīng)常有香客問(wèn)我鹰服,道長(zhǎng),這世上最難降的妖魔是什么揽咕? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任悲酷,我火速辦了婚禮,結(jié)果婚禮上心褐,老公的妹妹穿的比我還像新娘舔涎。我一直安慰自己,他們只是感情好逗爹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布峦嗤。 她就那樣靜靜地躺著胎挎,像睡著了一般涮母。 火紅的嫁衣襯著肌膚如雪鹏漆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天袍睡,我揣著相機(jī)與錄音知染,去河邊找鬼。 笑死斑胜,一個(gè)胖子當(dāng)著我的面吹牛控淡,可吹牛的內(nèi)容都是我干的嫌吠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼掺炭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辫诅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起涧狮,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤炕矮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后者冤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肤视,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年涉枫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邢滑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拜银,死狀恐怖殊鞭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尼桶,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布锯仪,位于F島的核電站泵督,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏庶喜。R本人自食惡果不足惜小腊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望久窟。 院中可真熱鬧秩冈,春花似錦、人聲如沸斥扛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)稀颁。三九已至芬失,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匾灶,已是汗流浹背棱烂。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阶女,地道東北人颊糜。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓哩治,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親衬鱼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子业筏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,728評(píng)論 1 92
  • 一馁启,浮動(dòng)元素有什么特征驾孔?對(duì)父容器、其他浮動(dòng)元素惯疙、普通元素翠勉、文字分別有什么影響? 浮動(dòng)模型是一種可視化格式模型,浮動(dòng)...
    DeeJay_Y閱讀 856評(píng)論 0 4
  • 1.浮動(dòng)元素有什么特征朽们?對(duì)父容器、其他浮動(dòng)元素诉位、普通元素骑脱、文字分別有什么影響? 何謂浮動(dòng)元素?有什么特征苍糠?所謂浮動(dòng)...
    草鞋弟閱讀 808評(píng)論 0 1
  • relative:生成相對(duì)定位的元素叁丧,通過(guò)top,bottom,left,right的位置相對(duì)于其正常位置進(jìn)行定位...
    zx9426閱讀 930評(píng)論 0 2
  • 建議在PC端閱讀本文面向?qū)ο螅簩?duì)標(biāo)題中的概念基本不了解或僅僅聽說(shuō)過(guò)名字的人拥娄。如果已有一定了解請(qǐng)直接拉到最下看推薦閱...
    粉腸w閱讀 577評(píng)論 0 0