모든 HTML 요소는 Box 형태의 영역을 가지고 있다.
이 Box는 콘텐츠(Content), 패딩(Padding), 테두리(Border), 마진(Margin)으로 구성된다.
브라우저는 박스 모델의 크기(dimension)와 프로퍼티(색, 배경, 모양 등), 위치를 근거로 하여 렌더링을 실행한다.
웹디자인은 콘텐츠를 담은 박스 모델을 정의하고 CSS 프로퍼티를 통해 스타일(배경, 폰트와 텍스트 등)과 위치 및 정렬을 지정하는 것이라고 할 수 있다.
Box 모델을 구성하는 콘텐츠(Content), 패딩(Padding), 테두리(Border), 마진(Margin)에 대한 설명은 아래와 같다.
width와 height 프로퍼티는 요소의 너비와 높이를 지정하기 위해 사용된다. 이때 지정되는 요소의 너비와 높이는 콘텐츠 영역을 대상으로 한다.
box-sizing 프로퍼티에 기본값인 content-box가 적용되었기 때문이다. box-sizing 프로퍼티에 border-box를 적용하면 콘텐츠 영역, padding, border가 포함된 영역을 width / height 프로퍼티의 대상으로 지정할 수 있다.
만일 width와 height로 지정한 콘텐츠 영역보다 실제 콘텐츠가 크면 콘텐츠 영역을 넘치게 된다는 것에 유의하여야 한다.
overflow: hidden;을 지정하면 넘친 콘텐츠를 감출 수 있다.
기본적으로 width와 height 프로퍼티는 콘텐츠 영역을 대상으로 요소의 너비와 높이를 지정하므로 박스 전체 크기는 다음과 같이 계산할 수 있다.
전체 너비
width + left padding + right padding + left border + right border + left margin + right margin
전체 높이
height + top padding + bottom padding + bottom border + top border + top margin + bottom margin
width와 height 프로퍼티의 초기값은 auto로 이것은 브라우저가 상황에 따라 적당한 width와 height 값을 계산할 것을 의미한다.
예를 들어 block 요소의 경우, width는 부모 요소의 100%, height는 콘텐츠의 높이(+약간의 여분)가 지정된다.
명시적으로 width와 height를 지정하기 위해서는 px, % 등의 크기 단위를 사용한다.
margin / padding 프로퍼티는 content의 4개 방향(top, right, left, bottom)에 대하여 지정이 가능하다.
top, right, bottom. left 4방향의 프로퍼티를 각각 지정하지 않고 margin, padding 1개의 프로퍼티만으로 4방향의 프로퍼티를 한번에 지정할 수 있다.
4개의 값을 지정할 때
margin: 10px 20px 30px 40px;
/* margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px; */
3개의 값을 지정할 때
margin: 10px 20px 30px;
/* margin-top: 10px;
margin-right: 20px; margin-left: 20px;
margin-bottom: 30px; */
2개의 값을 지정할 때
margin: 10px 20px;
/* margin-top: 10px; margin-bottom: 10px;
margin-right: 20px; margin-left: 20px; */
1개의 값을 지정할 때
margin: 10px;
/* margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px */
margin 프로퍼티에 auto 키워드를 설정하면 해당 요소를 브라우저 중앙에 위치 시킬 수 있다.
max-width
프로퍼티는 요소의 최대 넓이를 설정한다. width 속성의 사용값이 자신의 값보다 커지는걸 방지한다.
border-style
프로퍼티는 테두리 선의 스타일을 지정한다.
프로퍼티 값의 갯수에 따라 4개 방향(top, right, bottom, left)에 대하여 지정이 가능하다.
border-width
프로퍼티는 테두리의 두께를 지정하고 border-color
프로퍼티는 테두리의 색상을 지정한다. 프로퍼티 값의 갯수에 따라 4개 방향(top, right, bottom, left)에 대하여 지정이 가능하다.
border-width 프로퍼티와 border-color 프로퍼티는 border-style과 함께 사용하지 않으면 적용되지 않는다.
border-radius
프로퍼티는 테두리 모서리를 둥글게 표현하도록 지정한다. 프로퍼티 값은 길이를 나타내는 단위(px, em 등)와 %를 사용한다.
각각의 모서리에 border-radius 프로퍼티를 개별적으로 지정할 수도 있고 4개의 모서리를 shorthand로 한 번에 지정할 수도 있다.
하나 혹은 두 개의 반지름을 설정하여 각각의 모서리 굴곡을 설정할 수 있기 때문에 원 혹은 타원의 모양으로 정의가 가능하다.
border-radius: 5px;
위 코드는 아래의 shorthand이다.
border-top-left-radius: 5px;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px;
border
프로퍼티는 border-width
, border-style
, border-color
를 한번에 설정하기 위한 shorthand 프로퍼티이다.
/* border: border-width border-style border-color; (순서는 상관없다.) */
p { border: 5px solid black; }
box-sizing
프로퍼티는 width, height 프로퍼티의 대상 영역을 변경할 수 있다.
box-sizing 프로퍼티의 기본값은 content-box이다. 이는 width, height 프로퍼티의 대상 영역이 content 영역을 의미한다.
box-sizing 프로퍼티의 값을 border-box로 지정하면 마진을 제외한 박스 모델 전체를 width, height 프로퍼티의 대상 영역으로 지정할 수 있어서 CSS Layout을 직관적으로 사용할 수 있게 한다.