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

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

작성자
SupeRails
발행일
2025년 11월 17일

핵심 요약

  • 1 CSS 컨테이너 쿼리를 사용하여 브라우저 너비가 아닌 부모 컨테이너의 너비를 기준으로 반응형 디자인의 브레이크포인트를 설정할 수 있습니다.
  • 2 동일한 UI 컴포넌트를 드로어, 모달, 전체 화면 등 다양한 컨테이너 크기에 맞춰 유연하게 레이아웃을 변경하는 실용적인 방법을 제시합니다.
  • 3 `@container` 속성과 Tailwind CSS의 `@lg:`와 같은 컨테이너 기반 브레이크포인트를 활용하여 컴포넌트 단위의 반응형 동작을 구현합니다.

도입

이 영상은 CSS 컨테이너 쿼리를 활용하여 더욱 유연하고 강력한 반응형 웹 디자인을 구축하는 방법을 소개합니다. 기존의 반응형 디자인은 주로 전체 브라우저 뷰포트의 너비를 기준으로 브레이크포인트를 설정했지만, 컨테이너 쿼리는 부모 컨테이너의 너비를 기반으로 레이아웃을 조정할 수 있게 함으로써 컴포넌트 수준의 반응형 동작을 가능하게 합니다. 이는 UI 컴포넌트가 다양한 컨텍스트(예: 드로어, 모달, 전체 화면)에서 일관된 반응성을 유지하도록 돕는 중요한 발전입니다.

본 영상은 실제 시나리오를 통해 CSS 컨테이너 쿼리의 강력함을 명확하게 보여줍니다.

1. 주문 목록 레이아웃 유연성 확보

  • 문제: 드로어(좁은 컨테이너)에서는 한 개의 열, 전체 화면(넓은 컨테이너)에서는 두 개의 열로 표시되는 반응형 동작이 필요합니다. 기존 브라우저 너비 기반 브레이크포인트로는 동일한 UI 컴포넌트의 재사용이 어려웠습니다. 브라우저가 넓으면 드로어 안에서도 원치 않게 두 개의 열로 표시될 수 있었습니다.
  • 해결: CSS 컨테이너 쿼리를 활용하여 브레이크포인트를 ‘부모 컨테이너’의 너비에 기반하도록 설정했습니다. 이를 통해 드로어의 너비에 따라 한 열, 전체 화면의 너비에 따라 두 열로 유연하게 레이아웃을 전환할 수 있게 되었습니다.

2. 조직 정보 입력 폼 반응형 구현

  • 기존 방식의 한계: 모달(좁은 컨테이너)에서는 한 개의 열, 새 탭(넓은 컨테이너)에서는 한 개의 행으로 표시되는 폼이 필요했습니다. lg:flex-row와 같은 브라우저 너비 기반 Tailwind CSS 클래스를 사용하면, 모달이 열려도 브라우저가 넓으면 모달 안의 내용도 행으로 표시되는 문제가 발생했습니다.
  • 컨테이너 쿼리 적용:1. 뷰의 해당 영역에 @container 속성을 추가하여 컨테이너 쿼리 대상으로 지정합니다. 2. 폼 내부의 레이아웃 클래스를 lg:flex-row 대신 @lg:flex-row로 변경하여, 브레이크포인트가 화면 너비가 아닌 가장 가까운 @container 부모 요소의 너비를 기준으로 적용되도록 합니다.
  • 결과: 전체 화면에서는 넓은 부모 컨테이너 덕분에 폼이 한 개의 행으로, 모달에서는 좁은 부모 컨테이너 덕분에 한 개의 열로 올바르게 표시됩니다.이처럼 CSS 컨테이너 쿼리는 재사용 가능한 UI 컴포넌트가 다양한 컨텍스트에서 예측 가능하고 원하는 대로 반응하도록 만드는 데 필수적인 도구입니다.

결론

CSS 컨테이너 쿼리는 현대 웹 개발에서 반응형 디자인을 한 단계 발전시키는 중요한 기술입니다. 기존의 브라우저 뷰포트 기반 브레이크포인트의 한계를 극복하고, 컴포넌트가 놓이는 부모 컨테이너의 크기에 따라 독립적으로 레이아웃을 조정할 수 있게 함으로써 개발자는 훨씬 더 유연하고 재사용 가능한 UI 컴포넌트를 구축할 수 있습니다. 이 기술을 통해 개발자는 드로어, 모달, 위젯 등 다양한 컨텍스트에서 일관된 사용자 경험을 제공하며, 복잡한 레이아웃 요구사항을 효율적으로 관리할 수 있게 됩니다.

댓글 0

로그인이 필요합니다

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

로그인 하러 가기

아직 댓글이 없습니다

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