---
localeCode: en-US
order: 27
category: Input
title: Slider
subTitle: Slider
icon: doc-slider
brief: Slider is used to help users quickly enter a numeric value or range.
---
## Demos
### How to import
```jsx import
import { Slider } from '@douyinfe/semi-ui';
```
### Basic Usage
You can set `range={true}` to allow slider slide from both sides.
```jsx live=true
import React from 'react';
import { Slider } from '@douyinfe/semi-ui';
() => (
Default
Range
Disabled
);
```
### With Input
Synchronize slider with input value.
```jsx live=true
import React from 'react';
import { Slider, InputNumber } from '@douyinfe/semi-ui';
class InputSlider extends React.Component {
constructor(props) {
super();
this.state = { value: 10 };
this.getSliderValue = this.getSliderValue.bind(this);
}
getSliderValue(value) {
if (isNaN(Number(value))){
return;
}
this.setState({ value: value / 1 });
}
render() {
const { value } = this.state;
return (
);
}
}
```
### Tooltip
You can use `tipFormatter` to format Tooltip content or set `tipFormatter={null}`to hide Tooltip.
```jsx live=true
import React from 'react';
import { Slider } from '@douyinfe/semi-ui';
() => (
(`${v}%`)} />
);
```
### With Tag
Use `marks` to label measures on sliders.
```jsx live=true
import React from 'react';
import { Slider } from '@douyinfe/semi-ui';
() => (
step=10
step=0.1
Marks
Inclued
);
```
### Segmented Background
To create a slider with segmented background, you could use CSS property `linear-gradient` for `railStyle` along with `onChange` to change background dynamically。
```jsx live=true
import React from 'react';
import { Slider } from '@douyinfe/semi-ui';
class SegSlider extends React.Component {
constructor(props) {
super();
this.state = { value: [20, 60] };
this.changeValue = this.changeValue.bind(this);
this.getRailStyle = this.getRailStyle.bind(this);
}
changeValue(value) {
this.setState({ value });
}
getRailStyle(range) {
// color of second segment inherits from .semi-slider-track
const color = ['var(--semi-color-danger)', 'transparent', 'var(--semi-color-success)'];
const gradientPos = this.state.value.map(val =>
((val - range[0]) / (range[1] - range[0])).toFixed(2) * 100
);
const style = {
background: `linear-gradient(to right, ${color[0]} ${gradientPos[0]}%, ${color[1]} ${gradientPos[0]}%, ${color[1]} ${gradientPos[1]}%, ${color[2]} ${gradientPos[1]}%)`
};
return style;
}
render() {
const range = [10, 100];
const railStyle = this.getRailStyle(range);
return (
);
}
}
```
### Controlled Component
You can use `value` along with `onChange` property if you want to use Slider as a controlled component.
```jsx live=true
import React from 'react';
import { Slider, Button } from '@douyinfe/semi-ui';
class ControllSlider extends React.Component {
constructor(props) {
super();
this.state = { value: 10 };
this.changeValue = this.changeValue.bind(this);
}
changeValue() {
this.setState({ value: this.state.value + 10 });
}
render() {
return (
);
```
## API Reference
| Property | Instructions | type | Default | Version |
| -------------- | ------------------------------------------------------------------------------------------ | ------------- | ------- |------ |
| defaultValue | Default value | number \| number[] | 0 |- |
| disabled | Disable slider | boolean | false |- |
| included | Takes effect when `marks` is not null, true means containment and false means coordination | boolean | true |- |
| marks | Tick mark of Slider, type of key must be number, and must in closed interval [min, max] | Record | - |- |
| max | Maximum value of the slider. | number | 100 |- |
| min | Minimum value of the slider. | number | 0 |- |
| railStyle | Style for slide rail | CSSProperties | - |0.31.0|
| range | Toggle whether it is allow to move slider from both sides | boolean | false |- |
| step | Increment between successive values | number | 1 |- |
| tipFormatter | Format Tooltip content, by default display current value | (value: string \| number \| boolean \| (string \| number \| boolean)[]) => any | v => v |- |
| tooltipVisible | Toggle whether to display tooltip all the time | boolean | - |- |
| value | Set current value, used in controlled component | number \| number[] | |- |
| vertical | Toggle whether to display slider vertically | boolean | false |- |
| verticalReverse | Vertical but reverse direction >=1.29.0| boolean | false |-|
| onAfterChange | Triggered when onmouseup is invoked, passed in current value as params | (value: number \| number[]) => void | - |- |
| onChange | Callback function when slider value changes | (value: number \| number[]) => void | - |- |
## Accessibility
### ARIA
- The element serving as the focusable slider control has `role` 'slider'.
- The slider element has the `aria-valuenow` property set to a decimal value representing the current value of the slider.
- The slider element has the `aria-valuemin` property set to a decimal value representing the minimum allowed value of the slider.
- The slider element has the `aria-valuemax` property set to a decimal value representing the maximum allowed value of the slider.
- If the slider is vertically oriented, it has `aria-orientation` set to vertical.
- If the value of `aria-valuenow` is not user-friendly, e.g., the day of the week is represented by a number, support setting API `aria-valuetext` property to a string that makes the slider value understandable, e.g., "Monday". And you can use API `getAriaValueText(value)` to specify `aria-valuetext`.
- Supporting API `aria-label` `aria-labelledby` to specify Slider label.
## Design Tokens