成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

揭開(kāi)外邊距折疊Collapsing margins的面紗

開(kāi)發(fā) 前端
外邊距折疊,是屬于盒模型部分的一個(gè)重要概念。在剛剛開(kāi)始接觸CSS的時(shí)候,對(duì)外邊距折疊的認(rèn)識(shí),只有一句話:垂直方向上相鄰的兩個(gè)外邊距(margin)會(huì)合并成一個(gè),最終的大小,是兩個(gè)中較大的,本文將揭開(kāi)外邊距折疊的面紗。

外邊距折疊,是屬于盒模型部分的一個(gè)重要概念。在剛剛開(kāi)始接觸CSS的時(shí)候,對(duì)外邊距折疊的認(rèn)識(shí),只有一句話:垂直方向上相鄰的兩個(gè)外邊距(margin)會(huì)合并成一個(gè),最終的大小,是兩個(gè)中較大的。

51CTO推薦專(zhuān)題:深入瀏覽器核心 高效CSS的秘訣

什么是外邊距折疊,以及還有其他什么情況下會(huì)發(fā)生,都不清楚。后來(lái),在實(shí)際應(yīng)用中發(fā)現(xiàn),外邊距折疊不是這么簡(jiǎn)單的,其中包含了很多其他情況下的折疊規(guī)則。

一、概念

Collapsing margin,指的是毗鄰的兩個(gè)或多個(gè)外邊距 (margin) 會(huì)合并成一個(gè)外邊距,即外邊距折疊。其中所說(shuō)的 margin 毗鄰,可以歸結(jié)為以下兩點(diǎn):

1. 這兩個(gè)或多個(gè)外邊距沒(méi)有被非空內(nèi)容、padding、border或clear分隔開(kāi)。

2. 這些margin都處于普通流(in-flow,非浮動(dòng)元素,非定位元素)中。

二、margin折疊的規(guī)則

1. 兩個(gè)或多個(gè)毗鄰的普通流中的塊元素垂直方向上的margin會(huì)折疊

A. 兩個(gè)或多個(gè)

說(shuō)明其數(shù)量必須是大于一個(gè),又說(shuō)明,折疊是元素與元素間相互的行為,不存在A和B折疊,B沒(méi)有和A折疊的現(xiàn)象了。

B. 毗鄰

是指沒(méi)有被非空內(nèi)容、padding、border或clear分隔開(kāi),說(shuō)明其位置關(guān)系。注意一點(diǎn),在沒(méi)有被分隔開(kāi)的情況下,一個(gè)元素margin-top會(huì)和它普通流中的***個(gè)子元素(非浮動(dòng)元素等)的margin-top相鄰;只有在一個(gè)元素的height是”auto”的情況下,它的margin-bottom才會(huì)和它普通流中的***一個(gè)子元素(非浮動(dòng)元素等)的margin-bottom相鄰。文章不夠,例子來(lái)湊:

  1. HTML code<div style="border:1px solid red; width:100px;"> 
  2.     <div style="margin:50px 0; background-color:green; height:50px; width:50px;"> 
  3.        <div style="margin:20px 0;"> 
  4.            <div style="margin:100px 0;">B</div> 
  5.        </div> 
  6.     </div> 
  7. </div> 
  8.  

截圖:

截圖

以上測(cè)試用例中,margin會(huì)把B的包含塊撐開(kāi)。

如果一個(gè)元素的height特性的值不是 auto,那么它的margin-bottom和它的子元素的margin-bottom不算是相鄰,因此,不會(huì)發(fā)生折疊。margin-top 沒(méi)有此限制,所以是 100px,margin-bottom 沒(méi)有折疊,所以只有 50px。

C. 垂直方向

是指具體的方位,只有垂直方向的margin才會(huì)折疊,也就是說(shuō),水平方向的margin不會(huì)發(fā)生折疊的現(xiàn)象。

D. 折疊后margin的計(jì)算

參與折疊的margin都是正值。例:

  1. HTML code<div style="height:50px; margin-bottom:50px; width:50px; background-color: red;">A</div> 
  2. <div style="height:50px; margin-top:100px; width:50px; background-color: green;">B</div> 
  3.  

截圖:

示意圖

可見(jiàn),在margin都是正數(shù)的情況下,會(huì)取其中margin較大的值為最終 margin值。

參與折疊的margin中有正值,有負(fù)值。如果,毗鄰的margin中有正值,同時(shí)存在負(fù)值會(huì)怎樣呢?有正有負(fù),先取出負(fù)margin中絕對(duì)值***的,然后,和正marin值***的magin,相加。請(qǐng)看下面的例子:

  1. HTML code<div style="height:50px; margin-bottom:-50px; width:50px; background-color: red;">A</div> 
  2. <div style="height:50px; margin-top:100px; width:50px; background-color: green;">B</div> 
  3.  

截圖:

截圖

上面的例子最終的margin是 100+(-50)=50px。

參與折疊的margin都是負(fù)值。***,如果毗鄰的兩個(gè)margin都是負(fù)值又會(huì)怎樣呢?當(dāng)margin都是負(fù)值的時(shí)候,取的是其中絕對(duì)值較大的,然后,從0位置,負(fù)向位移。看例子:

  1. HTML code<div style="height:100px; margin-bottom:-75px; width:100px; background-color: red;">A</div> 
  2. <div style="height:100px; margin-left:50px; margin-top:-50px; width:100px; background-color: green;">B</div>
  3.  

截圖:

截圖

相鄰的margin要一起參與計(jì)算,不得分步計(jì)算。以上舉的例子都是兄弟節(jié)點(diǎn)在垂直方向的相鄰,要注意,相鄰的元素不一定非要是兄弟節(jié)點(diǎn),父子節(jié)點(diǎn)也可以,即使不是兄弟父子節(jié)點(diǎn)也可以相鄰。舉一個(gè)復(fù)雜點(diǎn)兒的例子,我們要計(jì)算的是A和B之間的margin最終應(yīng)該是多少:

  1. HTML code<div style="margin:50px 0; background-color:green; width:50px;"> 
  2.     <div style="margin:-60px 0;"> 
  3.            <div style="margin:150px 0;">A</div> 
  4.     </div> 
  5. </div> 
  6. <div style="margin:-100px 0; background-color:green; width:50px;"> 
  7.     <div style="margin:-120px 0;"> 
  8.            <div style="margin:200px 0;">B</div> 
  9.     </div> 
  10. </div> 
  11.  

有人可能說(shuō)了,算A和B之間的margin,分別算A和其父元素的折疊,然后與其父元素的父元素的折疊,這個(gè)值算出來(lái)之后,應(yīng)該是90px。依此法算出B的為80px;然后,A和B折疊,margin 為90px。

對(duì)嗎?錯(cuò)了,大錯(cuò)特錯(cuò)。錯(cuò)在哪里了呢?請(qǐng)注意,多個(gè)margin相鄰折疊成一個(gè)margin,所以計(jì)算的時(shí)候,應(yīng)該取所有相關(guān)的值,而不能分開(kāi),分步來(lái)算。以上例子中,A和B之間的margin折疊產(chǎn)生的margin,是6個(gè)相鄰margin折疊的結(jié)果。分別是:

◆正值:50px,150px,200px

◆負(fù)值:-60px,-100px,-120px

根據(jù)有正有負(fù)時(shí)的計(jì)算規(guī)則,正值的***值為 200px,負(fù)值中絕對(duì)值***的是-120px,所以,最終折疊后的margin應(yīng)該是 200 + (-120) = 80px。
可以打開(kāi)瀏覽器來(lái)驗(yàn)證自己的猜想。

2. 浮動(dòng)元素/inline-block的元素/絕對(duì)定位元素的margin不會(huì)和垂直方向上的其他元素的margin折疊

浮動(dòng)元素的margin在垂直方向上也不會(huì)發(fā)生 margin折疊,即使和它相鄰的子元素,也不會(huì)。看例子:

  1. HTML code<div style="margin-bottom:50px; width:50px; height:50px; background-color:green;">A</div> 
  2. <div style="margin-top:50px; width:100px; height:100px; background-color:green; float:left;"> 
  3.     <div style="margin-top:50px; background-color:gold;">B</div> 
  4. </div> 
  5.  

截圖:

截圖

可見(jiàn),兩個(gè)綠色的塊兒之間,相距100px,而若B和它的浮動(dòng)包含塊發(fā)生margin折疊的話,金色的條應(yīng)該位于綠色塊的最上方,顯然,沒(méi)有發(fā)生折疊。
將float:leftt分別換成 “display:inline-block”和”position:absolute”測(cè)試后兩種情況,截圖與上同。

3. 創(chuàng)建了塊級(jí)格式化內(nèi)容的元素,不和它的子元素發(fā)生margin折疊

關(guān)于塊級(jí)格式化內(nèi)容,請(qǐng)參照:http://www.w3.org/TR/CSS2/visuren.html#block-formatting,其中浮動(dòng)元素,絕對(duì)定位元素,以及 overflow值不是’visible’的元素,都符合。以 “overflow:hidden” 的元素為例:

  1. HTML code<div style="margin-top:50px; width:100px; height:100px; background-color:green; overflow:hidden;"> 
  2.     <div style="margin-top:50px; background-color:gold;">B</div> 
  3. </div>
  4.  

截圖:

截圖 

若B和它的 “overflow:hidden” 包含塊發(fā)生margin折疊的話,金色的條應(yīng)該位于綠色塊的最上方,顯然,沒(méi)有發(fā)生折疊。

4. 元素自身的margin-bottom和margin-top相鄰時(shí)也會(huì)折疊

自身margin-bottom和margin-top相鄰,只能是自身內(nèi)容為空,垂直方向上border、padding為0。例:

  1. HTML code<div style="border:1px solid red; width:100px;"> 
  2.     <div style="margin-top:100px;margin-bottom:50px;"></div> 
  3. </div>
  4.  

截圖:

截圖

以上代碼運(yùn)行后,我們得到的是一個(gè)正方形,說(shuō)明,最終的margin是100px,而不是150px,也就是說(shuō)發(fā)生了margin折疊。

【編輯推薦】

  1. 深入瀏覽器核心 高效CSS的秘訣
  2. CSS hack:實(shí)現(xiàn)IE6、IE7、Firefox兼容
  3. CSS控制Table單元格強(qiáng)制換行與強(qiáng)制不換行 
責(zé)任編輯:王曉東 來(lái)源: CSDN跨瀏覽器專(zhuān)區(qū)
相關(guān)推薦

2022-01-16 18:51:57

.NET 6Configurati配置

2019-10-12 10:50:00

JavaScript編程語(yǔ)言代碼

2013-09-22 11:03:20

SocketSocket編程

2015-08-20 13:43:17

NFV網(wǎng)絡(luò)功能虛擬化

2010-05-17 09:13:35

2009-09-08 16:30:18

網(wǎng)銀木馬

2021-06-07 08:18:12

云計(jì)算云端阿里云

2014-03-12 11:11:39

Storage vMo虛擬機(jī)

2010-08-23 15:59:33

MarginCSS

2009-12-03 09:19:41

Linux系統(tǒng)奧秘

2023-06-07 13:43:49

云計(jì)算

2010-05-26 19:12:41

SVN沖突

2009-09-15 15:34:33

Google Fast

2016-04-06 09:27:10

runtime解密學(xué)習(xí)

2023-11-02 09:55:40

2025-01-08 15:44:04

2009-06-01 09:04:44

Google WaveWeb

2018-03-01 09:33:05

軟件定義存儲(chǔ)

2017-10-16 05:56:00

2021-08-11 09:01:48

智能指針Box
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人一区二区三区在线观看 | 欧美在线视频一区二区 | 一区二区三区四区在线视频 | 手机av在线 | 巨大荫蒂视频欧美另类大 | 欧美国产精品一区二区 | 五月天婷婷综合 | 91资源在线| 亚洲福利在线观看 | 亚洲激情自拍偷拍 | 国产精品爱久久久久久久 | 久久精品久久久久久 | 三级免费av| 久久久噜噜噜www成人网 | 亚洲精品免费在线观看 | 男女视频免费 | 国产黄色网 | 午夜久久久久久久久久一区二区 | 精品久久国产 | 亚洲国产精品一区二区三区 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 欧美一区二区三区在线观看 | 久热久热 | 成年人免费在线视频 | 欧美爱爱视频网站 | 欧美日韩精品一区 | 日本高清在线一区 | 亚洲欧美在线观看 | 久久激情视频 | 午夜无码国产理论在线 | 一区二区三区四区视频 | 国产精品视频免费观看 | 亚洲精选一区 | 免费在线观看av的网站 | 久久精品亚洲国产 | 亚洲日韩中文字幕一区 | 理论片午午伦夜理片影院 | 中文字幕一区二区三区四区不卡 | 91精品国产乱码久久久久久久久 | 国产精品夜色一区二区三区 | 狠狠干狠狠操 |