λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ‘©πŸ»‍πŸ’»STUDY/CSS

[CSS] margin-collapsing(λ§ˆμ§„ 상쇄)

λ°˜μ‘ν˜•

λΈ”λ‘λ ˆλ²¨λΌλ¦¬ λ§ˆμ§„μ΄ μ•ˆλ˜λŠ” κ²½μš°κ°€ μžˆμ–΄μ„œ μ˜μ•„ν–ˆλŠ”λ° 이유λ₯Ό μ•Œμ•˜λ‹€.

λŒ€μ²΄λ‘œ 타이틀에 margin, μ„œλΈŒ νƒ€μ΄ν‹€μ—λŠ” padding을 주던데 μ΄λŸ¬ν•œ μ΄μœ μ˜€κ΅¬λ‚˜

 

1. λ§ˆμ§„ μƒμ‡„λž€

λ§ˆμ§„ μƒμ‡„λŠ” μ–΄λ–€ 두 개 이상 λΈ”λ‘μš”μ†Œμ˜ μƒν•˜ λ§ˆμ§„μ΄ κ²ΉμΉ  λ•Œ
μ–΄λŠ ν•œ μͺ½μ˜ κ°’λ§Œ μ μš©ν•˜λŠ” λΈŒλΌμš°μ € λ‚˜λ¦„μ˜ λ Œλ”λ§ κ·œμΉ™μ΄λ‹€.

 

2. λ§ˆμ§„ 상쇄가 μΌμ–΄λ‚˜λŠ” 3가지 상황

2-1. 인접 ν˜•μ œ λ°•μŠ€ κ°„ μƒν•˜ λ§ˆμ§„μ΄ κ²ΉμΉ  λ•Œ

겹쳐진 두 λ§ˆμ§„ 값을 비ꡐ해 더 큰 λ§ˆμ§„ κ°’μœΌλ‘œ λ Œλ”λ§.

λ§Œμ•½ 겹쳐진 두 값이 λ™μΌν•œ 경우, 쀑볡을 상쇄해 λ Œλ”λ§ν•œλ‹€.


 

2-2. 빈 μš”μ†Œμ˜ μƒν•˜ λ§ˆμ§„μ΄ κ²ΉμΉ  λ•Œ

'빈 μš”μ†Œ'λž€ 높이(height)κ°€ 0인 μƒνƒœμ˜ 블둝 μš”μ†Œλ₯Ό λ§ν•œλ‹€.

  • height / min-height / padding / border λ“± μƒν•˜λ‘œ λŠ˜μ–΄λ‚˜λŠ” ν”„λ‘œνΌν‹° 값을 주지 μ•Šμ•˜κ±°λ‚˜,
  • 내뢀에 inline μ½˜ν…μΈ κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μš”μ†Œ

μœ„μ˜ κ²½μš°λŠ” μœ„μ™€ μ•„λž˜λ₯Ό κ°€λ₯΄λŠ” 경계가 μ—†μœΌλ―€λ‘œ, μžμ‹ μ˜ 상단 λ§ˆμ§„μ˜ κ°’κ³Ό ν•˜λ‹¨ λ§ˆμ§„μ˜ 값을 비ꡐ해 더 큰 κ°’μœΌλ‘œ 상쇄.

λ§Œμ•½ 겹쳐진 값이 동일할 경우 쀑볡을 상쇄.

특히 빈 μš”μ†Œμ™€ μΈμ ‘λ°•μŠ€λ“€ 간에 λ§ˆμ§„ 겹침이 μΌμ–΄λ‚˜λŠ” κ΅¬μ‘°λŠ” 상쇄가 μ—¬λŸ¬λ²ˆ λ°œμƒν•œλ‹€.


 

λΉˆμš”μ†Œλ₯Ό μ•ˆ λ§Œλ“€λ©΄ λœλ‹€. 라고 생각할 수 μžˆμ§€λ§Œ, λ§ˆν¬μ—…μ„ ν•˜λ‹€λ³΄λ©΄ 빈 μš”μ†Œλ₯Ό λ§Œλ“€μ–΄ λ†“κ²Œ λœλ‹€.

  • λΉ λ₯Έ λ ˆμ΄μ•„μ›ƒ ꡬ성을 μœ„ν•΄ div 둜 μ˜μ—­μ„ λ§Œλ“€μ–΄ λ†“λŠ” 경우
  • 내뢀에 μš”μ†Œλ₯Ό appendν•˜κΈ° μœ„ν•΄ 빈 μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“€μ–΄ 놓을 경우 λ“±

height, padding, border λ“± 높이와 κ΄€λ ¨λœ 속성듀은 μƒμœ„λ‘œλΆ€ν„° μƒμ†λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μœ„μ˜ 경우λ₯Ό 인지해야 ν•œλ‹€.

 

2-3. λΆ€λͺ¨ λ°•μŠ€μ™€ 첫 번째(λ§ˆμ§€λ§‰) μžμ‹ λ°•μŠ€μ˜ 상단(ν•˜λ‹¨) λ§ˆμ§„μ΄ κ²ΉμΉ  λ•Œ

λ§ˆμ§„μ΄λž€ μ½˜ν…μΈ  κ°„μ˜ 간격이고, 간격을 벌리기 μœ„ν•΄μ„œλŠ” 경계가 ν•„μš”ν•˜λ‹€.

λΈŒλΌμš°μ €λŠ” λΆ€λͺ¨ λ°•μŠ€μ™€ 첫 번째(λ§ˆμ§€λ§‰) μžμ‹ λ°•μŠ€ κ°„μ˜ 경계λ₯Ό κ·Έ 사이에 μžˆλŠ” border / padding / inline μ½˜ν…μΈ  유무둜 νŒλ‹¨ν•œλ‹€.

μ•žμ˜ κ²½μš°μ™€ λ‹€λ₯΄κ²Œ height / min-height 값을 쀬더라도 이 경우 μ˜ˆμ™Έκ°€ λœλ‹€.

 

λ”°λΌμ„œ λΆ€λͺ¨μ™€ 첫 번째(λ§ˆμ§€λ§‰) μžμ‹ 사이에 inline μ½˜ν…μΈ (ν…μŠ€νŠΈ)κ°€ μ—†κ±°λ‚˜,

상단(ν•˜λ‹¨)에 padding λ˜λŠ” border 값을 주지 μ•Šμ•˜λ‹€λ©΄ λ§ˆμ§„μ΄ 겹치게 λœλ‹€.

이 λ•Œ, μžμ‹ μš”μ†Œμ˜ λ§ˆμ§„ 값에 상관없이 μƒμ‡„λœ λ§ˆμ§„μ€ λΆ€λͺ¨ λ°•μŠ€μ˜ λ°”κΉ₯으둜 λ Œλ”λ§ λœλ‹€.

 

2-3-1. λΆ€λͺ¨ λ°•μŠ€μ™€ 첫 번째 μžμ‹ λ°•μŠ€μ˜ 상단 λ§ˆμ§„μ΄ λ‚˜λž€νžˆ κ²ΉμΉ  λ•Œ

 

κ·Έλž˜μ„œ

λΆ€λͺ¨λ°•μŠ€ 상단(ν•˜λ‹¨)에 padding λ˜λŠ” border 값을 μ£Όμ–΄ 벽을 λ§Œλ“€μ–΄μ£ΌλŠ” 것이 μ•ˆμ „ν•˜λ‹€.

<div class="parent">
	<div class="child"></div>    
</div>
.parent {
    background: #ddd;
    height: 100px;
    margin-top: 30px;
    border-top: 1px solid transparent;
}
.child {
    background: green;
    height: 100px;
    margin-top: 30px;
}

 

 

3. λ§ˆμ§„ 상쇄 κ·œμΉ™ 적용

  • λ§ˆμ§„ μƒμ‡„λŠ” μΈμ ‘ν•œ 두 λ°•μŠ€κ°€ μ˜¨μ „ν•œ Block-level μš”μ†ŒμΌ 경우 적용. (inline, inline-block, table-cell, table-caption λ“±μ˜ μš”μ†ŒλŠ” block-level 이 μ•„λ‹ˆλ‹€.)
  • λ§ˆμ§„ 값이 0 이더라도 상쇄 κ·œμΉ™μ€ 적용.
  • 쒌우 λ§ˆμ§„μ€ κ²ΉμΉ˜λ”λΌλ„ μƒμ‡„λ˜μ§€ μ•ŠλŠ”λ‹€.

 

 

4. λ§ˆμ§„ 상쇄 κ·œμΉ™ μ˜ˆμ™Έ

  • λ°•μŠ€κ°€ position: absolute 된 μƒνƒœ
  • λ°•μŠ€κ°€ float: left / right 된 μƒνƒœ (단, clear λ˜μ§€ μ•Šμ€ μƒνƒœ)
  • λ°•μŠ€κ°€ display: flex 일 λ•Œ λ‚΄λΆ€ flexbox item
  • λ°•μŠ€κ°€ display: grid 일 λ•Œ λ‚΄λΆ€ grid item

 

 

 

Reference

https://velog.io/@raram2/CSS-%EB%A7%88%EC%A7%84-%EC%83%81%EC%87%84Margin-collapsing-%EC%9B%90%EB%A6%AC-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4

λ°˜μ‘ν˜•