그동안 반응형 웹페이지를 만들 때 사용해 온 유일한 탈출구는 브라우저 전체 창 가로폭(Viewport)을 감지하는 `@media` 쿼리였습니다. 하지만 모듈형 컴포넌트(Component) 중심의 현대 프론트 개발에서는 컴포넌트가 사이드바 영역에 얹혀 있든, 메인 보드 한가운데 얹혀 있든 자신을 품어준 부모 요소의 너비에 반응해 레이아웃을 스스로 조절해야 할 진정한 객체 지향 CSS가 요구됩니다. 차세대 표준인 CSS Container Queries(@container)의 해답을 제시합니다.
본문 상단 광고 슬롯 (구글 애드센스 반응형 디스플레이 광고)
1. 미디어 쿼리의 한계와 컨테이너 쿼리 등장 배경
컴포넌트 단위 재사용 시 뷰포트 크기는 무력합니다.
- 미디어 쿼리(Viewport-based): 모바일(360px), 태블릿(768px) 등 화면 전체 폭만 감지하므로, 화면 한쪽에 놓인 300px짜리 사이드바 안에 담긴 카드형 배너가 스스로 형태를 바꿀 수는 없습니다.
- 컨테이너 쿼리(Parent-based): 카드를 감싸는 직속 부모 박스의 실제 픽셀 크기만을 감지해 레이아웃 렌더링을 독자 연출합니다.
2. 실전 CSS 컨테이너 쿼리 코드 예제
부모 영역의 크기 변동에 발맞춰 수직 배열 카드에서 가로 정렬 카드형태로 자동 트랜스폼하는 예제입니다.
/* 1. 감시 대상이 될 조상/부모 컨테이너 지정 */
.card-wrapper {
/* 인라인(가로폭) 방향의 사이즈 변화를 감시하겠다고 등록 선언 */
container-type: inline-size;
container-name: productGrid; /* 컨테이너 스코프 명명 */
}
/* 2. 컴포넌트 기본 스타일 (부모 너비가 좁을 때: 수직 정렬 카드형) */
.product-card {
display: flex;
flex-direction: column;
gap: 12px;
background-color: var(--bg-sub);
}
/* 3. 부모 컨테이너 너비가 450px 이상 넓어질 때 자동 변경 */
@container productGrid (min-width: 450px) {
.product-card {
/* 수평 가로 정렬로 폼 전환하여 공간 활용 극대화 */
flex-direction: row;
align-items: center;
gap: 20px;
}
.product-card__desc {
font-size: 1.1em; /* 설명 폰트 크기 동반 상향 */
}
}
"컨테이너 쿼리는 전 세계 최신 메이저 브라우저(Chrome, Safari, Firefox 등) 표준 규격에 완전 편입되어 이제 상용 서비스에 적극적으로 기용할 수 있는 프로덕션용 기술입니다."
실전 라이브 데모 프리뷰 (Live Container Query Preview)
아래 박스는 가로폭 크기를 직접 조절해 볼 수 있는 크기 가변형 박스입니다. 박스 우측 하단의 조절 단추를 드래그하여 가로폭을 넓히거나 줄여보세요. 420px 임계점을 통과하는 순간 카드 컴포넌트의 레이아웃이 세로형에서 가로형으로 자동 가변 스위칭됩니다!
THUMBNAIL
컨테이너 자율 컴포넌트
이 카드는 전체 브라우저 폭이 아닌, 자신이 머무는 점선 박스 폭의 크기에 반응하여 레이아웃이 변신합니다.
* 점선 상자 우측 하단 모서리를 잡고 가로로 끌어 늘려보세요.
본문 중간 광고 슬롯 (구글 애드센스 인프리미엄 콘텐츠 광고)
3. 요약: 조립형 컴포넌트의 종착지
뷰포트 변화에만 종속되던 옛 구조에서 탈피하여, 각 UI 카드가 위치한 맥락적 너비를 스스로 인지하고 다이내믹하게 레이아웃을 스위칭하는 차세대 반응형 웹을 빌드해 보시기 바랍니다.
본문 하단 광고 슬롯 (구글 애드센스 일치하는 콘텐츠/디스플레이 광고)