Slider
A control element that allows for a range of selections.
Anatomy
To set up the slider correctly, you'll need to understand its anatomy and how we name its parts.
Each part includes a
data-partattribute to help identify them in the DOM.
Examples
Learn how to use the Slider component in your project. Let's take a look at
the most basic example:
import { Slider } from '@ark-ui/react'
export const Basic = () => {
  return (
    <Slider.Root>
      <Slider.Label>Label</Slider.Label>
      <Slider.ValueText />
      <Slider.Control>
        <Slider.Track>
          <Slider.Range />
        </Slider.Track>
        <Slider.Thumb index={0} />
      </Slider.Control>
    </Slider.Root>
  )
}
import { Slider } from '@ark-ui/solid'
export const Basic = () => {
  return (
    <Slider.Root>
      <Slider.Label>Label</Slider.Label>
      <Slider.ValueText />
      <Slider.Control>
        <Slider.Track>
          <Slider.Range />
        </Slider.Track>
        <Slider.Thumb index={0} />
      </Slider.Control>
    </Slider.Root>
  )
}
<script setup lang="ts">
import { Slider } from '@ark-ui/vue'
</script>
<template>
  <Slider.Root>
    <Slider.Label>Label</Slider.Label>
    <Slider.ValueText />
    <Slider.Control>
      <Slider.Track>
        <Slider.Range />
      </Slider.Track>
      <Slider.Thumb :key="0" :index="0" />
    </Slider.Control>
  </Slider.Root>
</template>
Range Slider
You can add multiple thumbs to the slider by adding multiple Slider.Thumb
import { Slider } from '@ark-ui/react'
export const Range = () => {
  return (
    <Slider.Root defaultValue={[5, 10]}>
      <Slider.Label>Label</Slider.Label>
      <Slider.ValueText />
      <Slider.Control>
        <Slider.Track>
          <Slider.Range />
        </Slider.Track>
        <Slider.Thumb key={0} index={0} />
        <Slider.Thumb key={1} index={1} />
      </Slider.Control>
    </Slider.Root>
  )
}
import { Slider } from '@ark-ui/solid'
export const Range = () => {
  return (
    <Slider.Root value={[5, 10]}>
      <Slider.Label>Label</Slider.Label>
      <Slider.ValueText />
      <Slider.Control>
        <Slider.Track>
          <Slider.Range />
        </Slider.Track>
        <Slider.Thumb index={0} />
        <Slider.Thumb index={1} />
      </Slider.Control>
    </Slider.Root>
  )
}
Example not foundAdding marks
You can add marks to the slider track by using the Slider.MarkerGroup and
Slider.Marker components.
Position the Slider.Marker components relative to the track by providing the
value prop.
Example not foundExample not foundExample not foundSetting the initial value
To set the slider's initial value, set the defaultValue prop to the array of
numbers.
Example not foundExample not foundExample not foundSpecifying the minimum and maximum
By default, the minimum is 0 and the maximum is 100. If that's not what you
want, you can easily specify different bounds by changing the values of the
min and/or max props.
For example, to ask the user for a value between -10 and 10, you can use:
Example not foundExample not foundExample not foundSetting the value's granularity
By default, the granularity, is 1, meaning that the value is always an
integer. You can change the step attribute to control the granularity.
For example, If you need a value between 5 and 10, accurate to two decimal
places, you should set the value of step to 0.01:
import { Slider } from '@ark-ui/react'
export const Step = () => {
  return (
    <Slider.Root step={0.01} min={5} max={10}>
      <Slider.Label>Label</Slider.Label>
      <Slider.ValueText />
      <Slider.Control>
        <Slider.Track>
          <Slider.Range />
        </Slider.Track>
        <Slider.Thumb index={0} />
      </Slider.Control>
    </Slider.Root>
  )
}
import { Slider } from '@ark-ui/solid'
export const Step = () => {
  return (
    <Slider.Root step={0.01} min={5} max={10}>
      <Slider.Label>Label</Slider.Label>
      <Slider.ValueText />
      <Slider.Control>
        <Slider.Track>
          <Slider.Range />
        </Slider.Track>
        <Slider.Thumb index={0} />
      </Slider.Control>
    </Slider.Root>
  )
}
<script setup lang="ts">
import { Slider } from '@ark-ui/vue'
</script>
<template>
  <Slider.Root :step="0.01" :min="5" :max="10">
    <Slider.Label>Label</Slider.Label>
    <Slider.ValueText />
    <Slider.Control>
      <Slider.Track>
        <Slider.Range />
      </Slider.Track>
      <Slider.Thumb :key="0" :index="0" />
    </Slider.Control>
  </Slider.Root>
</template>
Listening for changes
When the slider value changes, the onValueChange and onValueChangeEnd
callbacks are invoked. You can use this to set up custom behaviors in your app.
Example not foundExample not foundExample not foundChanging the orientation
By default, the slider is assumed to be horizontal. To change the orientation to vertical, set the orientation property in the machine's context to vertical.
In this mode, the slider will use the arrow up and down keys to increment/decrement its value.
Don't forget to change the styles of the vertical slider by specifying its height
import { Slider } from '@ark-ui/react'
export const Vertical = () => {
  return (
    <Slider.Root orientation="vertical">
      <Slider.Label>Label</Slider.Label>
      <Slider.ValueText />
      <Slider.Control>
        <Slider.Track>
          <Slider.Range />
        </Slider.Track>
        <Slider.Thumb index={0} />
      </Slider.Control>
    </Slider.Root>
  )
}
import { Slider } from '@ark-ui/solid'
export const Vertical = () => {
  return (
    <Slider.Root orientation="vertical">
      <Slider.Label>Label</Slider.Label>
      <Slider.ValueText />
      <Slider.Control>
        <Slider.Track>
          <Slider.Range />
        </Slider.Track>
        <Slider.Thumb index={0} />
      </Slider.Control>
    </Slider.Root>
  )
}
<script setup lang="ts">
import { Slider } from '@ark-ui/vue'
</script>
<template>
  <Slider.Root orientation="vertical">
    <Slider.Label>Label</Slider.Label>
    <Slider.ValueText />
    <Slider.Control>
      <Slider.Track>
        <Slider.Range />
      </Slider.Track>
      <Slider.Thumb :key="0" :index="0" />
    </Slider.Control>
  </Slider.Root>
</template>
Changing the origin
By default, the slider's origin is at the start of the track. To change the
origin to the center of the track, set the origin prop to center.
Example not foundExample not foundExample not foundAPI Reference
Root
| Prop | Default | Type | 
|---|---|---|
aria-label | string[]The aria-label of each slider thumb. Useful for providing an accessible name to the slider  | |
aria-labelledby | string[]The `id` of the elements that labels each slider thumb. Useful for providing an accessible name to the slider  | |
asChild | booleanRender as a different element type.  | |
defaultValue | number[]The initial value of the slider when it is first rendered. Use when you do not need to control the state of the slider picker.  | |
disabled | booleanWhether the slider is disabled  | |
form | stringThe associate form of the underlying input element.  | |
getAriaValueText | (details: ValueTextDetails) => stringFunction that returns a human readable value for the slider thumb  | |
id | stringThe unique identifier of the machine.  | |
ids | Partial<{
  root: string
  thumb(index: number): string
  control: string
  track: string
  range: string
  label: string
  valueText: string
  marker(index: number): string
}>The ids of the elements in the range slider. Useful for composition.  | |
invalid | booleanWhether the slider is invalid  | |
max | numberThe maximum value of the slider  | |
min | numberThe minimum value of the slider  | |
minStepsBetweenThumbs | numberThe minimum permitted steps between multiple thumbs.  | |
name | stringThe name associated with each slider thumb (when used in a form)  | |
onFocusChange | (details: FocusChangeDetails) => voidFunction invoked when the slider's focused index changes  | |
onValueChange | (details: ValueChangeDetails) => voidFunction invoked when the value of the slider changes  | |
onValueChangeEnd | (details: ValueChangeDetails) => voidFunction invoked when the slider value change is done  | |
orientation | 'horizontal' | 'vertical'The orientation of the slider  | |
origin | 'center' | 'start'- "start": Useful when the value represents an absolute value - "center": Useful when the value represents an offset (relative)  | |
readOnly | booleanWhether the slider is read-only  | |
step | numberThe step value of the slider  | |
thumbAlignment | 'center' | 'contain'The alignment of the slider thumb relative to the track - `center`: the thumb will extend beyond the bounds of the slider track. - `contain`: the thumb will be contained within the bounds of the track.  | |
thumbSize | { width: number; height: number }The slider thumbs dimensions  | |
value | number[]The value of the range slider  | 
Control
| Prop | Default | Type | 
|---|---|---|
asChild | booleanRender as a different element type.  | 
Label
| Prop | Default | Type | 
|---|---|---|
asChild | booleanRender as a different element type.  | 
MarkerGroup
| Prop | Default | Type | 
|---|---|---|
asChild | booleanRender as a different element type.  | 
Marker
| Prop | Default | Type | 
|---|---|---|
value | number | |
asChild | booleanRender as a different element type.  | 
Range
| Prop | Default | Type | 
|---|---|---|
asChild | booleanRender as a different element type.  | 
Thumb
| Prop | Default | Type | 
|---|---|---|
index | number | |
asChild | booleanRender as a different element type.  | |
name | string | 
Track
| Prop | Default | Type | 
|---|---|---|
asChild | booleanRender as a different element type.  | 
ValueText
| Prop | Default | Type | 
|---|---|---|
asChild | booleanRender as a different element type.  |