ComponentsP3 본문

Drawer

화면 가장자리에서 슬라이드 인하는 오버레이 패널(Modal 변형) — 포커스 트랩 · Escape/배경 닫기 · 포커스 복원 · 스크롤 잠금을 내장한 제어 컴포넌트입니다.

마지막 업데이트 2026-06-11

한눈에#

화면 가장자리에서 슬라이드 인하는 오버레이 패널(Modal 변형)입니다 — 본문 맥락을 유지한 채 측면에서 보조 작업 패널을 엽니다.

필터상태·기간·담당자로 결과를 좁힙니다.
  • 가장자리 슬라이드 패널
  • right·left·bottom
  • 포커스 트랩·Escape 닫기
  • Modal과 동일 계약
열린 상태 재현 — 우측에서 보조 작업 패널이 슬라이드 인(실제 동작은 아래에서)

트리거를 눌러 슬라이드 인·포커스 트랩·Escape를 직접 확인하세요:

사용 시점#

본문 맥락을 유지한 채 고정 가장자리에서 측면 보조 패널을 열면 Drawer — 중앙 결정·적응 표면·하단 표면은 다른 컴포넌트입니다.

쓴다

필터·설정·상세 편집처럼 본문 맥락 유지하며 고정 가장자리(좌·우·하단)에서 여는 보조 패널

대신 Modal

흐름을 중단시키는 중앙 결정 다이얼로그

대신 SideSheet

compact↔expanded 자동 적응 표면이 필요할 때

대신 BottomSheet

모바일에서 하단으로 올라오는 표면

플레이그라운드#

컨트롤로 props를 조작하면 미리보기와 코드가 실시간 갱신됩니다.

테마 미리보기
import { Drawer, Button } from '@wds/ui-web';

<Drawer
  open={open}
  onClose={() => setOpen(false)}
  title="필터"
>
  상태·담당자·기간으로 필터링합니다.
</Drawer>

변형#

side — right(기본) · left · bottom 3방향 슬라이드

배경 클릭 닫기는 기본 동작이며, 명시적 선택이 필요한 흐름은 closeOnBackdrop={false}로 끕니다(Escape와 닫기 버튼은 항상 동작).

closeOnBackdrop=false — 배경 클릭 무시

크기#

좌우 패널 폭은 min(25rem, 100dvw - space.12) 단일 — 좁은 화면에서 자동 축소됩니다. bottom은 가로 전체 폭에 최대 높이 100dvh - space.16.

상태#

제어 컴포넌트입니다 — 열림/닫힘은 소비자의 open prop이 결정하고, 닫힘 요청(Escape·배경·닫기 버튼)은 전부 onClose 콜백으로 전달됩니다. 열림/닫힘 계약은 Modal과 동일합니다.

Props#

Prop타입기본값설명
openboolean표시 여부 — 제어 prop
onClose() => voidEscape·배경·닫기 버튼의 닫힘 요청 콜백
titleReactNode제목 — aria-labelledby 대상이라 필수
side'right' | 'left' | 'bottom''right'슬라이드 인 방향
footerReactNode하단 행동 영역
closeOnBackdropbooleantrue배경 클릭 닫기 허용
closeLabelstring'닫기'닫기 버튼 aria-label

접근성#

계약구현
역할role="dialog" + aria-modal="true"
이름titlearia-labelledby로 연결
포커스 진입열리면 패널로 이동
포커스 트랩Tab/Shift+Tab이 내부에서 순환
포커스 복원닫히면 이전 포커스 요소로 복귀
키보드 닫기Escape — 포커스 위치 무관(document 캡처)
배경 닫기오버레이 mousedown 기준 — 패널에서 시작한 드래그는 무시
스크롤열림 동안 배경 body 스크롤 잠금
모션슬라이드 인은 prefers-reduced-motion 존중

토큰#

component 토큰 없이 semantic을 직접 소비합니다(신설 기준 §4 미충족 — Modal과 동일 결정).

속성토큰
오버레이color.overlay · z.modal
패널 배경color.surface-raised
라운드/그림자radius.xl(진입 모서리) · shadow.xl
제목font.size-h3 · font.weight-semibold
닫기 버튼hover color.surface-hover · pressed color.surface-pressed
슬라이드 모션duration.fast/normal · 패널 ease.emphasized-decelerate · 스크림 ease.out