iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
0
tags: 2019年鐵人賽css

前言

介紹 black 元素的垂直排版前要先了解 Margin collapse,不然在垂直排版時會出現一堆迷之間距,
就像下面這張圖,用Devtool 指到 <main> tag 父層,明明沒有 margin ,間距那爆出來的?

Margin collapse

摘自MDN
The top and bottom margins of blocks are sometimes combined (collapsed) into a single margin whose size is the largest of the individual margins (or just one of them, if they are equal), a behavior known as margin collapsing.

簡單來說就是 black 元素們之間的 margin-topmargin-bottom 赤裸裸相遇沒有 borderpadding 隔開時,會產生重疊合成單一的 margin-topmargin-bottom (其值會選擇最大值)。

會發生 Margin collapse 的基本情況如下

1.相鄰的兄弟姊妹元素

範例

<p>第一段落</p>
<p>第二段落</p>
p{
  color: white;
  background-color: blue;
}

<p> 在 Chrome 上有預設16 px的 margin-topmargin-bottom

幻想呈現

用Devtool看會發現...
第一個 <p>margin-bottom 和第二個 <p>margin-top 重疊了!

2.父層和自己的第一個/最後一個子元素

範例

<main>
  <h1>標題</h1>
  <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Asperiores dolor voluptas exercitationem ullam dolores repellendus.</p>
</main>
<footer>聯絡資訊</footer>
main{
  text-align: center;
  background-color: yellow;
  color: grey;
}
footer{
  color: white;
  text-align: center;
  background-color: black;
}

父層 <main>margin 可以想成0,但為何出現間距?

繼續看下去...

會發現第一個子元素 <h1>margin-top 和父層 <main>margin-top 相遇後發現彼此沒有別人阻礙,就合而為一了!

同理
最後一個子元素 <h1>margin-bottom 和父層 <main>margin-bottom 相遇後發現彼此沒有別人阻礙,就合而為一了!

所以,就算父層 <main> 沒有 margin ,但為何出現間距?

還記得重要所以要說三次的那段話嗎?
相遇後發現彼此沒有別人阻礙,就合而為一了!

就是因為

  • 父層的 margin-top = 第一個子元素的 margin-top
  • 父層的 margin-bottom = 最後一個子元素的 margin-bottom

解決方法可以用 borderpadding 隔開,還有之後會介紹的 BFC !

這裡介紹兩種基本情況,如果想了解更深入 Margin collapse 可以參考這篇What’s the Deal with Margin Collapse?


上一篇
|D11| CSS - 文字和inline垂直置中
下一篇
|D13| CSS - Block fomatting context(BFC)
系列文
前端菜焦阿日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言