
Kim JeongHyeonFrontend Focused Fullstack Developer
Container Queries의 기본 개념부터 Container Units, 실전 패턴까지 정리합니다.
미디어 쿼리는 뷰포트 기준입니다. 하지만 컴포넌트는 어디에 들어갈지 모릅니다. Container Queries는 부모 컨테이너 크기에 따라 스타일을 변경합니다.
/* 1. 컨테이너 선언 */
.card-wrapper {
container-type: inline-size;
container-name: card;
}
/* 2. 컨테이너 크기에 따른 스타일 */
@container card (min-width: 400px) {
.card {
display: grid;
grid-template-columns: 200px 1fr;
}
}
@container card (max-width: 399px) {
.card {
display: flex;
flex-direction: column;
}
}/* 미디어 쿼리: 뷰포트가 768px 이하일 때 */
@media (max-width: 768px) {
.card { flex-direction: column; }
}
/* 컨테이너 쿼리: .card의 부모가 400px 이하일 때 */
@container (max-width: 400px) {
.card { flex-direction: column; }
}사이드바에 같은 카드를 넣으면 미디어 쿼리는 깨지지만, 컨테이너 쿼리는 자동으로 적응합니다.
| 값 | 설명 |
|---|---|
inline-size |
가로 방향만 쿼리 (가장 일반적) |
size |
가로 + 세로 모두 쿼리 |
normal |
컨테이너 아님 (기본값) |
컨테이너 크기에 비례하는 단위도 사용할 수 있습니다:
.card-title {
font-size: clamp(1rem, 3cqi, 1.5rem); /* cqi = container query inline */
}| 단위 | 설명 |
|---|---|
cqw |
컨테이너 너비의 1% |
cqh |
컨테이너 높이의 1% |
cqi |
inline axis의 1% |
cqb |
block axis의 1% |
2024년 기준 모든 주요 브라우저에서 지원됩니다. Safari 16+, Chrome 105+, Firefox 110+.