포스트

CSS Margin과 Padding 완벽 가이드 - 박스 모델의 이해

CSS Box Model의 핵심인 margin과 padding의 차이점을 이해하고, 여백을 효과적으로 조정하는 방법을 학습합니다.

CSS Margin과 Padding 완벽 가이드 - 박스 모델의 이해

1. CSS Box Model

모든 HTML 요소는 박스 모델(Box Model)을 따릅니다.

Margin (외부 여백)
Border (테두리)
Padding (내부 여백)
Content (내용)

Box Model 구성 요소

요소설명위치
Content실제 내용 (텍스트, 이미지 등)중심
Padding내용과 테두리 사이의 여백테두리 안쪽
Border요소의 테두리Padding 외부
Margin다른 요소와의 간격테두리 바깥

2. Margin (외부 여백)

기본 개념

Margin은 요소의 테두리 바깥에 생기는 여백입니다.

1
2
3
.box {
  margin: 20px;  /* 모든 방향 20px */
}

사용 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* 1. 한 값: 모든 방향 */
.box {
  margin: 50px;
  /* top, right, bottom, left 모두 50px */
}

/* 2. 네 값: 각 방향 지정 */
.box {
  margin: 50px 50px 50px 50px;
  /* 순서: 위, 오른쪽, 아래, 왼쪽 (시계방향) */
}

/* 3. 개별 속성 */
.box {
  margin-top: 50px;
  margin-right: 50px;
  margin-bottom: 50px;
  margin-left: 50px;
}

Margin 단축 표기법

1
2
3
4
5
6
7
8
9
10
11
12
13
.element {
  /* 한 값: 모든 방향 동일 */
  margin: 20px;

  /* 두 값: (상하) (좌우) */
  margin: 20px 40px;

  /* 세 값: (상) (좌우) (하) */
  margin: 20px 40px 30px;

  /* 네 값: (상) (우) (하) (좌) - 시계방향 */
  margin: 20px 40px 30px 10px;
}

Tip: 시계방향(12시부터)으로 위(top) → 오른쪽(right) → 아래(bottom) → 왼쪽(left)

실전 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* 카드 간격 */
.card {
  margin: 20px;
  border: 1px solid #ddd;
  padding: 15px;
}

/* 중앙 정렬 */
.container {
  width: 800px;
  margin: 0 auto;  /* 좌우 여백 자동 = 중앙 정렬 */
}

/* 상하만 여백 */
.section {
  margin: 40px 0;  /* 위아래 40px, 좌우 0 */
}

3. Padding (내부 여백)

기본 개념

Padding은 요소의 테두리 안쪽, 내용과 테두리 사이의 여백입니다.

1
2
3
.box {
  padding: 20px;  /* 내용 주변에 20px 여백 */
}

사용 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* 1. 한 값: 모든 방향 */
.box {
  padding: 50px;
  /* top, right, bottom, left 모두 50px */
}

/* 2. 네 값: 각 방향 지정 */
.box {
  padding: 50px 50px 50px 50px;
  /* 순서: 위, 오른쪽, 아래, 왼쪽 */
}

/* 3. 개별 속성 */
.box {
  padding-top: 50px;
  padding-right: 50px;
  padding-bottom: 50px;
  padding-left: 50px;
}

Padding 단축 표기법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.element {
  /* Margin과 동일한 규칙 */

  /* 한 값 */
  padding: 20px;

  /* 두 값: (상하) (좌우) */
  padding: 20px 40px;

  /* 세 값: (상) (좌우) (하) */
  padding: 20px 40px 30px;

  /* 네 값: (상) (우) (하) (좌) */
  padding: 20px 40px 30px 10px;
}

실전 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* 버튼 */
.btn {
  padding: 10px 20px;  /* 위아래 10px, 좌우 20px */
  background-color: #007bff;
  color: white;
  border: none;
}

/* 카드 콘텐츠 */
.card-body {
  padding: 20px;
  background-color: white;
}

/* 텍스트 영역 */
.text-container {
  padding: 15px 20px;
  line-height: 1.6;
}

4. Margin vs Padding 비교

차이점

구분MarginPadding
위치테두리 바깥테두리 안쪽
배경색적용 안 됨적용됨
음수 값✅ 가능❌ 불가능
auto✅ 가능 (중앙 정렬)❌ 불가능
용도요소 간 간격내용과 테두리 간격

시각적 비교

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* Margin: 배경색 적용 안 됨 */
.box-margin {
  width: 200px;
  height: 100px;
  margin: 50px;
  background-color: lightblue;
  /* 배경색은 content + padding 영역만 */
}

/* Padding: 배경색 적용됨 */
.box-padding {
  width: 200px;
  height: 100px;
  padding: 50px;
  background-color: lightblue;
  /* 배경색이 padding 영역까지 확장 */
}

5. 박스 크기 계산

기본 계산법

1
2
3
4
5
6
7
.example {
  width: 273px;
  height: 90px;
  margin: 50px;
  border: 5px solid black;
  padding: 50px;
}

계산:

  • 순수 내용 영역: 163px × (계산 필요)
    • 가로: 273 - 50(좌 padding) - 50(우 padding) - 5(좌 border) - 5(우 border) = 163px
  • 테두리 포함: 273px (width 값)
  • 전체 영역 (margin 포함): 373px
    • 273 + 50(좌 margin) + 50(우 margin) = 373px

box-sizing 속성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* 기본값: content-box */
.box-content {
  box-sizing: content-box;
  width: 200px;
  padding: 20px;
  border: 5px solid black;
  /* 실제 너비: 200 + 20*2 + 5*2 = 250px */
}

/* border-box: padding과 border 포함 */
.box-border {
  box-sizing: border-box;
  width: 200px;
  padding: 20px;
  border: 5px solid black;
  /* 실제 너비: 200px (padding, border 포함) */
}

Tip: box-sizing: border-box를 사용하면 계산이 훨씬 쉬워집니다.

6. 특수한 사용법

margin: auto (중앙 정렬)

1
2
3
4
5
6
7
8
9
10
11
.container {
  width: 800px;
  margin: 0 auto;  /* 좌우 중앙 정렬 */
}

/* 완전한 중앙 정렬 */
.center {
  width: 600px;
  margin-left: auto;
  margin-right: auto;
}

음수 margin

1
2
3
4
5
6
7
8
9
/* 요소를 위로 올리기 */
.overlap {
  margin-top: -20px;
}

/* 요소를 왼쪽으로 이동 */
.pull-left {
  margin-left: -30px;
}

Warning: 음수 margin은 레이아웃을 깨뜨릴 수 있으니 신중하게 사용하세요.

Margin Collapse (마진 병합)

1
2
3
4
5
6
7
8
9
10
11
/* 위 요소 */
.box1 {
  margin-bottom: 30px;
}

/* 아래 요소 */
.box2 {
  margin-top: 20px;
}

/* 실제 간격: 50px이 아닌 30px (큰 값 적용) */

7. 실전 활용

카드 레이아웃

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.card {
  width: 300px;
  margin: 20px;          /* 카드 간 간격 */
  padding: 20px;         /* 내부 여백 */
  border: 1px solid #ddd;
  border-radius: 8px;
  background-color: white;
}

.card-header {
  padding: 15px 20px;
  border-bottom: 1px solid #eee;
}

.card-body {
  padding: 20px;
}

.card-footer {
  padding: 15px 20px;
  border-top: 1px solid #eee;
}

네비게이션

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
nav {
  padding: 0 20px;       /* 좌우 여백 */
  background-color: #333;
}

nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

nav li {
  display: inline-block;
  margin: 0 15px;        /* 메뉴 항목 간격 */
}

nav a {
  display: block;
  padding: 15px 10px;    /* 클릭 영역 확보 */
  color: white;
}

컨테이너

1
2
3
4
5
6
7
8
9
10
.container {
  max-width: 1200px;
  margin: 0 auto;        /* 중앙 정렬 */
  padding: 0 20px;       /* 모바일 대응 */
}

.section {
  margin: 60px 0;        /* 섹션 간 간격 */
  padding: 40px 0;       /* 섹션 내부 여백 */
}

8. Best Practices

✅ 좋은 예

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* 명확한 의도 */
.content {
  margin: 40px auto;     /* 상하 40px, 좌우 중앙 */
  padding: 20px;
  max-width: 800px;
}

/* box-sizing 사용 */
* {
  box-sizing: border-box;
}

/* 일관된 간격 */
.section {
  margin-bottom: 60px;
}

❌ 나쁜 예

1
2
3
4
5
6
7
8
9
10
11
12
13
/* 불필요한 복잡성 */
.box {
  margin-top: 10px;
  margin-right: 15px;
  margin-bottom: 10px;
  margin-left: 15px;
  /* margin: 10px 15px; 로 간단히 */
}

/* 음수 margin 남용 */
.overlap {
  margin-top: -100px;    /* 레이아웃 깨짐 위험 */
}

9. 반응형 여백

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* 모바일 */
.container {
  padding: 15px;
  margin: 20px 0;
}

/* 태블릿 */
@media (min-width: 768px) {
  .container {
    padding: 30px;
    margin: 40px auto;
  }
}

/* 데스크톱 */
@media (min-width: 1024px) {
  .container {
    padding: 40px;
    margin: 60px auto;
    max-width: 1200px;
  }
}

정리

핵심 개념

1
2
3
4
5
6
7
8
9
10
11
12
13
/* Margin: 외부 여백 (요소 간 간격) */
.box {
  margin: 20px;
  margin: 20px 40px;           /* 상하 좌우 */
  margin: 20px 40px 30px 10px; /* 상 우 하 좌 */
}

/* Padding: 내부 여백 (내용과 테두리 간격) */
.box {
  padding: 20px;
  padding: 20px 40px;          /* 상하 좌우 */
  padding: 20px 40px 30px 10px;/* 상 우 하 좌 */
}

선택 가이드

상황사용
요소 사이 간격margin
클릭 영역 확장padding
중앙 정렬margin: 0 auto
배경색 영역 확장padding

단축 표기 순서

1
2
3
4
5
6
7
8
9
┌────────────┐
│    top     │  1번
├────────────┤
│ left │right│  4번  2번
├────────────┤
│   bottom   │  3번
└────────────┘

margin: top right bottom left;  (시계방향)

참고 자료

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.