웹페이지를 디자인할 때, 요소들의 간격과 크기를 이해하는 것은 필수적이다. CSS 박스 모델은 이러한 측면을 제어하는 기초이다. 이번 글에서는 마진과 패딩이 블록 요소와 인라인 요소에 어떻게 작용하는지, 그리고 마진 겹침에 대해 살펴보겠다.
CSS 박스 모델은 모든 HTML 요소의 구조를 정의한다. 각 요소는 사각형 박스로 표현되며, 다음과 같은 계층으로 구성된다:
아래는 시각적 표현이다:
마진은 요소의 외부에 공간을 만들어 현재 요소와 다른 요소 간의 거리를 결정한다.
블록 요소에 대한 마진
<div>
, <p>
등) 간의 간격에 영향을 미친다.예시:
<div style="margin: 20px;">블록 1</div>
<div style="margin: 30px;">블록 2</div>
<!-- 두 블록 사이의 수직 간격은 마진 겹침으로 인해 30px이다. -->
인라인 요소에 대한 마진
<span>
, <a>
등)의 마진은 다음과 같이 작동한다:예시:
<span style="margin: 20px;">인라인 1</span>
<span style="margin: 30px;">인라인 2</span>
<!-- 인라인 요소 간의 수평 간격만 적용되고, 수직 마진은 무시된다. -->
블록 요소와 인라인 요소 간의 상호작용
마진은 요소 외부의 간격을 생성하여 다른 요소와 구분할 때 유용하다. 마진을 사용해:
CSS에서 인접한 요소의 마진이 결합되어 하나의 마진으로 처리되는 현상을 마진 겹침이라 한다. 이는 요소 간의 간격 계산을 최적화하기 위한 동작이다. 즉 마진 겹침은 두 요소의 마진 값이 겹쳐서 하나의 값으로 처리되는 현상이고, 이 현상의 본질은 아래와 같다.
마진 값은 경계를 기준으로 작동한다. 경계란 두 요소의 경계선이 서로 마주치는 지점을 말한다.
두 요소가 서로 마주하는 경계가 있을 때, 마진 값이 큰 값으로 설정된다. 작은 마진 값은 무시된다.
3.만약 두 요소 사이에 경계가 없으면, 마진 값이 겹쳐버리는(병합되는) 일이 발생한다.
한 방향으로만 겹침
writing-mode
속성을 사용해 블록 요소의 쌓이는 방향을 변경하면, 수평 마진이 겹칠 수도 있다.인접한 요소 간의 겹침
<br>
또는 <hr>
태그로 분리된 경우 마진은 겹치지 않는다.큰 마진이 우선
인라인 요소는 겹침 없음
inline-block
요소에는 발생하지 않는다.Flex와 Grid 자식 요소
패딩은 요소 내부에서 콘텐츠와 테두리 사이의 공간을 추가한다. 마진과 달리 패딩은 요소의 크기에만 영향을 미치며, 다른 요소에는 영향을 주지 않는다.
예시:
<div style="padding: 20px; border: 2px solid black;">
패딩이 있는 콘텐츠.
</div>
여기서:
box-sizing
속성에 따라 요소의 총 크기가 달라진다:
content-box (기본값)
border-box
패딩은 요소 내부 공간을 만들어:
box-sizing: border-box
를 사용하면 레이아웃 계산이 간단해진다.참조
1.https://medium.com/@RitikaAgrawal08/the-6-must-know-rules-of-margin-collapsing-in-css-56968836827d
2.https://opentutorials.org/course/3084
3.https://stackoverflow.com/questions/3069921/what-is-the-point-of-css-collapsing-margins/3070007#3070007?newreg=f2cfb131a08248f2a8531efb27cf7890