CSS 컨테이너 쿼리를 활용한 유연한 반응형 디자인 구현

Ruby on Rails #241 CSS Container queries. Breakpoints based on parent container width, not browser

작성자
Rails Upgrade News
발행일
2025년 11월 17일

핵심 요약

  • 1 CSS 컨테이너 쿼리를 사용하면 브라우저 너비가 아닌 부모 컨테이너의 너비를 기준으로 반응형 브레이크포인트를 설정할 수 있습니다.
  • 2 동일한 UI 컴포넌트가 드로어(drawer)나 모달(modal)처럼 부모 요소의 크기가 제한적인 경우에도 컨테이너 너비에 따라 적절히 레이아웃을 변경하도록 구현할 수 있습니다.
  • 3 부모 요소에 `@container` 속성을 적용하고, `@lg:flex-row`와 같이 컨테이너 기반의 브레이크포인트를 사용함으로써 유연하고 재사용 가능한 반응형 컴포넌트 개발이 가능합니다.

도입

이 비디오는 CSS 컨테이너 쿼리(Container Queries)를 활용하여 더욱 유연하고 강력한 반응형 웹 디자인을 구축하는 방법을 소개합니다. 기존의 미디어 쿼리가 전체 브라우저 뷰포트의 너비를 기준으로 브레이크포인트를 설정하는 반면, 컨테이너 쿼리는 특정 부모 컨테이너의 너비를 기반으로 스타일을 적용할 수 있게 합니다. 이는 UI 컴포넌트가 독립적으로 반응형 동작을 수행하도록 하여, 재사용성을 높이고 복잡한 레이아웃에서도 예측 가능한 반응성을 제공하는 데 핵심적인 역할을 합니다.

CSS 컨테이너 쿼리는 웹 개발자가 컴포넌트 기반의 반응형 디자인을 구현하는 데 있어 중요한 진전을 제공합니다.

컨테이너 쿼리의 필요성

  • 기존 미디어 쿼리의 한계: 전통적인 미디어 쿼리는 브라우저 전체 너비에 따라 스타일을 변경합니다. 이로 인해, 동일한 컴포넌트가 드로어(drawer)나 모달(modal)과 같이 좁은 컨테이너 내에 있을 때와 전체 화면에 있을 때 다른 레이아웃을 가져야 하는 경우, CSS만으로는 효과적인 대응이 어려웠습니다.

  • 재사용성 문제: 브라우저 너비 기반의 브레이크포인트는 컴포넌트의 재사용성을 저해했습니다. 좁은 컨테이너와 넓은 컨테이너에 동일한 컴포넌트를 사용하려면 별도의 스타일 규칙을 적용하거나 복잡한 로직이 필요했습니다.

컨테이너 쿼리 적용 예시

비디오에서는 주문 목록과 상세 보기를 통해 컨테이너 쿼리의 강력함을 시연합니다.

  • 시나리오:
    • 개별 주문을 클릭하면 드로어 형태로 열리며, 이때 내용은 단일 컬럼으로 표시됩니다.
    • 동일한 주문을 전체 화면으로 열면, 내용은 두 개의 컬럼으로 표시됩니다.
    • 이때, 두 경우 모두 동일한 부분(partial) 템플릿을 재사용합니다.

구현 방법

  1. 컨테이너 정의: 반응형 동작을 제어할 부모 요소에 @container 속성을 추가하여 해당 요소를 컨테이너로 정의합니다.
    • 예시: application.html.erbyield 부분에서 렌더링되는 new 뷰에 @container를 적용합니다.
  2. 컨테이너 기반 브레이크포인트 사용: 기존의 lg:flex-row와 같은 브라우저 너비 기반의 Tailwind CSS 클래스 대신, @lg:flex-row와 같이 @ 접두사를 사용하여 컨테이너 기반의 브레이크포인트를 지정합니다.
    • flex flex-column (기본적으로 컬럼 레이아웃)
    • @lg:flex-row (컨테이너의 너비가 lg 브레이크포인트 이상일 때 행 레이아웃)

결과

  • 전체 화면: 화면 너비가 lg 브레이크포인트보다 넓으면 내용이 행(row)으로 표시되고, 좁아지면 컬럼(column)으로 변경됩니다.

  • 모달/드로어: 모달이나 드로어와 같이 좁은 컨테이너 내에서 열릴 경우, 해당 컨테이너의 너비가 lg 브레이크포인트보다 좁기 때문에 내용이 자동으로 컬럼(column)으로 표시됩니다. 이러한 방식으로, 컴포넌트는 자신이 속한 컨테이너의 크기에 따라 독립적으로 반응형 레이아웃을 조정할 수 있게 되어, 개발자는 훨씬 유연하고 재사용 가능한 UI를 구축할 수 있습니다.

결론

CSS 컨테이너 쿼리는 현대 웹 개발에서 반응형 디자인의 패러다임을 변화시키는 중요한 기술입니다. 브라우저 뷰포트가 아닌 부모 컨테이너의 너비를 기준으로 브레이크포인트를 설정함으로써, 개발자는 드로어나 모달과 같은 다양한 컨텍스트에서 동일한 UI 컴포넌트가 올바르게 작동하도록 쉽게 구현할 수 있습니다. 이는 코드의 재사용성을 높이고 유지보수를 간소화하며, 더욱 견고하고 유연한 웹 애플리케이션을 구축하는 데 기여합니다. 특히 Rails와 같은 프레임워크 환경에서 컴포넌트 기반 개발을 지향할 때, 컨테이너 쿼리는 강력한 도구로 활용될 수 있습니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!