我們曾經在HTML篇章討論block元素與inline元素時,粗淺提到margin重疊。既然已經知道box model,終於可以來認識什麼是Collapsing margins。
In CSS, the adjoining margins of two or more boxes (which might or might not be siblings) can combine to form a single margin. Margins that combine this way are said to collapse, and the resulting combined margin is called a collapsed margin.
這意思是相連的box(可能是兄弟元素box或父子層關係的元素box),它們相鄰的margin
重疊成一個margin
。
float
元素absolute
的元素root element
(根元素)padding
、border
、clearfix
、和line box
隔開。margin-bttom
跟margin-top
。margin-top
。margin-bottom
。相鄰兄弟元素的margin-bttom
跟margin-top
我們知道了margin在box model裡,通常是用來區隔元素跟元素距離,而某些HTML元素在預設值上就會有margin,我們可以拿<h1>
元素跟<p>
元素來示範兄弟元素的margin重疊現象。
<h1>我是標題我是標題</h1>
<p>我是段落我是段落我是段落我是段落</p>
用開發者介面來看margin的區域:
<h1>
元素的margin預設值是上下21.44px。<p>
元素的margin預設值是上下16px。<h1>
的margin-bottom跟<p>
的margin-top重疊成一個margin。父元素跟第一個子元素的margin-top
父元素跟第一個子元素,它們垂直相鄰的margin-top
會重疊。我們設父元素margin-top:50px
,然後子元素margin-top:10px
:
.outer {
outline: 5px solid #000;
width: 300px;
height: 100px;
margin-top: 50px;
}
.inner {
width: 200px;
height: 50px;
margin: auto;
background-color: pink;
margin-top: 10px;
}
原本期待.inner
的margin-top: 10px
可以讓子元素外邊緣跟父元素的內邊緣中間隔開10px。可是並沒有如願以償。
因為它的margin-top
跑到外面去跟父層的margin-top
重疊在一塊了。
父元素跟最後一個子元素的margin-bottom
最後一個子元素的margin-bottom
也跟父元素的margin-bottom
垂直相鄰,所以它們各自的margin-bottom
也會發生margin collapse
現象,並取比較大的margin值。
了解margin collapse
現象,可以讓我們在遇到這個情況時,知道為什麼margin值不照我們的想像走。其實margin collapse
在標題元素跟段落元素時,是很方便的,它會自動幫我們重疊margin,才不會發生標題跟段落距離太遠的情況。
然而在其它時候可能會覺得困擾。但我們知道這個現象之後,可以改用padding
避免margin collapse
,順利設定兩個元素間的距離。
今天的筆記告一段落,明天見~
*有任何錯誤或描述不夠精準之處,歡迎指教,非常感謝。