Select
Select는 드롭다운 목록에서 하나의 값을 선택하는 폼 컨트롤입니다. 키보드 조작과 스크린 리더를 완전히 지원하며, 네이티브 폼 제출에도 대응합니다.
Playground
<Select>
<Select.Trigger>
<Select.Value placeholder="Select a fruit" />
</Select.Trigger>
<Select.Content>
<Select.Item value="apple">Apple</Select.Item>
<Select.Item value="banana">Banana</Select.Item>
<Select.Item value="cherry">Cherry</Select.Item>
<Select.Item value="grape">Grape</Select.Item>
</Select.Content>
</Select>Variants
Sizes
xssmdefaultlgxl| Size | 높이 | 폰트 | 아이템 | 미리보기 |
|---|---|---|---|---|
xs | 36px | 13px | sm | |
sm | 40px | 14px | sm | |
default | 44px | 16px | md | |
lg | 48px | 16px | md | |
xl | 56px | 16px | lg |
API
Component Structure
Select— Radix Select.TriggerProps트리거 버튼.Value선택값 표시.ContentProps드롭다운 패널 (flush 지원).ItemProps선택 아이템.Group아이템 그룹.Label그룹 라벨.Separator구분선Props
Select (Root)
size"default""xs" | "sm" | "default" | "lg" | "xl"Trigger의 높이와 폰트 크기. Content에 자동 전파
radius"default""none" | "sm" | "base" | "default" | "lg" | "xl" | "2xl" | "3xl" | "full"모서리 둥글기 (6px). Trigger에 직접 적용, Content에 자동 매핑
valueundefinedstring제어 모드의 선택값
defaultValueundefinedstring비제어 모드의 초기값
onValueChangeundefined(value: string) => void값 변경 시 콜백
nameundefinedstring폼 제출용 이름
requiredundefinedboolean필수 필드 지정
disabledundefinedboolean전체 비활성화
openundefinedboolean제어 모드의 열림/닫힘 상태
onOpenChangeundefined(open: boolean) => void열림/닫힘 상태 변경 시 콜백
| Name | Type | Default | Description |
|---|---|---|---|
size | "xs" | "sm" | "default" | "lg" | "xl" | "default" | Trigger의 높이와 폰트 크기. Content에 자동 전파 |
radius | "none" | "sm" | "base" | "default" | "lg" | "xl" | "2xl" | "3xl" | "full" | "default" | 모서리 둥글기 (6px). Trigger에 직접 적용, Content에 자동 매핑 |
value | string | undefined | 제어 모드의 선택값 |
defaultValue | string | undefined | 비제어 모드의 초기값 |
onValueChange | (value: string) => void | undefined | 값 변경 시 콜백 |
name | string | undefined | 폼 제출용 이름 |
required | boolean | undefined | 필수 필드 지정 |
disabled | boolean | undefined | 전체 비활성화 |
open | boolean | undefined | 제어 모드의 열림/닫힘 상태 |
onOpenChange | (open: boolean) => void | undefined | 열림/닫힘 상태 변경 시 콜백 |
Select.Trigger
disabledundefinedboolean트리거 버튼 비활성화
asChildfalseboolean자식 요소를 트리거로 렌더링
| Name | Type | Default | Description |
|---|---|---|---|
disabled | boolean | undefined | 트리거 버튼 비활성화 |
asChild | boolean | false | 자식 요소를 트리거로 렌더링 |
Select.Content
position"popper""item-aligned" | "popper"드롭다운 배치 방식
flushfalseboolean아이템을 전체 너비로 표시 (패딩 없음)
side"bottom""top" | "right" | "bottom" | "left"드롭다운 표시 방향 (popper 전용)
sideOffset1number트리거와의 거리 (px)
| Name | Type | Default | Description |
|---|---|---|---|
position | "item-aligned" | "popper" | "popper" | 드롭다운 배치 방식 |
flush | boolean | false | 아이템을 전체 너비로 표시 (패딩 없음) |
side | "top" | "right" | "bottom" | "left" | "bottom" | 드롭다운 표시 방향 (popper 전용) |
sideOffset | number | 1 | 트리거와의 거리 (px) |
Select.Item
value—string아이템 값 (필수)
disabledundefinedboolean아이템 선택 불가
textValueundefinedstring타입어헤드용 텍스트 값
| Name | Type | Default | Description |
|---|---|---|---|
value | string | — | 아이템 값 (필수) |
disabled | boolean | undefined | 아이템 선택 불가 |
textValue | string | undefined | 타입어헤드용 텍스트 값 |
Customization
className으로 트리거와 콘텐츠의 스타일을 커스터마이즈할 수 있습니다.
너비 변경
<Select.Content className="w-72">전체 너비 트리거
<Select.Trigger className="w-full">Tip: 각 서브 컴포넌트는 className을 받아 Tailwind 클래스로 스타일을 오버라이드할 수 있습니다.
Anatomy
Best Practices
권장
- ✓선택지가 5개 이상일 때 사용
- ✓선택지가 많을 때 Group으로 분류
- ✓placeholder로 선택 내용을 안내
- ✓폼 안에서는 name과 required를 설정
지양
- ✗선택지가 3개 이하면 Radio 검토
- ✗액션 실행에는 Dropdown을 사용
- ✗다중 선택이 필요하면 다른 UI 검토
- ✗placeholder 없이 초기값도 미설정하지 않기
Accessibility
키보드 조작
ARIA 속성
role="listbox"Content에 자동 부여role="option"Item에 자동 부여aria-expandedTrigger 상태 관리- 타입어헤드 문자 검색
Select vs Dropdown
외관은 비슷하지만 용도와 동작이 다릅니다. 적절한 컴포넌트를 선택하세요.
용도
Select: 값 선택
Dropdown: 액션 실행
폼 연동
Select: name / value 제출 가능
Dropdown: 없음
선택 후 표시
Select: 선택값이 트리거에 반영
Dropdown: 메뉴만 닫힘
아이템 종류
Select: 단일 선택 아이템
Dropdown: Item, Checkbox, Radio, Sub
사용 사례
Select: 국가, 카테고리, 정렬 순서
Dropdown: 컨텍스트 메뉴, 계정 작업
| 특징 | Select | Dropdown |
|---|---|---|
| 용도 | 값 선택 | 액션 실행 |
| 폼 연동 | name / value 제출 가능 | 없음 |
| 선택 후 표시 | 선택값이 트리거에 반영 | 메뉴만 닫힘 |
| 아이템 종류 | 단일 선택 아이템 | Item, Checkbox, Radio, Sub |
| 사용 사례 | 국가, 카테고리, 정렬 순서 | 컨텍스트 메뉴, 계정 작업 |
선택 기준: 값을 선택해 폼에 제출할 때는 Select가 적합합니다. 클릭 시 액션(편집, 삭제, 공유 등)을 실행할 때는 Dropdown 을 사용하세요.