Slider
An easily stylable range input.
View as MarkdownAnatomy
Import the component and assemble its parts:
import { Slider } from '@base-ui-components/react/slider';
<Slider.Root>
<Slider.Value />
<Slider.Control>
<Slider.Track>
<Slider.Indicator />
<Slider.Thumb />
</Slider.Track>
</Slider.Control>
</Slider.Root>API reference
Root
Groups all parts of the slider.
Renders a <div> element.
namestring
string- Name
- Description
Identifies the field when a form is submitted.
- Type
string | undefined
defaultValuenumber | number[]
number | number[]- Name
- Description
The uncontrolled value of the slider when it’s initially rendered.
To render a controlled slider, use the
valueprop instead.- Type
number | number[] | undefined
valuenumber | number[]
number | number[]- Name
- Description
The value of the slider. For ranged sliders, provide an array with two values.
- Type
number | number[] | undefined
onValueChangefunction
function- Name
- Description
Callback function that is fired when the slider's value changed.
- Type
| (( value: number | number[], eventDetails: Slider.Root.ChangeEventDetails, activeThumbIndex: number, ) => void) | undefined
onValueCommittedfunction
function- Name
- Description
Callback function that is fired when the
pointerupis triggered.- Type
| (( value: number | number[], eventDetails: Slider.Root.ChangeEventDetails, ) => void) | undefined
localeIntl.LocalesArgument
Intl.LocalesArgument- Name
- Description
The locale used by
Intl.NumberFormatwhen formatting the value. Defaults to the user's runtime locale.- Type
Intl.LocalesArgument | undefined
refRefObject<HTMLDivElement>
RefObject<HTMLDivElement>- Name
- Type
React.RefObject<HTMLDivElement> | undefined
stepnumber
(default: 1
)
number1- Name
- Description
The granularity with which the slider can step through values. (A "discrete" slider.) The
minprop serves as the origin for the valid values. We recommend (max - min) to be evenly divisible by the step.- Type
number | undefined- Default
1
largeStepnumber
(default: 10
)
number10- Name
- Description
The granularity with which the slider can step through values when using Page Up/Page Down or Shift + Arrow Up/Arrow Down.
- Type
number | undefined- Default
10
minStepsBetweenValuesnumber
(default: 0
)
number0- Description
The minimum steps between values in a range slider.
- Type
number | undefined- Default
0
minnumber
(default: 0
)
number0- Name
- Description
The minimum allowed value of the slider. Should not be equal to max.
- Type
number | undefined- Default
0
maxnumber
(default: 100
)
number100- Name
- Description
The maximum allowed value of the slider. Should not be equal to min.
- Type
number | undefined- Default
100
formatIntl.NumberFormatOptions
Intl.NumberFormatOptions- Name
- Description
Options to format the input value.
- Type
Intl.NumberFormatOptions | undefined
disabledboolean
(default: false
)
booleanfalse- Name
- Description
Whether the slider should ignore user interaction.
- Type
boolean | undefined- Default
false
orientationOrientation
(default: 'horizontal'
)
Orientation'horizontal'- Name
- Description
The component orientation.
- Type
'horizontal' | 'vertical' | undefined- Default
'horizontal'
inputRefRef<HTMLInputElement>
Ref<HTMLInputElement>- Name
- Description
A ref to access the hidden input element.
- Type
React.Ref<HTMLInputElement> | undefined
classNamestring | function
string | function- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
ReactElement | function- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Root.State, ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).
Value
Displays the current value of the slider as text.
Renders an <output> element.
children| ((formattedValues: string[], values: number[]) => ReactNode)
| null
| ((formattedValues: string[], values: number[]) => ReactNode)
| null- Name
- Type
| (( formattedValues: string[], values: number[], ) => ReactNode) | null | undefined
classNamestring | function
string | function- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
ReactElement | function- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Root.State, ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).
Control
The clickable, interactive part of the slider.
Renders a <div> element.
classNamestring | function
string | function- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
ReactElement | function- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Root.State, ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).
Track
Contains the slider indicator and represents the entire range of the slider.
Renders a <div> element.
classNamestring | function
string | function- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
ReactElement | function- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Root.State, ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).
Indicator
Visualizes the current value of the slider.
Renders a <div> element.
classNamestring | function
string | function- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
ReactElement | function- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Root.State, ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).
Thumb
The draggable part of the the slider at the tip of the indicator.
Renders a <div> element and a nested <input type="range">.
getAriaLabelfunction
function- Name
- Description
A function which returns a string value for the
aria-labelattribute of theinput.- Type
((index: number) => string) | null | undefined
getAriaValueTextfunction
function- Name
- Description
A function which returns a string value for the
aria-valuetextattribute of theinput. This is important for screen reader users.- Type
| (( formattedValue: string, value: number, index: number, ) => string) | null | undefined
indexnumber
number- Name
- Description
The index of the thumb which corresponds to the index of its value in the
valueordefaultValuearray. This prop is required to support server-side rendering for range sliders with multiple thumbs.- Type
number | undefined- Example
<Slider.Root value={[10, 20]}> <Slider.Thumb index={0} /> <Slider.Thumb index={1} /> </Slider.Root>
onBlurfunction
function- Name
- Description
A blur handler forwarded to the
input.- Type
| React.FocusEventHandler<HTMLInputElement> | undefined
onFocusfunction
function- Name
- Description
A focus handler forwarded to the
input.- Type
| React.FocusEventHandler<HTMLInputElement> | undefined
tabIndexnumber
number- Name
- Description
Optional tab index attribute forwarded to the
input.- Type
number | undefined
disabledboolean
(default: false
)
booleanfalse- Name
- Description
Whether the thumb should ignore user interaction.
- Type
boolean | undefined- Default
false
classNamestring | function
string | function- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Slider.Thumb.State) => string)
renderReactElement | function
ReactElement | function- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Thumb.State, ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).
data-index
Indicates the index of the thumb in range sliders.
Examples
Range slider
To create a range slider:
- Pass an array of values and place
Slider.Thumbs for each value in the array - Additionally for server-side rendering, specify a numeric
indexfor each thumb that corresponds to the index of its value in the value array