Get startedFoundationsComponentsPatternsRules

Split Button

스플릿 버튼은 기본 액션 하나와, 비슷한 보조 액션을 모은 메뉴를 하나의 버튼으로 묶어요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/steel/split-button.json

구성

SplitButton 은 자식을 정확히 두 개 받아요. 첫 번째가 기본 액션, 두 번째가 보조 액션이에요. 그 사이에 구분선이 들어가고, 안쪽 Button·IconButton 은 SplitButton 의 appearance, spacing, isDisabled 를 그대로 따라가요.

<SplitButton>
  <Button>변경 사항 저장</Button>
  <SplitButtonDropdown>
    <SplitButtonDropdownTrigger label="저장 관련 액션 더보기" />
    <SplitButtonDropdownContent>
      <SplitButtonDropdownItem>초안으로 저장</SplitButtonDropdownItem>
    </SplitButtonDropdownContent>
  </SplitButtonDropdown>
</SplitButton>

보조 액션 메뉴는 radix DropdownMenu 위에 만든 SplitButtonDropdown* 조각을 써요. 트리거는 메뉴가 열려 있는 동안 선택 상태로 보여요. 기본 아래쪽 화살표는 버튼 안의 다른 Chevron 아이콘처럼 12px 로 작게 그려요.

Examples

Default

기본 appearance 에서는 바깥 컨테이너가 1px 테두리를 그리고, 안쪽 두 버튼은 배경 없이(subtle) 붙어요.

Appearance

appearance="primary" 는 가장 강한 호출 액션이에요. 한 영역에 하나만 써요. 구분선은 반투명한 흰색으로 바뀌어요. 메뉴가 열리면 트리거는 중립 선택색 대신 연한 브랜드 배경(background.brand.subtlest)과 브랜드 글자·테두리로 바뀌어요. 열린 메뉴가 기본 액션의 일부라는 것을 보여주기 위해서예요.

Spacing

spacing="compact" 는 두 버튼을 24px 높이로 줄여요.

Disabled

isDisabled 는 두 버튼을 함께 비활성으로 만들어요. 테두리와 구분선도 disabled 색으로 바뀌어요.

Custom secondary action

보조 버튼이 메뉴를 열지 않는다면 아래쪽 화살표를 쓰지 않아요. 액션을 분명히 드러내는 아이콘의 IconButton 을 직접 넣어요.

Usage guidelines

스플릿 버튼은 기본 액션이 분명하고, 그와 바로 이어지거나 비슷한 액션 몇 개를 함께 제공할 때 써요. 대부분의 사용자는 기본 버튼만 누른다고 가정해요. 메뉴 버튼은 작아서 놓치기 쉽고 찾는 데 더 집중해야 해요.

  • 기본 액션만으로도 대부분의 작업을 끝낼 수 있어야 해요. 메뉴를 한 번도 열지 않는 사람도 있어요.
  • 뚜렷한 기본값이 없다면 스플릿 버튼 대신 드롭다운 메뉴나 Button Group 으로 선택지를 동등하게 보여줘요.
  • 터치 영역이 작아 잘못 누르기 쉬우니 모바일 화면에서는 피해요.
  • 메뉴는 짧게, 되도록 6개 미만으로 유지해요.
Do· 관련 액션만 모으기
"변경 사항 저장" 메뉴에는 "초안으로 저장", "템플릿으로 저장" 처럼 같은 성격의 액션만 넣어요.
Don't· 성격이 다른 액션
업데이트 버튼의 메뉴에 "삭제" 처럼 결이 다른 액션을 넣지 않아요. 기본 액션을 메뉴에 다시 넣지도 않아요.
  • 기본 액션과 메뉴 항목 모두 짧고 분명한 라벨로 써요. 영문은 문장형(sentence case)으로 써요.
  • 보조 아이콘이나 메뉴를 바꾸고 싶다면, 정말 서로 밀접하고 기본값이 분명한지 먼저 확인해요. 별도의 버튼이 더 나은 경우가 많아요.

Accessibility

  • 드롭다운 트리거에는 label 로 접근성 이름을 꼭 줘요. "저장 관련 액션 더보기" 처럼 메뉴에 담긴 액션을 설명해요.
  • 트리거에는 aria-haspopup="menu", aria-expanded 가 자동으로 붙어 메뉴가 열렸는지 알려줘요.
  • 키보드: Tab 으로 기본 버튼과 트리거를 차례로 이동해요. 트리거에서 Enter·Space·↓ 로 메뉴를 열고, ↑/↓ 로 항목을 이동, Enter 로 실행, Esc 로 닫아요. 닫히면 포커스가 트리거로 돌아와요.
  • 비활성은 가능한 피하고, 비활성 버튼에 툴팁을 달지 않아요.

Props

SplitButton

Prop

Type

SplitButtonDropdownTrigger

IconButton props 를 모두 받아요 (isSelected 는 열림 상태로 자동 지정).

Prop

Type

SplitButtonDropdown · Content · Item

SplitButtonDropdown 은 radix DropdownMenu.Root(open, defaultOpen, onOpenChange), SplitButtonDropdownContent 는 DropdownMenu.Content(기본 align="end") props 를 받아요.

Prop

Type

On this page