Slider
Sliders allow users to make selections from a range of values.
Sliders reflect a range of values along a bar, from which users may select a single value. They are ideal for adjusting settings such as volume, brightness, or applying image filters.
- 📦 22 kB gzipped (but only +8 kB when used together with other Material-UI components).
Volume
Disabled slider
Discrete sliders
Discrete sliders can be adjusted to a specific value by referencing its value indicator. By order of demos:
You can generate a mark for each step with marks={true}.
Temperature
Disabled
Small steps
<Typography id="discrete-slider-small-steps" gutterBottom>
  Small steps
</Typography>
<Slider
  defaultValue={0.00000005}
  getAriaValueText={valuetext}
  aria-labelledby="discrete-slider-small-steps"
  step={0.00000001}
  marks
  min={-0.00000005}
  max={0.0000001}
  valueLabelDisplay="auto"
/>Custom marks
<Typography id="discrete-slider-custom" gutterBottom>
  Custom marks
</Typography>
<Slider
  defaultValue={20}
  getAriaValueText={valuetext}
  aria-labelledby="discrete-slider-custom"
  step={10}
  valueLabelDisplay="auto"
  marks={marks}
/>Restricted values
You can restrict the selectable values to those provided with the marks prop with step={null}.
Restricted values
<Typography id="discrete-slider-restrict" gutterBottom>
  Restricted values
</Typography>
<Slider
  defaultValue={20}
  valueLabelFormat={valueLabelFormat}
  getAriaValueText={valuetext}
  aria-labelledby="discrete-slider-restrict"
  step={null}
  valueLabelDisplay="auto"
  marks={marks}
/>Always visible
<Typography id="discrete-slider-always" gutterBottom>
  Always visible
</Typography>
<Slider
  defaultValue={80}
  getAriaValueText={valuetext}
  aria-labelledby="discrete-slider-always"
  step={10}
  marks={marks}
  valueLabelDisplay="on"
/>Range slider
The slider can be used to set the start and end of a range by supplying an array of values to the value prop.
Temperature range
<Typography id="range-slider-demo" gutterBottom>
  Temperature range
</Typography>
<Slider
  value={value}
  onChange={handleChange}
  valueLabelDisplay="auto"
  aria-labelledby="range-slider-demo"
  getAriaValueText={valuetext}
/>Volume
Customized sliders
Here are some examples of customizing the component. You can learn more about this in the overrides documentation page.
iOS
pretto.fr
Tooltip value label
Airbnb
Temperature
WARNING: Chrome, Safari and newer Edge versions i.e. any browser based on WebKit exposes <Slider orientation="vertical" /> as horizontal (chromium issue #1158217).
By applying -webkit-appearance: slider-vertical; the slider is exposed as vertical.
However, by applying -webkit-appearance: slider-vertical; keyboard navigation for horizontal keys (Arrow Left, Arrow Right) is reversed (chromium issue #1162640).
Usually, up and right should increase and left and down should decrease the value.
If you apply -webkit-appearance you could prevent keyboard navigation for horizontal arrow keys for a truly vertical slider.
This might be less confusing to users compared to a change in direction.
Temperature
Track
The track shows the range available for user selection.
Removed track
The track can be turned off with track={false}.
Removed track
Removed track range slider
Inverted track
Inverted track range
Non-linear scale
You can use the scale prop to represent the value on a different scale.
In the following demo, the value x represents the value 2^x. Increasing x by one increases the represented value by factor 2.
Storage: 1 MB
<Typography id="non-linear-slider" gutterBottom>
  Storage: {valueLabelFormat(calculateValue(value))}
</Typography>
<Slider
  value={value}
  min={5}
  step={1}
  max={30}
  scale={calculateValue}
  getAriaValueText={valueLabelFormat}
  valueLabelFormat={valueLabelFormat}
  onChange={handleChange}
  valueLabelDisplay="auto"
  aria-labelledby="non-linear-slider"
/><StyledSlider defaultValue={10} />Accessibility
(WAI-ARIA: https://www.w3.org/TR/wai-aria-practices/#slider)
The component handles most of the work necessary to make it accessible. However, you need to make sure that:
- Each thumb has a user-friendly label (aria-label,aria-labelledbyorgetAriaLabelprop).
- Each thumb has a user-friendly text for its current value.
This is not required if the value matches the semantics of the label.
You can change the name with the getAriaValueTextoraria-valuetextprop.