Slider
Slider는 지정된 범위 내에서 값을 선택하는 입력 컨트롤입니다. 단일 값 선택과 범위 선택을 모두 지원합니다.
Tooltip
Labels
3
Sizes
S/Rsingle/range
Mode
Radix
Base
Playground
미리보기
Dsingle50
Size
Color
Mode
Step
Direction
Tooltip
Options
<Slider
defaultValue={[50]}
/>Sizes
sm트랙4px
썸14px
default트랙6px
썸18px
lg트랙8px
썸22px
| Size | 트랙 높이 | 썸 | 미리보기 |
|---|---|---|---|
sm | 4px | 14px | |
default | 6px | 18px | |
lg | 8px | 22px |
Features
Range
defaultValue에 두 개의 값을 전달하면 범위 슬라이더로 동작합니다.
<Slider defaultValue={[25, 75]} />With Value
제어 모드에서 값을 표시하는 패턴입니다.
50
const [value, setValue] = useState([50])
<div className="space-y-4">
<div className="text-center">
<span className="text-2xl font-bold text-foreground tabular-nums">{value[0]}</span>
</div>
<Slider value={value} onValueChange={setValue} />
</div>States
Default
Disabled
<Slider defaultValue={[50]} />
<Slider defaultValue={[50]} disabled />API
Props
valueundefinednumber[]제어 모드에서의 값 (배열)
defaultValueundefinednumber[]비제어 모드에서 초기값 (배열)
onValueChangeundefined(value: number[]) => void값 변경 시 콜백 (드래그 중에도 발생)
onValueCommitundefined(value: number[]) => void드래그 완료 시 콜백
color"default""default" | "primary"Range와 Thumb의 색상
size"default""sm" | "default" | "lg"슬라이더 크기
min0number최솟값
max100number최댓값
step1number스텝 값
minStepsBetweenThumbs0numberRange 모드에서 Thumb 간 최소 스텝 수
showTooltip"never""auto" | "always" | "never"툴팁 표시 모드. auto는 호버/드래그 시 표시
formatLabelundefined(value: number) => string툴팁 값 포맷 함수
startContentundefinedReactNode슬라이더 왼쪽에 표시할 콘텐츠 (아이콘, 라벨 등)
endContentundefinedReactNode슬라이더 오른쪽에 표시할 콘텐츠
disabledfalseboolean비활성화 상태
orientation"horizontal""horizontal" | "vertical"표시 방향
invertedfalseboolean값 방향 반전
nameundefinedstring폼의 name 속성
| Name | Type | Default | Description |
|---|---|---|---|
value | number[] | undefined | 제어 모드에서의 값 (배열) |
defaultValue | number[] | undefined | 비제어 모드에서 초기값 (배열) |
onValueChange | (value: number[]) => void | undefined | 값 변경 시 콜백 (드래그 중에도 발생) |
onValueCommit | (value: number[]) => void | undefined | 드래그 완료 시 콜백 |
color | "default" | "primary" | "default" | Range와 Thumb의 색상 |
size | "sm" | "default" | "lg" | "default" | 슬라이더 크기 |
min | number | 0 | 최솟값 |
max | number | 100 | 최댓값 |
step | number | 1 | 스텝 값 |
minStepsBetweenThumbs | number | 0 | Range 모드에서 Thumb 간 최소 스텝 수 |
showTooltip | "auto" | "always" | "never" | "never" | 툴팁 표시 모드. auto는 호버/드래그 시 표시 |
formatLabel | (value: number) => string | undefined | 툴팁 값 포맷 함수 |
startContent | ReactNode | undefined | 슬라이더 왼쪽에 표시할 콘텐츠 (아이콘, 라벨 등) |
endContent | ReactNode | undefined | 슬라이더 오른쪽에 표시할 콘텐츠 |
disabled | boolean | false | 비활성화 상태 |
orientation | "horizontal" | "vertical" | "horizontal" | 표시 방향 |
inverted | boolean | false | 값 방향 반전 |
name | string | undefined | 폼의 name 속성 |
Customization
startContent / endContent에 ReactNode를 전달하여 스타일을 자유롭게 커스터마이즈할 수 있습니다.
아이콘 포함
startContent={<VolumeOff />}
endContent={<Volume2 />}스타일 라벨
$0$100
startContent={<span className="text-xs font-mono font-bold text-primary">$0</span>}
endContent={<span className="text-xs font-mono font-bold text-primary">$100</span>}아이콘 + 툴팁
<Slider
showTooltip="always"
formatLabel={(v) => `${v}%`}
startContent={<Sun />}
endContent={<Sun />}
/>Tip:startContent / endContent는 ReactNode를 받으므로 문자열, 아이콘, 커스텀 컴포넌트 등 무엇이든 전달할 수 있습니다. 폰트 크기는 Slider의 size에 맞춰 자동 조정됩니다.
Anatomy
1
60
2
3
050100
Track height
6pxThumb size
18px1
Track
슬라이더 전체 범위
2
Range
선택된 값의 범위
3
Thumb
드래그 가능한 핸들
Best Practices
✓
권장
- ✓현재 값을 가까이에 표시하기
- ✓적절한 step 값 설정하기
- ✓범위 선택에는 range 모드 사용하기
- ✓min/max 범위를 명확하게 정의하기
✕
지양
- ✗정확한 값 입력에는 Input을 사용하기
- ✗극단적으로 작은 step 값은 피하기
- ✗값 표시 없이 사용하지 않기
- ✗모바일에서 너무 좁은 슬라이더 피하기
Accessibility
키보드 조작
← →1스텝 증감
↑ ↓1스텝 증감
Home최솟값으로 이동
End최댓값으로 이동
ARIA 속성
role="slider"자동 부여aria-valuemin/max/now자동 관리- 포커스 인디케이터
- 터치 조작 지원