Get StartedFoundationsComponentsPatternsRulesDevelopAI & ToolsUpdates

Side Panel

화면 좌측 또는 우측 가장자리에서 슬라이드되어 나타나, 현재 맥락을 유지한 채 상세 정보나 부수적인 작업을 제공하는 패널이에요.

Side Panel은 현재 화면의 맥락을 벗어나지 않고 상세 정보를 확인하거나 부수적인 작업을 할 때 사용해요. 데스크탑의 상세 조회·설정 변경·보조 작업 영역, 모바일의 사이드 내비게이션 메뉴가 대표적인 사용처예요. 화면 하단에서 올라오는 모달이 필요하다면 Bottom Sheet를 사용해요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/side-panel.json

Anatomy

Side Panel은 Header, Body, Footer와 배경을 덮는 Backdrop으로 구성돼요.

  • Header: 제목(Title)과 부연 설명(Description), 닫기 버튼(Close Button)이 들어가요. Description과 Close Button은 선택 요소예요.
  • Body: 콘텐츠 영역이에요. 스크롤되면 Header 아래에 구분선이 생기고, 하단에는 Scroll Fog가 표시돼요.
  • Footer (Optional): 주 작업 버튼과 보조 버튼이 배치돼요.
  • Backdrop: 배경을 덮는 오버레이예요. Type에 따라 배경 상호작용을 막거나 허용해요.

Properties

Direction

Side Panel이 나타나는 방향을 설정해요.

  • Right (Default): 데스크탑 표준이에요. 상세 조회, 스레드, 설정 변경 등 범용적으로 사용해요.
  • Left: 모바일 사이드바, 글로벌 내비게이션 메뉴(GNB)에 사용해요.

Size

Side Panel의 가로 폭을 설정해요. 높이는 방향과 관계없이 항상 화면 전체를 차지해요.

  • Small (480px): 앱 화면 노출(모바일 뷰), 단순 상세 조회에 사용해요.
  • Medium (720px): 2열 입력 폼, 리스트와 상세를 나란히 대조하는 화면에 사용해요.
  • Large (960px): 복잡한 대시보드, 에디터 도구에 사용해요.
  • Fluid: 뷰포트 대비 일정한 비율이 필요하면 프리셋 대신 SidePanelContent 의 className 으로 width·max-width 를 직접 지정해요. 이때 max-width 지정을 권장해요.

Type

배경 상호작용을 막는 Modal Type과 허용하는 Persistent Type을 제공해요. 기본값은 Modal Type이에요.

Modal Type (Standard)

  • Backdrop이 배경을 덮어 현재 작업에만 집중하게 해요.
  • 배경 클릭(Light Dismiss), Escape 키, 닫기 버튼으로 닫을 수 있어요. dismissible={false} 를 지정하면 Escape 키와 배경 클릭으로는 닫히지 않아요.

Persistent Type (Non-modal)

  • modal={false} 로 지정해요. Backdrop 없이 배경과 동시에 상호작용할 수 있어요.
  • 닫기 버튼이나 트리거 버튼을 다시 눌러 닫아요. 이때는 open 으로 상태를 직접 제어해요.

Show Close Button

Header의 닫기 버튼 표시 여부를 설정해요. 기본으로 표시돼요.

SidePanelFooter 는 flex 레이아웃만 제공해요. 좁은 패널에서는 버튼을 세로로 쌓고, 넓은 패널에서는 가로로 정렬해요.

Guidelines

Responsive Behavior

Side Panel은 화면 크기에 맞춰 너비가 자동으로 조정돼요.

  • md 이상 (768px+): Width 토큰값을 그대로 사용해요 (Small 480px · Medium 720px · Large 960px).
  • md 미만 (~767px): 화면 너비의 80%로 표시해 Backdrop 영역 20%를 확보해요.
  • Persistent Type: md 미만에서는 Modal Type으로 사용해요.
  • Safe Area: Header에 상단 Safe Area Inset을 적용하고, 하단 Safe Area Inset은 Footer가 아닌 Content에 적용해요.

모바일에서 Side Panel 사용하기

Side Panel은 모바일에서 내비게이션 메뉴를 잠깐 노출할 때 사용해요. 데스크탑에서 상시 노출되던 내비게이션이 공간 제약으로 숨겨질 때, Side Panel이 그 콘텐츠를 보여주는 역할을 해요.

데스크탑에서 Side Navigation과 Header 메뉴가 분리되어 있더라도, 모바일에서는 하나의 Side Panel로 통합해요. 단일한 내비게이션 진입점을 제공해 인지 부담을 줄이고 일관된 경험을 보장해요.

  • 데스크탑 (md 이상): Side Navigation은 상시 노출하고, Header 메뉴는 Header 안에 노출해요.
  • 모바일 (md 미만): 두 영역의 콘텐츠를 하나의 Side Panel로 통합하고, Header의 햄버거 버튼 하나로 진입해요.

콘텐츠 구성 원칙

  • Side Navigation 콘텐츠를 상단에 배치해요. 앱 전체 내비게이션이 우선이에요.
  • Header 메뉴 콘텐츠를 그 아래에 배치해요.
  • 두 영역은 Divider로 시각적으로 구분해요. 한 영역만 있으면 Divider 없이 해당 콘텐츠만 보여줘요.

Responsive Side Panel

데스크탑에서 Side Panel을 사용할 때는 md 이상에서는 Side Panel, md 미만에서는 Bottom Sheet로 전환하는 것을 권장해요. Header·Body·Footer 구조는 두 컴포넌트에서 동일하게 유지해요.

다만 아래 경우에는 Side Panel을 직접 사용해요.

  • 모바일 사이드 메뉴·내비게이션 (햄버거 메뉴, 프로필 진입 메뉴 등): md 미만에서도 부분 너비 패널로 표시되어야 내비게이션 맥락이 유지돼요.
  • Persistent Type이 필요한 경우: md 이상 전용 패널로 사용해요.

Elevation

Side Panel은 메인 화면보다 위, Dialog보다 아래 계층을 차지해요. 그래서 Side Panel이 열린 상태에서 확인이나 경고를 위한 Alert Dialog가 그 위에 겹쳐 나타날 수 있어요.

상품 정보 수정저장
Do· 핵심 액션은 Footer에

주 작업 버튼은 Footer에 배치해 항상 같은 위치에서 찾을 수 있게 해요.

Don't· Side Panel 위에 Side Panel

Side Panel을 여러 겹 중첩해서 열지 않아요. 확인이 필요하면 Alert Dialog를 사용해요.

키보드 인터랙션

키동작
Escapedismissible 이 true 일 때 Side Panel을 닫아요.
Tab / Shift + Tabmodal 이 true 일 때 패널 안의 요소들 사이로 포커스를 순환해요.

Props

SidePanelRoot

Prop

Type

SidePanelContent

Prop

Type

SidePanelTrigger · SidePanelClose

Prop

Type

On this page