CSS Box Model
1. CSS Box Model: 웹 레이아웃의 기초
CSS Box Model은 웹 페이지 레이아웃의 근간을 이루는 중요한 개념입니다. 모든 HTML 요소는 하나의 '박스'로 취급되며, 이 박스는 콘텐츠, 패딩, 테두리, 마진으로 구성됩니다. Box Model을 이해하면 웹 페이지의 구조를 더 정확하게 제어할 수 있습니다.
처음 레이아웃을 잡을 때 이 박스 모델을 그려보는 것이 중요합니다. 이 박스 모델을 그리면서 데이터를 어떻게 구조화하고, 그에 알맞은 태그는 무엇인지 생각해 보아야 합니다.

앞서 말씀드린 것처럼 이러한 박스모델은 요소, 패딩, 테두리, 마진으로 구성되어 있습니다.
- 요소: 텍스트, 사진 등 보여줄 대상입니다.
- 패딩: 요소 주변 영역을 감쌉니다.
- 테두리: 요소와 패딩을 감싸는 테두리입니다
- 마진: 테두리 밖의 영역을 감쌉니다.

CSS box model은 블록 박스에 적용됩니다. 인라인 박스는 박스 모델에 정의된 일부 동작만 사용합니다.
주의: Box Model은 기본적으로 블록 레벨 요소에 완전히 적용됩니다. 인라인 요소는 width, height, 상하 마진값이 적용되지 않습니다.
1.1 width
요소의 너비를 설정합니다. 기본값은 콘텐츠 영역의 너비이지만 box-sizing
속성을 사용하여 테두리 영역까지 포함할 수 있습니다. 너비를 입력하지 않으면 auto
로 브라우저가 계산하여 지정합니다. 이때, 부모 요소의 너비를 기준으로 계산하여 가득 채웁니다.
1.2 height
요소의 높이를 설정합니다. 입력하지 않으면 auto
로 브라우저가 계산하여 지정합니다. 이때, width와는 다르게 content의 높이만큼만 설정됩니다.
아래 예제에서 넓이와 높이를 각각 auto로 변경해 보세요.
1.3 padding
패딩은 콘텐츠 주변의 여백을 만듭니다. 이 여백은 border 안쪽 여백입니다. padding
속성은 단축 속성으로, 네 방향의 패딩을 한 번에 지정할 수 있습니다. 작성 순서는 시계방향으로 top
, right
, bottom
, left
입니다. 순서대로 padding-top
, padding-right
, padding-bottom
, padding-left
이며 개별 속성을 사용할 수도 있습니다.
p {
padding: 10px; /* top, right, bottom, left 모두 10px */
padding: 10px 20px; /* top, bottom :10px, left, right:20px */
padding: 10px 20px 30px; /* top:10px, left,right:20px, bottom:30px */
padding: 10px 20px 30px 40px;
}
p {
padding: 10px; /* top, right, bottom, left 모두 10px */
padding: 10px 20px; /* top, bottom :10px, left, right:20px */
padding: 10px 20px 30px; /* top:10px, left,right:20px, bottom:30px */
padding: 10px 20px 30px 40px;
}
1.4 margin
마진은 요소 주변의 여백을 만듭니다. 마진은 border 바깥 여백입니다. margin
속성은 단축 속성으로, 네 방향의 마진을 한 번에 지정할 수 있습니다. 작성 순서는 시계방향으로 top
, right
, bottom
, left
입니다. 순서대로 margin-top
, margin-right
, margin-bottom
, margin-left
이며 개별 속성을 사용할 수도 있습니다.
이 마진을 사용해서 요소를 배치할 수도 있습니다.
- 가운데 배치
- 오른쪽 배치
1.5 border
요소의 테두리를 지정합니다. 테두리는 요소가 차지하는 전체 너비, 높이의 일부입니다. 단축 속성입니다. 다만 이렇게 되었을 때 일부 CSS에서 계산하기 어려운 경우가 있는데 이 경우에는 box-sizing
속성을 사용하여 테두리를 포함하도록 설정할 수 있습니다.
이 속성은 선의 두께, 스타일, 색상을 지정할 수 있는 단축속성입니다. 세부적인 속성은 아래와 같습니다.
border-width
border-style
border-color
- border-width
- border-top-width
- border-right-width
- border-bottom-width
- border-left-width
- border-style
- border-top-style
- border-right-style
- border-bottom-style
- border-left-style
- border-color
- border-top-color
- border-right-color
- border-bottom-color
- border-left-color
- border-width
- border-style border-style - CSS: Cascading Style Sheets | MDN
- border-image border-image - CSS: Cascading Style Sheets | MDN
.box {
/* 두께 스타일 색상 */
border: 1px solid black;
/* 각기 다른 테두리 적용 */
border-top: 2px dashed red;
border-right: 3px dotted green;
border-bottom: 4px double blue;
border-left: 5px groove yellow;
}
.box {
/* 두께 스타일 색상 */
border: 1px solid black;
/* 각기 다른 테두리 적용 */
border-top: 2px dashed red;
border-right: 3px dotted green;
border-bottom: 4px double blue;
border-left: 5px groove yellow;
}
1.6 box-sizing
box-sizing
속성은 요소의 총 너비와 높이를 계산하는 방식을 지정합니다. 기본값은 content-box
입니다. border-box
로 설정하면 테두리와 패딩을 포함하여 요소의 총 너비와 높이를 계산합니다. 정리를 하면 아래와 같습니다.
content-box
: 기본값. width, height에 border, padding 포함하지 않음.border-box
: width, height에 border, padding 포함.- width = 콘텐츠 너비 + border + padding
이 박스의 넓이는 몇일까요? width 100px + padding 20px _ 2 + border 30px _ 2를 해서 200px이 됩니다.
1.7 border-radius
border-radius
속성을 사용하면 요소의 모서리를 둥글게 만들 수 있습니다. 이 또한 단축 속성이며 자세한 속성은 아래와 같습니다.
border-top-left-radius
border-top-right-radius
border-bottom-right-radius
border-bottom-left-radius
