鍍金池/ 問答/HTML/ 關(guān)于css盒模型,有一個(gè) 相鄰?fù)膺吘?adjoining margin)的問題不

關(guān)于css盒模型,有一個(gè) 相鄰?fù)膺吘?adjoining margin)的問題不懂,請教下大家。手動(dòng)問號?

英文文檔這樣說的:

Note. Adjoining margins can be generated by elements that are not related as siblings or ancestors.

中文文檔這樣翻譯的:

注意 相鄰?fù)膺吘嘁部梢杂刹痪咝值芑蜃嫦汝P(guān)系的元素生成

可是,除了兄弟關(guān)系元素 和 祖先關(guān)系的元素,俺實(shí)在還想不出還有什么情況存在。難道是 一個(gè)元素自己的上邊距和下邊距相鄰這種情況嗎?

回答
編輯回答
慢半拍

文章緊接著不是列了一堆情況???
https://www.w3.org/TR/CSS2/bo...

clipboard.png

2018年2月18日 08:51
編輯回答
巷尾

歡迎關(guān)注我的微信公眾號:前端指南
外邊距重疊就是 margin-collapse。相鄰的兩個(gè)盒子(可能是兄弟關(guān)系也可能是祖先關(guān)系)的外邊距可以結(jié)合成一個(gè)單獨(dú)的外邊距。 這種合并外邊距的方式被稱為折疊,結(jié)合而成的外邊距稱為折疊外邊距

折疊結(jié)果遵循下列計(jì)算規(guī)則:

兩個(gè)相鄰的外邊距都是正數(shù)時(shí),折疊結(jié)果是它們兩者之間較大的值
兩個(gè)相鄰的外邊距都是負(fù)數(shù)時(shí),折疊結(jié)果是兩者絕對值的較大值
兩個(gè)外邊距一正一負(fù)時(shí),折疊結(jié)果是兩者的相加的和

怎么避免外邊距折疊(怎么消除)

浮動(dòng)元素、inline-block 元素、絕對定位元素的 margin 不會(huì)和垂直方向上其他元素的 margin 折疊(注意這里指的是上下相鄰的元素)

創(chuàng)建了塊級格式化上下文的元素,不和它的子元素發(fā)生 margin 折疊(注意這里指的是創(chuàng)建了BFC的元素和它的子元素不會(huì)發(fā)生折疊。

我們都知道觸發(fā)BFC的因素是float(除了none)、overflow(除了visible)、display(table-cell/table-caption/inline-block)、position(除了static/relative) 很明顯大家可以看出來相鄰元素不發(fā)生折疊的因素是觸發(fā)BFC因素的子集,也就是說如果我為上下相鄰的元素設(shè)置了overflow:hidden,雖然觸發(fā)了BFC,但是上下元素的上下margin還是會(huì)發(fā)生折疊。

這個(gè)問題其實(shí)和BFC并沒有太大的關(guān)系,希望大家不要濫用BFC,要知道BFC不是全能,創(chuàng)建BFC的初衷只是為了讓元素本身(包括它的子元素)能夠正確的計(jì)算自己的寬高。

zoom,這是IE瀏覽器最初支持的縮放屬性,到現(xiàn)在只有最新的webkit核心的瀏覽器也支持。但只是在IE8以下的瀏覽器下才可成功觸發(fā)hasLayout,對于非IE瀏覽器也是沒有效果的,所以還是需要同樣的去創(chuàng)建BFC。
關(guān)于最終如何解決這樣的問題,我的建議是在寫的時(shí)候盡量用同一方向的margin,比如都設(shè)置為top或者bottom,因?yàn)槟阍趯?shí)踐的時(shí)候有時(shí)不需要為每個(gè)元素設(shè)置浮動(dòng)、inline-block或者absolute 。

2018年2月23日 20:32