CSS 박스 모델을 이용해서 레이아웃을 구성해보자
2025. 1. 22. 16:41ㆍHTML_CSS
728x90
반응형
안녕하세요. 진득코딩입니다.
이번 시간에는 CSS 박스 모델에 대해 알아보고 이를 이용해 레이아웃을 구성하는 방법에 대해 살펴보도록 하겠습니다.
CSS 박스 모델
- CSS 박스 모델은 웹 문서의 내용을 박스 형태로 정의하는 방법입니다.
- 이 박스 모델이 모여 웹 문서를 이룹니다.
- 박스 모델에는 마진과 패딩, 테두리 등 박스가 여러 겹 들어 있습니다.
블록 레벨 요소
- 박스 모델은 블록 레벨 요소인지 인라인 레벨 요소인지에 따라 나열 방법이 달라집니다.
- 블록 레벨(block-level) 요소란 태그를 사용해 요소를 삽입했을 때 혼자 한 줄을 차지하는 것을 가리킵니다.
- 한 줄을 차지한다는 것은 해당 요소의 너비가 100%라는 의미입니다.
- 따라서 블록 레벨 요소의 왼쪽이나 오른쪽에 다른 요소가 올 수 없습니다.
- 대표적인 태그로 <h1>, <div>, <p> 등이 있습니다.
인라인 레벨 요소
- 인라인 레벨(inline-level) 요소는 한 줄을 차지하지 않습니다.
- 컨텐츠만큼만 영역을 차지하고 나머지 공간에는 다른 요소가 올 수 있습니다.
- 따라서 한 줄에 인라인 레벨 요소를 여러 개 표시할 수 있습니다.
- 대표적인 태그로 <span>, <img>, <strong> 등이 있습니다.
박스 모델의 기본 구성
- 웹 문서의 블록 레벨 요소는 모두 박스 형태입니다.
- 스타일 시트에서는 박스 형태인 요소를 박스 모델(box model) 요소라고 합니다.
- 웹 문서 안에서 여러 요소를 원하는 위치에 배치하려면 CSS 박스 모델을 잘 알고 있어야 합니다.
- 박스 모델은 컨텐츠 영역, 박스와 컨텐츠 영역 사이의 여백인 패딩(padding), 박스의 테드리(border), 그리고 여러 박스 모델 사이의 여백인 마진(margin) 등의 요소로 구성됩니다.
- 이때 마진이나 패딩은 웹 문서에서 다른 컨텐츠 사이의 간격이나 배치 등을 고려할 때 필요한 개념입니다.
width, height 속성
- width, height 속성은 컨텐츠 영역의 크기를 지정하는 속성입니다.
- 너비는 width, 높이는 height 속성을 사용합니다.
- width, height 속성에서 사용할 수 있는 값은 아래 표와 같습니다.
종류 | 설명 |
<크기> | 너비나 높이의 값을 px나 em 단위로 지정합니다. |
<백분율> | 박스 모델을 포함하는 부모 요소를 기준으로 너빗값이나 높잇값을 백분율(%)로 지정합니다. |
auto | 박스 모델의 너빗값과 높잇값이 컨텐츠 양에 따라 자동으로 결정됩니다. 기본값입니다. |
box-sizing 속성
- box-sizing 속성은 박스 모델의 크기를 계산할 때 사용하는 속성입니다.
- width 속성과 height 속성은 박스 모델에서 컨텐츠 주변의 여백이나 테두리를 뺀 컨텐츠 영역의 크기를 가리킵니다.
- 그래서 웹 문서에 여러 가지 요소를 배치할 때 실제 박스 모델이 차지하는 크기는 컨텐츠 영역 외에도 컨텐츠와 테두리 사이의 여백, 테두리 두께까지 계산해야 합니다.
- box-sizing은 박스 모델의 너비와 높이를 어떻게 결정할 것인지에 따라 border-box와 content-box 중에서 선택할 수 있습니다.
종류 | 설명 |
border-box | 테두리까지 포함해서 너빗값을 지정합니다. |
content-box | 컨텐츠 영역만 너빗값을 지정합니다. 기본값입니다. |
- 웹 문서 레이아웃을 만들 때는 CSS에서 박스 모델을 사용하는데, 요소의 크기를 쉽게 계산하려면 box-sizing 속성을 border-box로 지정해 놓는 것이 좋습니다.
- 물론 컨텐츠 너비를 정확하게 계산해야 한다면 content-box로 지정하거나 아예 box-sizing 속성을 사용하지 않으면 됩니다.
box-shadow 속성
- box-shadow 속성을 사용하면 박스 모델에 그림자 효과를 줄 수 있습니다.
- box-shadow에서 그림자 위치나 색상, 흐림 정도 등을 지정하려면 다음과 같은 형태로 사용합니다.
box-shadow: <수평 거리> <수직 거리> <흐림 정도> <번짐 정도> <색상> inset
- box-shadow의 속성값에서 수평 거리와 수직 거리는 반드시 지정해야 합니다.
- box-shadow의 속성값은 다음 표와 같습니다.
종류 | 설명 |
<수평 거리> | 그림자가 가로로 얼마나 떨어져 있는지를 나타냅니다. 양숫값은 요소의 오른쪽에, 음숫값은 요소의 왼쪽에 그림자를 만듭니다. 필수 속성입니다. |
<수직 거리> | 그림자가 세로로 얼마나 떨어져 있는지를 나타냅니다. 양숫값은 요소의 아래쪽에, 음숫값은 요소의 위쪽에 그림자를 만듭니다. 필수 속성입니다. |
<흐림 정도> | 이 값을 생략하면 0을 기본값으로 하여 진한 그림자를 표시합니다. 이 값이 커질수록 부드러운 그림자를 표시하며, 음숫값은 사용할 수 없습니다. |
<번짐 정도> | 양숫값을 사용하면 모든 방향으로 그림자가 퍼져서 박스보다 그림자가 크게 표시됩니다. 반대로 음숫값은 모든 방향으로 그림자가 축소되어 보입니다. 기본값은 0입니다. |
<색상> | 한 가지만 지정할 수도 있고, 공백으로 구분해서 여러 개의 색상을 지정할 수도 있습니다. 기본값은 현재 검은색입니다. |
inset | 이 키워드를 함께 표시하면 안쪽 그림자로 그립니다. |
테두리 스타일 지정하기
- 박스 모델을 사용해 웹 문서에 요소를 배치하려면 각 박스 모델의 크기와 여백, 테두리 스타일 등을 고려해야 합니다.
- 테두리 스타일은 점선인지 실선인지뿐만 아니라 테두리 두께와 색상을 지정할 수 있습니다.
- 또한 네 방향 모두 같은 테두리를 사용할 수도 있고 각각 다르게 사용할 수도 있습니다.
박스 모델의 방향 살펴보기
- 박스 모델은 상하좌우 4개의 방향이 있어서 테두리나 마진, 패딩 등을 지정할 때 한꺼번에 똑같이 지정하거나, 모두 다르게 지정할 수도 있습니다.
- 박스 모델의 방향으로 맨 윗부분은 top, 아랫부분은 bottom, 그리고 왼쪽은 left라고 합니다.
border-style 속성
- border-style 속성을 사용하여 테두리 스타일을 저장할 수 있습니다.
- border-style 속성의 기본값은 none이므로 속성값을 따로 지정하지 않으면 테두리 색상이나 두께를 지정하더라도 화면에 표시되지 않습니다.
- 따라서 테두리를 그리려면 가장 먼저 테두리 스타일의 속성값을 지정해야 합니다.
- border-style 속성에서 사용할 수 있는 속성값은 다음 표와 같습니다.
종류 | 설명 |
none | 테두리가 없습니다. 기본값입니다. |
hidden | 테두리를 감춥니다. 표에서 border-collapse : collapse일 경우 다른 테두리도 표시되지 않습니다. |
solid | 테두리를 실선으로 표시합니다. |
dotted | 테두리를 점선으로 표시합니다. |
dashed | 테두리를 짧은 직선으로 표시합니다. |
double | 테두리를 이중선으로 표시합니다. |
groove | 테두리를 창에 조각한 것처럼 표시합니다. 홈이 파인 듯 입체 느낌이 납니다. |
inset | 표에서 border-collapse : seperate일 경우 전체 박스 테두리가 창에 박혀있는 것처럼 표시되고, 표에서 border-collapse: collapse일 경우 ridge와 똑같이 표시됩니다. |
outset | 표에서 border-collapse : seperate일 경우 전체 박스 테두리가 창에 튀어나온 것처럼 표시되고, 표에서 border-collapse: collapse일 경우 ridge와 똑같이 표시됩니다. |
ridge | 테두리를 창에서 튀어나온 것처럼 표시합니다. |
- 만일 테두리 스타일을 4개 방향 모두 다르게 지정하고 싶다면 border-top-style, border-right-style, border-bottom-style, border-left-style처럼 border와 style 사이에 상하좌우 방향을 넣고 하이픈(-)으로 연결합니다.
border-width 속성
- border-width 속성을 이용하여 테두리 두께를 지정할 수 있습니다.
- 테두리 두께를 지정할 때는 크기를 직접 입력할 수도 있고 thin이나 medium, thick 같은 예약어 중에서 선택할 수도 있습니다.
border-width: <크기> ¦ thin ¦ medium ¦ thick
- 만일 테두리 두께를 4개 방향 모두 다르게 지정하고 싶다면 border-top-width, border-right-width,...처럼 border와 width 사이에 상하좌우 방향을 넣고 하이픈(-)으로 연결합니다.
1. 첫 번째 박스 스타일에는 border-width 속성값이 1개입니다. 이 경우에는 4개 방향 테두리 모두 같은 값이 적용됩니다.
#box1 { border-width: 2px; }
2. 두 번째 박스 스타일처럼 속성값이 2개라면 첫 번째 값인 thick이 위아래 (top, bottom), 테두리의 값이 되고, 두 번째 값 thin은 좌우 (left, right) 테두리의 값이 적용됩니다.
#box2 { border-width: thick thin; }
3. 세 번째 박스 스타일은 속성값이 3개입니다. 순서대로 top -> right -> bottom 속성값인데 마지막 left 속성값이 빠져 있습니다. 이때 left 속성값은 마주 보는 right 속성값과 똑같이 적용됩니다.
#box3 { border-width: thick thin thin; }
4. 네 번째 박스 스타일은 border-width 속성값 4개를 각각 다르게 지정했습니다. top -> right -> bottom -> left 순으로 적용합니다.
#box4 { border-width: 10px 5px 5px 10px; }
border-color 속성
- border-color 속성은 박스 모델에서 테두리 색상을 지정할 수 있습니다.
- 4개의 방향의 테두리 색상을 한꺼번에 지정할 수도 있고, border와 color 사이에 테두리 방향을 넣어 주면 색상을 하나씩 지정할 수도 있습니다.
border 속성
- border 속성을 이용하여 테두리 스타일을 묶어 지정할 수 있습니다.
- 4개 방향의 테두리 스타일을 다르게 지정하고 싶다면 border-top이나 border-right처럼 속성 이름에 방향을 함께 써서 따로 지정할 수도 있고, 4개 방향의 테두리 스타일이 같다면 간단히 border 속성만 사용하면 됩니다.
border-radius 속성
- border-radius 속성을 사용하면 꼭짓점 부분에 원이 있다고 가정해서 둥글게 처리합니다.
- 이때 원의 반지름(radius)을 이용하면 둥근 정도를 나타낼 수 있습니다.
border-radius: <크기> ¦ <백분율>
종류 | 설명 |
<크기> | 반지름 크기를 px, em의 단위와 함께 수치로 표시합니다. |
<백분율> | 현재 요소의 크기를 기준으로 비율(%)로 지정합니다. |
- border-radius 속성을 사용하여 이미지를 원 형태로 만들 수 있습니다.
- 이미지 요소의 너비와 높이를 똑같이 만든 후 border-radius의 반지름값을 너비나 높이의 50%로 지정하면 원이 됩니다.
꼭짓점마다 따로 둥글게 처리하기
- 박스 모델에서 꼭짓점 4개를 모두 다르게 지정하고 싶다면 border와 radius 사이에 위치를 나타내는 예약어를 넣어 사용합니다.
꼭짓점을 타원으로 만들기
- border-radius 속성을 사용해서 타원 형태로 만들 수도 있습니다.
- 반지름 대신 타원의 가로 반지름 값과 세로 반지름 값을 넣어주는데, 이때 가로 반지름과 세로 반지름 사이에 슬래시(/)를 넣어서 구분합니다.
border-radius: <가로 반지름> / <세로 반지름>;
- 그리고 특정한 꼭짓점만 타원 형태로 만들겠다면 슬래시 없이 가로 반지름과 세로 반지름을 지정합니다.
border-위치--radius: <가로 반지름> <세로 반지름>;
margin 속성
- margin은 요소 주변의 여백을 의미합니다.
- 마진을 이용하여 요소와 요소 사이의 간격을 조절할 수 있습니다.
- 박스 모델의 4개 방향에 한번에 똑같이 지정할 수도 있고, margin 다음에 하이픈(-)을 넣고 위치를 나타내는 예약어 top, right, bottom, left를 사용해서 특정 방향에만 지정할 수도 있습니다.
margin: <크기> ¦ <백분율> ¦ auto
- 다음 표는 margin 속성에서 사용할 수 있는 속성값을 나타냅니다.
종류 | 설명 | 예시 |
<크기> | 너빗값이나 높잇값을 px이나 em 같은 단위와 함께 수치로 지정합니다. | margin: 50px; |
<백분율> | 박스 모델을 포함한 부모 요소를 기준으로 너빗값이나 높잇값을 퍼센트(%)로 지정합니다. | margin: 0.1%; |
auto | display 속성에서 지정한 값에 맞게 적절한 값을 자동으로 지정합니다. |
- margin 속성에서도 속성값을 하나만 지정하거나 2개, 3개 또는 4개를 지정할 수 있습니다.
- 값이 1개라면 마진값을 4개 방향 모두 똑같이 지정하지만, 값이 여러 개라면 top -> right -> bottom -> left순 (시계 방향)으로 적용됩니다.
margin 속성을 사용하여 웹 문서를 가운데 정렬하기
- margin 속성을 사용해 웹 문서의 내용을 화면 중앙에 배치하려면 우선적으로 배치할 요소의 너빗값이 정해져 있어야 합니다.
- 그리고 margin-left와 margin-right의 속성값을 auto로 지정합니다.
- CSS는 웹 브라우저 화면의 너비에서 요소 너빗값을 뺀 나머지 영역을 좌우 마진으로 자동 계산합니다.
마진 중첩 이해하기
- 마진 중첩(margin overlap) 또는 마진 상쇄(margin collapse)란 요소를 세로로 배치할 경우에 각 요소의 마진과 마진이 서로 만나면 마진값이 큰 쪽으로 겹쳐지는 현상을 말합니다.
- 마진 중첩은 아래 마진과 위 마진이 서로 만날 때 큰 마진값으로 합쳐지는 것이고, 오른쪽 마진과 왼쪽 마진이 만날 경우에는 중첩되지 않습니다.
padding 속성
- 패딩(padding)이란 컨텐츠 영역과 테두리 사이의 여백을 말합니다.
- 테두리 안쪽의 여백이라고 생각하면 편하게 이해할 수 있습니다.
- 패딩과 마진은 여백이 어느 위치에 있느냐만 다를 뿐 박스 모델에서 패딩을 지정하는 방법은 마진과 거의 같습니다.
- padding 속성은 4개 방향의 마진을 한꺼번에 지정할 수도 있고, padding 다음에 하이픈(-)을 넣고 위치를 나타내는 예약어 top, right, bottom, left를 사용해서 특정 방향에만 지정할 수도 있습니다.
display 속성
- display 속성은 배치 방법을 결정하는 속성입니다.
- display 속성을 사용하면 블록 레벨 요소와 인라인 레벨 요소를 서로 바꿔서 사용할 수 있습니다.
- 주로 웹 문서의 내비게이션을 만들면서 메뉴 항목을 가로로 배치할 때 많이 사용하고, 이미지를 표 형태로 배치할 수도 있습니다.
- 문서 레이아웃을 만들 때 자주 사용하는 속성은 아래 표와 같습니다.
종류 | 설명 |
block | 인라인 레벨 요소를 블록 레벨 요소로 만듭니다. |
inline | 블록 레벨 요소를 인라인 레벨 요소로 만듭니다. |
inline-block | 인라인 레벨 요소와 블록 레벨 요소의 속성을 모두 가지고 있으며 마진과 패딩을 지정할 수 있습니다. |
none | 해당 요소를 화면에 표시하지 않습니다. |
float 속성
- float 속성은 왼쪽이나 오른쪽으로 배치하는 속성입니다.
- float 속성을 사용하여 이미지를 표시하고 그 주변에 텍스트가 둘러싸도록 할 수 있습니다.
- float 속성은 웹 요소를 문서 위에 떠 있게 만듭니다.
- 여기서 '떠 있다'는 의미는 요소가 왼쪽 구석이나 오른쪽 구석에 배치된다는 것을 말합니다.
- float 속성에서 사용할 수 있는 값에는 왼쪽(left), 오른쪽(right), 그리고 좌우 어느 쪽도 아닌 것(none)이 있습니다.
종류 | 설명 |
left | 해당 요소를 문서의 왼쪽에 배치합니다. |
right | 해당 요소를 문서의 오른쪽에 배치합니다. |
none | 좌우 어느 쪽에도 배치하지 않습니다. 기본값입니다. |
clear 속성
- clear 속성은 float 속성을 해제하는 속성입니다.
- float 속성을 사용해 웹의 요소를 왼쪽이나 오른쪽에 배치하면 그다음에 넣는 다른 요소에도 똑같은 속성이 전달됩니다.
- 따라서 float 속성이 더 이상 유용하지 않다고 알려주는 속성이 clear 속성입니다.
종류 | 설명 |
left | float: left를 해제합니다. |
right | float: right를 해제합니다. |
both | float: left와 float: right를 해제합니다. |
- float: left를 이용해 왼쪽으로 배치했다면 clear: left로 종료하고, float: right를 사용했다면 clear: right를 사용해 해제합니다.
- left인지 right인지와 상관없이 무조건 기본 상태로 되돌리고 싶다면 clear: both라고 지정합니다.
display: inline-block VS float: left 속성
- diplay: inline-block은 가로로 배치하면서도 기본 마진과 패딩을 가지고 있지만, float: left로 배치하면 가로로 배치될 때 요소에 기본 마진과 패딩이 없습니다.
- 그래서 필요하다면 요소마다 마진 패딩을 지정해야 합니다.
- 또한 float: left를 사용하면 clear 속성으로 플로팅을 해제해야 합니다.
웹 요소의 위치 지정하기
- position 속성을 사용하면 웹 문서에서 요소의 위치를 자유롭게 정할 수 있습니다.
left, right, top, bottom 속성
- left, right, top, bottom 속성은 웹 요소의 위치를 정하는 속성입니다.
- 웹 문서에서 요소를 원하는 곳에 갖다놓으려면 위치를 지정할 수 있어야 하는데 이때 사용하는 속성이 left, right, top, bottom입니다.
- 즉, position 속성으로 기준 위치를 정한 뒤 요소의 위치를 left, right, top, bottom 속성에서 선택하고 속성값을 지정하면 됩니다.
종류 | 설명 |
left | 기준 위치와 요소 사이에 왼쪽으로 얼마나 떨어져 있는지 지정합니다. |
right | 기준 위치와 요소 사이에 오른쪽으로 얼마나 떨어져 있는지 지정합니다. |
top | 기준 위치와 요소 사이에 위쪽으로 얼마나 떨어져 있는지 지정합니다. |
bottom | 기준 위치와 요소 사이에 아래쪽으로 얼마나 떨어져 있는지 지정합니다. |
position 속성
- position 속성을 사용하여 배치 방법을 지정할 수 있습니다.
- position 속성은 웹 문서 안의 요소를 자유자재로 배치해 주므로 HTML과 CSS를 이용해 웹 문서를 만들 때 중요합니다.
- 텍스트나 이미지 요소를 나란히 배치할 수도 있고 원하는 위치를 선택할 수 있습니다.
종류 | 설명 |
static | 문서의 흐름에 맞춰 배치합니다. 기본값입니다. |
relation | 위칫값을 지정할 수 있다는 점을 제외하면 static과 같습니다. |
absolute | relative 값을 사용한 상위 요소를 기준으로 위치를 지정해 배치합니다. |
fixed | 브라우저 창을 기준으로 위치를 지정해 배치합니다. |
- position 속성 중에서 absolute 값을 사용할 때는 주의해야 합니다.
- position: absolute라고 한 후 위칫값을 지정하면 요소 중에서 position: relative를 사용한 요소를 기준으로 위치를 결정합니다.
- 만약 부모 요소 중에 없으면 상위 요소를 찾아보고, 그래도 없다면 더 위의 요소를 찾아봅니다.
- 따라서 어떤 요소에 position: absolute를 사용하려면 부모 요소에는 position: relative라고 지정해야 원하는 대로 배치할 수 있습니다.
이번 시간에는 margin과 padding과 여러 요소들을 사용하여 CSS 박스 모델을 다루는 방법에 대해 알아보았습니다.
이렇게 CSS 박스 모델을 잘 다루어야 원하는 위치에 원하는 요소를 위치시킬 수 있습니다.
또한 반응형 웹 페이지를 만들 때도 자유롭게 요소들의 위치를 지정할 수 있습니다.
이번 시간에 알아본 내용들을 잘 숙지하여 자유롭게 웹페이지를 꾸밀 수 있길 바랍니다.
이번 포스팅은 여기까지입니다.
궁금하신 사항이나 문의하실 사항은 댓글로 남겨주시면 열심히 답글 달도록 노력하겠습니다.
끝까지 봐주셔서 감사합니다.😊
728x90
반응형
LIST
'HTML_CSS' 카테고리의 다른 글
CSS 고급 선택자에 대해 알아보자 (0) | 2025.01.24 |
---|---|
CSS 이미지와 그라데이션 효과로 배경을 꾸며보자 (0) | 2025.01.23 |
HTML/CSS 그룹 프로젝트 3, 4일차 - 다른 페이지와 연결하기 (0) | 2025.01.21 |
HTML/CSS 그룹 프로젝트 2일차 - 페이지 완성하기 (0) | 2025.01.20 |
HTML/CSS 그룹 프로젝트 1일차 - 페이지 윗부분 완성하기 (0) | 2025.01.17 |