摘要:這個(gè)例子就是外邊距折疊塊級(jí)元素的上外邊距和下外邊距有時(shí)會(huì)合并或折疊為一個(gè)外邊距。
外邊距折疊指的是毗鄰的兩個(gè)或多個(gè)外邊距 (margin) 會(huì)合并成一個(gè)外邊距,本文詳細(xì)的介紹了一下css外邊距折疊的實(shí)現(xiàn),分為3種情況,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
前文
這是的一個(gè)經(jīng)典的老問(wèn)題,因?yàn)橹皠偤糜凶x者朋友問(wèn)到,順便整理一下。
從一個(gè)簡(jiǎn)單例子說(shuō)起
先看一個(gè)簡(jiǎn)單示例:
`<``style``>` `.slide1 div {` `margin:10px 0;` `}` ```style``>` `<``div` `class``=``"slide1"``>` `<``h3``>第1種外邊距折疊:兄弟元素``h3``>` `<``p``>文本上下間距10px``p``>` `<``p``>文本上下間距10px``p``>` ```div``>`
看這個(gè)例子中的兩個(gè)p標(biāo)簽,根據(jù)樣式定義:第一個(gè)p的margin-bottom和第二個(gè)p的margin-top?都是10px,那實(shí)際距離應(yīng)該等于20px才對(duì),但是用瀏覽器查看一下可以發(fā)現(xiàn),最終的邊距是10px。 這個(gè)例子就是外邊距折疊:塊級(jí)元素的上外邊距和下外邊距有時(shí)會(huì)合并(或折疊)為一個(gè)外邊距。
分類情況
外邊距折疊有3種基本情況:
相鄰元素
父元素和第一個(gè)子元素(或者最后一個(gè)子元素,等下記得回頭思考下這里為啥是第一個(gè)或者最后一個(gè))
空的塊級(jí)元素
先不急著記憶,首先,前文的例子中就是第一種情況--相鄰的兩個(gè)元素之間發(fā)生的外邊距折疊。
第二種和第三種情況如下:
`<``style``>` `.father {` `background-color: green;` `}` `.child {` `margin-top: 50px;` `background-color: red;` `height: 300px;` `}` `.slide3 {` `margin: 10px 0;` `}` ```style``>` `<``h3``>第2種外邊距折疊:父元素和首個(gè)子元素``h3``>` `<``div` `class``=``"slide2 father"``>` `` `<``div` `class``=``"slide2 child"``>` `` ```div``>` ```div``>` `<``h3``>第3種外邊距折疊:空的塊級(jí)元素``h3``>` `<``div` `class``=``"slide3"``>``div``>` }//歡迎加入全棧開(kāi)發(fā)交流劃水交流圈:582735936 ]//面向劃水1-3年前端人員 } //幫助突破劃水瓶頸,提升思維能力
他們的圖像也分別如圖:
情況2: 子元素的外邊距會(huì)“轉(zhuǎn)移”到父元素的外面
情況3:該元素的上下外邊距會(huì)折疊
好了,到這里我們不妨來(lái)看看這幾種情況的共同點(diǎn)(建議畫一下他們的盒模型,我懶就不畫了-_-),可以發(fā)現(xiàn)發(fā)生外邊距折疊的共同原因:margin之間直接接觸,沒(méi)有阻隔。
如何理解直接接觸?很簡(jiǎn)單:
第一個(gè)例子中,兩個(gè)
標(biāo)簽的垂直方向margin是直接接觸的;
第二個(gè)例子中,由于父元素的padding,border都為0,所以margin和它的子元素也是直接接觸的。(這個(gè)例子畫出盒模型就很好理解)
第三個(gè)例子中,空元素本身的上下邊距也是直接接觸的(padding,border也是0)
各種情況下折疊的結(jié)果
折疊后的邊距如何計(jì)算,這個(gè)可以簡(jiǎn)單驗(yàn)證下:
如果兩個(gè)外邊距都是正值,折疊后的邊距取較大的一個(gè)
如果兩個(gè)邊距一正一負(fù),折疊后的邊距為邊距之和
如果兩個(gè)邊距都為負(fù)數(shù),折疊后邊距為較小的邊距之和
如何防止外邊距折疊
前文說(shuō)到,發(fā)生外邊距折疊的原因是,外邊距直接接觸,因此防止折疊的方式就是,阻隔這個(gè)直接接觸,組合的方法包括:
嵌套情況只要border padding?非0,或者有inline元素隔開(kāi),比如父元素里加一行文字也可以(可以直接在情況2嘗試)
任何借助bfc形成阻隔的方式,如浮動(dòng),display:table等(BFC不熟悉的同學(xué)先查查,我后面補(bǔ)上)
小結(jié)
還得補(bǔ)充一下,前面討論的是基本情況,在基本情況下還可以進(jìn)行組合,比如多個(gè)相鄰元素之間;多層后代元素嵌套等等,弄明白基本原理,其他情況只要寫寫小的demo驗(yàn)證下就很好理解了。然后是慣例:如果內(nèi)容有錯(cuò)誤的地方歡迎指出(覺(jué)得看著不理解不舒服想吐槽也完全沒(méi)問(wèn)題);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/99707.html
摘要:發(fā)生外邊距折疊的條件是什么垂直方向上相鄰的兩個(gè)元素這種情況很好理解,就是上面的例子中給出的情況。外邊距折疊后的大小兩個(gè)相同大小的正數(shù)取某個(gè)外邊距的值。即與發(fā)生折疊,折疊后的值為。根據(jù)塊級(jí)格式化上下文來(lái)阻止外邊距折疊。 什么是外邊距折疊 準(zhǔn)確來(lái)說(shuō),外邊距折疊應(yīng)該叫垂直外邊距折疊,因?yàn)橹粫?huì)發(fā)生在垂直方向上,而水平方向上不會(huì)發(fā)生。 對(duì)于以下簡(jiǎn)單的html代碼和css代碼, 請(qǐng)問(wèn)top塊和bo...
摘要:這個(gè)例子就是外邊距折疊塊級(jí)元素的上外邊距和下外邊距有時(shí)會(huì)合并或折疊為一個(gè)外邊距。 外邊距折疊指的是毗鄰的兩個(gè)或多個(gè)外邊距 (margin) 會(huì)合并成一個(gè)外邊距,本文詳細(xì)的介紹了一下css外邊距折疊的實(shí)現(xiàn),分為3種情況,非常具有實(shí)用價(jià)值,需要的朋友可以參考下 前文 這是的一個(gè)經(jīng)典的老問(wèn)題,因?yàn)橹皠偤糜凶x者朋友問(wèn)到,順便整理一下。 從一個(gè)簡(jiǎn)單例子說(shuō)起 先看一個(gè)簡(jiǎn)單示例: `` `.sli...
摘要:這個(gè)例子就是外邊距折疊塊級(jí)元素的上外邊距和下外邊距有時(shí)會(huì)合并或折疊為一個(gè)外邊距。 外邊距折疊指的是毗鄰的兩個(gè)或多個(gè)外邊距 (margin) 會(huì)合并成一個(gè)外邊距,本文詳細(xì)的介紹了一下css外邊距折疊的實(shí)現(xiàn),分為3種情況,非常具有實(shí)用價(jià)值,需要的朋友可以參考下 前文 這是的一個(gè)經(jīng)典的老問(wèn)題,因?yàn)橹皠偤糜凶x者朋友問(wèn)到,順便整理一下。 從一個(gè)簡(jiǎn)單例子說(shuō)起 先看一個(gè)簡(jiǎn)單示例: `` `.sli...
摘要:如圖所示代表,代表,代表。以上例子中,和之間的折疊產(chǎn)生的,是個(gè)相鄰折疊的結(jié)果。將其值分為兩組正值,,負(fù)值,,根據(jù)有正有負(fù)時(shí)的計(jì)算規(guī)則,正值的最大值為,負(fù)值中絕對(duì)值最大的是,所以,最終折疊后的應(yīng)該是。 盒模型的構(gòu)成 之前寫了一篇關(guān)于如何解決css的外邊距重疊問(wèn)題,可是后來(lái)發(fā)現(xiàn),我有些本末倒置了,對(duì)于一個(gè)問(wèn)題的正確的處理流程就應(yīng)該是先發(fā)現(xiàn)問(wèn)題,分析問(wèn)題,解決問(wèn)題,所以我在這篇文章中就對(duì)下c...
閱讀 1849·2021-11-11 16:54
閱讀 2073·2019-08-30 15:56
閱讀 2384·2019-08-30 15:44
閱讀 1319·2019-08-30 15:43
閱讀 1877·2019-08-30 11:07
閱讀 830·2019-08-29 17:11
閱讀 1484·2019-08-29 15:23
閱讀 3020·2019-08-29 13:01