CSS에 포함되는 모든 Element의 외형은 box이다.
Box가 block으로 정의되면 다음과 같은 방식으로 동작한다.
display 타입을 inline으로 변경하지 않는 한 heading과 p 같은 요소들은 모두 기본값으로 display type을 block을 사용한다.
a, span, em, strong -> inline by default
box type은 display 속성으로 정의된다.
flex와 같은 display 값을 사용하여 내부 display type을 변경할 수 있다.
어떤 element에 display: flex; 값을 적용하면 외부 display type은 block이지만 내부 display type은 flex로 변경된다.
이 박스의 자식은 flex 항목이 된다.
Block 및 Inline layout이 웹 상에서 사물이 행동하는 기본값이다.
-> 이를 normal flow라고 한다.
별다른 지시사항이 없으면 박스는 block or inline으로 배치되기 때문이다.
display: inline-flex로 설정된 element는 flex 항목 주변에 inline box를 생성한다.
box에 width와 height를 부여하면 content box의 width와 height가 지정된다.
그런 다음에 padding과 border는 box의 width와 height에 추가되어 박스가 점유하는 전체 크기가 정해진다.
이 모델을 사용하면 width는 page에서 표현되는 box width이므로 width에서 padding과 border width를 뺀 width이다.
기본값으로 박스 모델은 표준 박스 모델을 사용한다.
대체 박스 모델을 활성화하려면 box-sizing: border-box를 설정하면 된다.
모든 element에 대체 box model 적용
html {
box-sizing: border-box;
}
/* 다른 모든 element들도 상속하도록 */
*,
*::before,
*::after {
box-sizing: inherit;
}
box 주변에 보이지 않는 공간
양수값 또는 음수값 가능
한쪽 측면에 음수값을 지정하면 다른 element와 공백이 겹칠 수 있다.
표준 박스 모델을 사용하든, 대체 박스 모델을 사용하든 margin은 항상 box width를 계산한 후에 추가된다.
margin이 서로 맞닿은 두 element가 있으면 해당 margin은 합쳐져 하나의 margin이 된다.
그중 가장 큰 margin의 크기가 된다.
box의 padding과 margin 사이에 그려진다.
표준 박스 모델을 사용하는 경우 테두리의 크기가 박스의 width과 height에 추가된다.
대체 박스 모델을 사용하고 있는 경우, border의 크기는 사용 가능한 width와 height의 일부를 점유함으로 content 박스가 더 작아지게 됩니다.
border 일방 면만 적용
border과 content 사이 영역에 위치
음수의 크기를 가질 수 없다.
element에 적용된 background는 모두 padding 뒤에 적용된다.
padding의 전형적인 용도 -> border에서 content를 밀어냄
element가 새 줄로 넘어가는 행갈이를 원하지 않지만, width와 heigth가 존중되고 다른 element들과 겹침 현상을 피하고 싶을 때 유용하다.
display: inline-block
span에 display: inline-block 적용