CSS의 크기 단위는 요소의 크기(너비, 높이, 여백 등)를 지정할 때 사용되며, 절대 단위와 상대 단위로 나뉩니다.
절대 단위는 고정된 크기를 의미하며, 화면 크기나 해상도와 관계없이 일정한 크기를 가집니다.
상대 단위는 기준값에 따라 크기가 달라지며, 반응형 디자인에 유리합니다.
부모 요소를 기준으로 크기를 설정.
글꼴 크기를 기준으로 한 단위.
body { font-size: 16px; }
p { font-size: 2em; } /* 32px */
문서의 최상위 요소(html)의 font-size를 기준으로 함.
전역적인 글꼴 크기를 유지하면서 상대 크기를 설정할 때 유용.
html { font-size: 16px; }
h1 { font-size: 2rem; } /* 32px */
뷰포트의 너비를 기준으로 한 단위.
뷰포트의 높이를 기준으로 한 단위.
font-size: 10vmin; /* 작은 쪽의 10% */
CSS에서 레이아웃과 배치가 이루어지는 기준이 되는 박스입니다. 요소의 크기, 위치, 레이아웃 등은 모두 컨테이닝 블록을 기준으로 계산됩니다.
컨테이닝 블록은 요소의 CSS 속성 값과 요소의 위치에 따라 결정되며, 상위 요소 중 특정 조건을 만족하는 요소가 컨테이닝 블록이 됩니다.
컨테이닝 블록은 요소의 position 속성 값과 문맥에 따라 다음과 같이 결정됩니다.
.fixed {
position: fixed;
top: 10px;
left: 10px; /* 뷰포트를 기준으로 위치 설정 */
}
<div class="parent">
<div class="child"></div>
</div>
<style>
.parent {
position: relative; /* 컨테이닝 블록 역할 */
width: 200px;
height: 200px;
}
.child {
position: absolute;
top: 10px;
left: 10px; /* .parent를 기준으로 위치 */
}
</style>
<div class="parent">
<div class="child"></div>
</div>
<style>
.parent {
width: 200px;
height: 200px;
background: lightblue;
}
.child {
width: 100px;
height: 100px;
position: relative; /* 컨테이닝 블록은 부모 요소의 콘텐츠 박스 */
}
</style>
.sticky {
position: sticky;
top: 0; /* 상단에서 스크롤 시작 */
}
<div class="parent">
<div class="child"></div>
</div>
<style>
.parent {
transform: translate(50px, 50px); /* 컨테이닝 블록 생성 */
}
.child {
position: absolute;
top: 10px;
left: 10px; /* .parent를 기준으로 위치 */
}
</style>
컨테이닝 블록은 상위 요소의 콘텐츠 영역(Content Box)을 기준으로 합니다. box-sizing 속성에 따라 이 콘텐츠 영역은 아래와 같이 계산됩니다:
box-sizing: content-box (기본값)
콘텐츠 영역은 padding, border를 제외한 영역입니다.
box-sizing: border-box
콘텐츠 영역은 padding과 border를 포함한 전체 박스 영역입니다.
컨테이닝 블록은 플로우 컨텍스트(Flow Context)와 밀접하게 관련이 있습니다.
정적 플로우(Static Flow): 상위 요소의 콘텐츠 영역이 기준.
절대 위치(Absolute Positioning): 가장 가까운 position 설정 요소를 기준.
플렉스 컨테이너(Flex Container): 플렉스 컨테이너의 콘텐츠 박스가 기준.