From 6d5ca2f23a1f1464c781c3a78a769988a4e4220a Mon Sep 17 00:00:00 2001 From: johngreen Date: Wed, 13 May 2026 08:43:13 +0900 Subject: [PATCH] =?UTF-8?q?refactor(=EB=B0=98=EC=9D=91=ED=98=95):=20Respon?= =?UTF-8?q?siveDataView=20=EB=A5=BC=20container=20query=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=EC=9C=BC=EB=A1=9C=20=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존: viewport 기준 (lg:hidden, sm:grid-cols-2) — 사이드바 펼친 상태에서 콘텐츠 영역의 실제 width 와 무관하게 동작 → 좁은 영역에 2열 카드가 들어가 카드가 잘려보이는 문제 신: @container 기반 — 컴포넌트가 자기 부모 컨테이너 width 에 반응 - 컨테이너 < 32rem (512px): 카드 1열 - 32~48rem (512~768px): 카드 2열 - ≥ 48rem (768px): 데스크톱 테이블 Tailwind v4 의 first-class container query 활용 (별도 플러그인 불필요). 데스크톱 테이블의 viewport 기준 max-height 스크롤은 유지. 근거: 2026 베스트프랙티스 — page layout=media query, 컴포넌트=container query (LogRocket / NN-Group / Tailwind v4 가이드). --- .../components/common/ResponsiveDataView.tsx | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/frontend/components/common/ResponsiveDataView.tsx b/frontend/components/common/ResponsiveDataView.tsx index 6732fec8..72f88092 100644 --- a/frontend/components/common/ResponsiveDataView.tsx +++ b/frontend/components/common/ResponsiveDataView.tsx @@ -110,11 +110,11 @@ export function ResponsiveDataView({ // --- 로딩 스켈레톤 --- if (isLoading) { return ( - <> +
{/* 데스크톱 테이블 스켈레톤 */}
@@ -162,10 +162,11 @@ export function ResponsiveDataView({
- {/* 모바일 카드 스켈레톤 */} + {/* 모바일 카드 스켈레톤 — container query 기반: + 컨테이너 < 32rem(512px) = 1열, 32~48rem = 2열, ≥ 48rem(768px) = 테이블 */}
({
))}
- + ); } @@ -213,12 +214,14 @@ export function ResponsiveDataView({ } // --- 실제 데이터 렌더링 --- + // 부모 wrapper 가 @container — 자식들은 viewport 가 아닌 자기 컨테이너 width 기준으로 분기. + // 사이드바 펼친 상태에서도 콘텐츠 영역 실제 width 에 맞게 자연스럽게 테이블↔카드 전환. return ( - <> - {/* 데스크톱 테이블 (lg 이상) */} +
+ {/* 데스크톱 테이블 (컨테이너 ≥ 48rem / 768px) */}
({
- {/* 모바일 카드 (lg 미만) */} + {/* 모바일 카드 (컨테이너 < 48rem) — < 32rem 1열, 32~48rem 2열 */}
({ ); })}
- +
); }