[CSS] 박스모델

[CSS] 박스모델

CSS에서 박스라 함은 <div>, <p>, <h1>~<h6>등 문단을 이루는 요소를 말합니다. 문단을 구성하는 요소들은 크기와 여백을 지정할 수 있는데 이와 관련된 CSS 속성들을 박스모델이라고 합니다.

#01. CSS 관점에서의 HTML태그 분류

분류 설명 예시
Block Level 요소 문단을 구성하는 형태. 같은 태그를 연속해서 사용할 경우 문단을 구성하므로 줄바꿈되어 표시된다. <p>, <div>, <h1>~<h6>, <ol>, <ul>, <li>
Inline Level 요소 문장을 구성하는 형태. 같은 태그를 연속해서 사용할 경우 문장을 구성하기 때문에 줄 바꿈 없이 표시된다. <span>, <font>, <strong>, <b>, <u>, <i>, <address>
대체요소 이미지, 입력요소 등 텍스트가 아닌 다른 형태로 표시되는 요소로서 Inline Level에 속한다. <img>,<input>,<select>,<textarea>

박스라 함은 block-level요소를 의미하는 것으로 가장 대표적인 요소에는 <div>가 있다.

CSS의 박스모델은 박스의 크기를 구성하는데 영향을 주는 속성들을 말한다.

#02. 박스의 크기를 구성하는 기본 속성

속성 설명
width 내용 영역의 가로 폭 px단위, %단위
height 내용 영역의 세로 높이 px단위, %단위
border 박스의 테두리 굵기 종류 색상
padding 테두리와 내용영역 사이의 여백 여백 사이즈에 대한 px단위

1) 가로, 세로 크기

박스의 넓이 width는 특별히 명시하지 않을 경우 자신이 속한 부모를 가득 채운다.

박스의 높이 height는 특별히 명시하지 않을 경우 자신이 포함하고 있는 내용만큼만 형성된다. 내용이 없다면 높이도 0이다.

2) border 속성

border: 굵기 종류 색상;

종류

  • none : 투명
  • solid : 직선
  • dotted : 점선
  • dashed : 끊긴선

border값의 세분화

구분 종류
위치에 따라 border-top, border-left, border-bottom, border-right 굵기 종류 색상을 공백으로 구분
속성에 따라 border-width, border-color, border-style 굵기 종류 색상중 하나

3) padding

기술하는 값에 따른 구분

구분 설명 예시
하나의 값 상,하/좌,우 모두 같은 값이 부여된다. padding: 10px;
두 개의 값 첫 번째 값은 상,하를 의미. 두 번째 값은 좌,우를 의미한다. padding: 10px 20px;
네 개의 값 상단부터 시계방향으로 회전하면서 부여 padding: 10px 20px 30px 40px;

위치에 따른 속성 구분

아래의 속성들은 단 하나의 값만을 갖는다.

속성 설명
padding-left 왼쪽 여백
padding-right 오른쪽 여백
padding-top 상단 여백
padding-bottom 하단 여백

#03. 박스의 크기 구성

1) 박스의 크기는 관련 속성들의 총합으로 이루어 진다.

테두리와 여백은 내용영역(width,height)의 크기 바깥으로 형성된다.

구분 구성
가로넓이 border-left + padding-left + width + padding-right + border-right
세로높이 border-top + padding-top + height + padding-bottom + border-bottom

2) 중첩 관계에서의 박스 크기

  1. 자식요소의 크기 총 합은 부모 요소의 width, height를 벗어날 수 없다.
  2. 자식요소의 width, height를 %로 부여할 경우 부모의 width, height를 기준으로 한다.

그러므로 width나 height를 100%로 부여한 상태에서 border와 padding을 적용하면 부모 영역을 벗어나게 된다.

3) box-sizing 속성

설명
content-box border와 padding이 width/height 영역 밖에 설정된다.
border-box border와 padding이 width/height 영역 안에 설정된다. (권장)

웹 페이지 제작시 아래와 같이 모든 태그에 대해 설정하면 박스의 크기 계산에 편리하다.

* {
    box-sizing: border-box;
}

4) auto값의 사용

width 속성에 사용하는 경우.

부모 요소의 width에서 현재 자신의 padding, border 크기를 뺀 나머지를 자동으로 계산하여 갖는다. (실질적인 100% 처리 효과.)

height 속성에 사용하는 경우

자신이 포함하고 있는 내용만큼 높이를 구성한다.(박스의 기본특성)

5) 화면을 가득 채우는 박스 만들기

width, height는 부모요소를 기준으로 크기를 갖기 때문에 “박스 > body > html” 순으로 부모에게도 100% 크기를 부여해야 한다.

  1. <body>태그가 갖는 기본 여백을 제거한다.
     body { padding: 0; margin: 0; }
    
  2. 박스에게 width, height를 100%로 부여하기 위해서는 박스의 부모요소의 크기를 부여해야 기준으로 삼을 수 있다.
  3. 박스의 부모 요소는 <body>태그 이고 <body>의 부모 요소는 <html>이므로 이 두 요소에게 모두 크기를 부여한다.
     html, body { width: 100%; height: 100%; }
    

6) 박스의 가변 크기 지정

속성 설명
min-width 최소 넓이 지정. 내용이 없더라도 이 속성이 지정한 만큼 넓이가 보장된다.
max-width 최대 넓이 지정. 이 속성의 값 이상 커지지 않는다.
min-height 최소 높이 지정.
max-height 최대 높이 지정

7) 자신을 벗어나는 내용에 대한 처리 방법

overflow 속성

속성 설명
visible 기본값. 벗어나는 내용이 부모 요소를 벗어나도록 그대로 둔다.
scroll 벗어나는 내용에 대하여 스크롤 처리한다. 이 속성이 부여되면 부모 요소는 항상 스크롤바의 트랙을 표시한다.
hidden 벗어나는 내용에 대하여 화면에 표시되지 않도록 잘라낸다.
auto 내용이 벗어나지 않을 경우에는 박스의 기본 모양대로 표시되지만, 내용이 벗어날 경우에는 scroll처리 된다.
  • overflow속성은 x축, y축을 모두 처리한다.
  • 가로 혹은 세로 방향만 처리하고자 하는 경우 overflow-x, overflow-y 속성을 사용할 수 있다.
호쌤(이광호)'s Picture

About 호쌤(이광호)

메가스터디IT아카데미에서 Java, Spring, Python, Frontend 등을 강의하는 IT 전문 강사이자 프리렌서 개발자 입니다.
https://www.youtube.com/@hossam-codingclub

Seoul, Korea http://www.hossam.kr