ComponentsP3 본문

Splitter

2패널 드래그 리사이즈 — APG window splitter 패턴. 구분선이 role=separator + aria-valuenow(0~100)를 보고하고 키보드 화살표·Home/End·더블클릭 리셋을 지원합니다. 비율(%) 비제어 (DK 사양 승격).

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

한눈에#

2패널을 드래그로 리사이즈하는 분할 컨테이너입니다 — 구분선이 role="separator" + aria-valuenow(0~100)를 보고하고 키보드·더블클릭 리셋을 지원합니다.

좌 패널

minSize 아래로는 좁아지지 않습니다.

우 패널

구분선을 끌어 비율을 조절합니다.

  • 2패널 드래그 리사이즈
  • APG window splitter
  • role=separator aria-valuenow
  • 키보드·더블클릭 리셋

구분선을 드래그하거나 포커스 후 화살표로 비율 조절 — 더블클릭이면 50% 리셋

정확히 2개의 자식을 받습니다 — 첫 자식이 비율(flex-basis %)을 차지하고 두 번째 자식이 나머지를 채웁니다. 구분선 핸들 점은 hover/active/focus에서 color.primary로 강조됩니다.

사용 시점#

사용자가 드래그로 두 패널의 비율을 조절하면 Splitter — 조절 없는 고정 구분이나 한 번에 한 뷰는 다른 컴포넌트입니다.

쓴다
A
B

에디터·미리보기 분할처럼 사용자가 드래그로 두 패널 비율을 조절할 때

대신 Separator

조절 없는 고정 시각 구분선일 때

대신 Tabs

동시에 둘을 볼 필요 없이 한 번에 한 뷰만 보이면 될 때

플레이그라운드#

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

좌측 패널
우측 패널
import { Splitter } from '@wds/ui-web';

<Splitter><div>좌측 패널</div>
  <div>우측 패널</div></Splitter>

변형#

상단 패널

vertical은 위/아래로 패널을 가릅니다.

하단 패널

구분선은 가로 막대이고 ↑/↓로 조절합니다.

direction='vertical' — 상/하 패널 (구분선은 가로 막대)

direction이 변형 축입니다 — 'horizontal'(기본)은 좌/우, 'vertical'은 상/하 패널입니다. minSize(px)로 각 패널의 최소 크기를 클램프하고, defaultRatio로 첫 패널의 초기 비율(0~1)을 지정합니다.

크기#

루트는 폭 100%이고 높이는 콘텐츠/소비자가 결정합니다 — 데모는 인라인 height로 영역을 줬습니다. 구분선은 시각 8px(space.2) 트랙에 중앙 2px 라인이고, 히트 영역은 44px로 확장돼 터치 타깃을 채웁니다. minSize는 컨테이너 진행 축 크기를 비율 경계로 환산해 양쪽 끝에서 50%까지만 허용합니다.

상태#

  • Default — 구분선 라인 color.border, 핸들 점 color.border-strong
  • Hover / Active / Focus — 라인·핸들 점 모두 color.primary로 강조
  • Focus:focus-visiblecolor.primary 2px 아웃라인 + radius.sm
  • Dragging — 패널 텍스트 선택 방지(user-select: none)

Props#

Prop타입기본값설명
direction'horizontal' | 'vertical''horizontal'패널 배치 축 — horizontal: 좌/우 · vertical: 상/하
children[ReactNode, ReactNode]정확히 2개의 패널 (첫째가 비율, 둘째가 나머지)
defaultRationumber0.5첫 패널의 초기 비율(0~1) — 이후 상태는 내부 소유(비제어)
minSizenumber80각 패널의 최소 크기(px) — 드래그/키보드 모두 클램프
onRatioChange(ratio: number) => void비율 변경 콜백 (0~1) — 같은 비율은 발화하지 않음
separatorLabelstring'패널 크기 조절'구분선 aria-label
…restOmit<HTMLAttributes<HTMLDivElement>, 'children'>style · className 등은 루트 div로 전달

접근성#

구분선이 role="separator" + tabIndex=0이고 aria-valuenow(0~100, 첫 패널 비율%)·aria-valuemin/max를 보고합니다. aria-orientation은 구분선 자체의 방향이라 좌우 패널을 가르는 세로 막대는 'vertical'을 보고합니다(ARIA 명세).

동작
/ (horizontal)비율 2%씩 감소 / 증가 (minSize 클램프)
/ (vertical)비율 2%씩 감소 / 증가 (minSize 클램프)
Home최소(첫 패널을 minSize까지 축소)
End최대(첫 패널을 minSize 경계까지 확대)
더블클릭50% 균등 분할로 리셋
  • 포인터 드래그는 setPointerCapture 기반이고 핸들 점은 aria-hidden(포인터 보조 경로)입니다
  • 핸들 강조·라인 전환은 background/color만 사용해 prefers-reduced-motion에서 전환을 끕니다

토큰#

component 토큰 없이 semantic을 직접 소비합니다(신설 기준 §4 미충족).

속성토큰
구분선 트랙폭/높이 space.2
구분선 라인color.border — hover/active/focus color.primary
핸들 점color.border-strong — hover/active/focus color.primary · radius.full
Focuscolor.primary(2px 아웃라인) · radius.sm
모션duration.fast + ease.standard