박스 모델
박스의 구성
- content
- padding
- border
- margin
box-sizing 속성
- box-sizing: content-box
- 패딩과 보더를 뺀 순수 컨텐트 박스의 폭과 높이를 지정
- box-sizing: border-box
- 패딩과 보더를 포함하고 마진만 제외한 전체 박스의 폭과 높이를 지정

항상 border-box 값을 사용하게 설정하는 법
*, ::before, ::after { box-sizing: border-box; }
마진
인라인 레벨
- 인라인 레벨 요소는 위/아래 마진이 적용 안됨
- 위/아래 마진을 적용하려면 inline-block 레벨로 지정. 이때 주변의 인라인 요소에도 같이 적용됨
음수 마진
- 음수 마진을 주면 부모요소 바깥 또는 주변 요소와 겹치면서 튀어나올 수 있음
- 어떤 식으로 튀어나오는가는 경우에 따라 다름
- 왼쪽 가로 음수 마진
- 자기 자신을 왼쪽으로 이동
- 왼쪽의 요소와 겹칠 수 있음
- 오른쪽 가로 음수 마진
- 인라인 레벨 요소인 경우
- 자기 자신이 아닌 다음(오른쪽) 요소를 왼쪽으로 끌어올림
- 오른쪽의 요소와 겹칠 수 있음
- 블럭 레벨 요소인 경우
- 자기 자신의 오른쪽 크기를 더 크게 만듬
- 왼쪽, 오른쪽 마진을 모두 음수로 만들면 양쪽으로 튀어나옴
- 인라인 레벨 요소인 경우
- 위쪽 세로 음수 마진
- 자기 자신을 위쪽으로 이동
- 위쪽의 요소와 겹칠 수 있음
- 아래쪽 세로 음수 마진
- 자기 자신이 아닌 다음(아래쪽) 요소를 위쪽으로 끌어올림
마진 통합
- 위/아래 마진이 붙어있는 경우에는 (아래 마진 값 + 위 마진 값) 이런 식으로 합이 적용되는 것이 아님
- 통합되어 둘 중 더 큰 값만 적용
- 위/아래 마진은 절대적인 마진이 아님
- 다음 요소와 최소한 이 정도 떨어져 있어야 한다는 표시임
- 붙어 있는 형제 요소 뿐 아니라 부모 자식간에도 적용
- 부모가 위 패딩이 0이면 첫번째 자식의 위 마진과 부모의 위 마진이 통합
- 자식의 위 마진이 부모의 위 마진처럼 작동
- 부모-자식간 위 마진 통합을 막는 방법
- 부모 overflow: auto
- 부모 border: 1px solid;
배경색
- 마진에는 색상을 지정할 수 없고 항상 투명
- 따라서 마진 영역의 배경색은 항상 부모의 배경색
- 보더 및 패딩 내부에는 색상을 지정할 수 있으며 별도로 지정하지 않으면 디폴트는 투명
- 따라서 보더 및 패딩 내부의 색상은 별도로 지정하지 않으면 부모의 배경색
- 부모와 첫번째 자식의 위 마진이 통합되는 경우 해당 마진은 부모의 마진으로 취급
- 따라서 첫번째 자식 요소 위쪽의 배경색은 부모의 배경색이 아닌 부모의 부모의 배경색
- 따라서 첫번째 자식 요소의 위 마진은 0으로 하는 것이 안전함
- 첫번째 자식 요소의 배경색도 부모에 의존하지 않고 독자 배경색을 쓰는 것이 안전함