Slider
<cs-slider>
Sliders let users choose a numeric value within a defined range by dragging a thumb along a track.
This component works with standard <form> elements. See form controls for form submission and client-side validation.
Examples
Label
Use the label attribute to give the slider an accessible label. For labels that contain HTML, use the label slot instead.
Hint
Add descriptive hint to a slider with the hint attribute. For hints that contain HTML, use the hint slot instead.
Min, Max & Step
Use the min and max attributes to define the slider’s range, and the step attribute to control the increment between values.
Showing a Tooltip
Use the with-tooltip attribute to display a tooltip with the current value when the slider is focused or being dragged.
Showing Markers
Use the with-markers attribute to display visual indicators at each step increment. This works best with sliders that have a smaller range of values.
Adding References
Use the reference slot to add contextual labels below the slider. References are automatically spaced using space-between, making them easy to align with the start, center, and end positions.
Show a reference next to a specific marker.
Add position: absolute to the reference and set left, right, top, or bottom to a percentage that matches the marker’s position.
Range Selection
Use the range attribute to enable dual-thumb selection for choosing a range of values. Set the initial thumb positions with the min-value and max-value attributes.
For range sliders, the minValue and maxValue properties represent the current positions of the thumbs. When the form is submitted, both values will be included as separate entries with the same name.
const slider = document.querySelector('cs-slider[range]'); // Get the current values console.log(`Min value: ${slider.minValue}, Max value: ${slider.maxValue}`); // Set the values programmatically slider.minValue = 30; slider.maxValue = 70;
Vertical Sliders
Set the orientation attribute to vertical to create a vertical slider. Vertical sliders automatically center themselves and fill the available vertical space.
Range sliders can also be vertical.
Size
Control the slider’s size with the size attribute. Valid options are xs, s, m, l, and xl.
Indicator Offset
By default, the filled indicator extends from the minimum value to the current position. Use the indicator-offset attribute to change the starting point of this visual indicator.
Disabled
Use the disabled attribute to disable a slider.
Readonly
Use the readonly attribute to show a value that users can’t change by dragging. Unlike disabled, a readonly slider stays focusable and its value is still submitted with the form.
Formatting the Value
Customize how values are displayed in tooltips and announced to screen readers using the valueFormatter property. Set it to a function that accepts a number and returns a formatted string. The Intl.NumberFormat API is particularly useful for this.
Reacting to Input
The slider emits an input event as the user drags, so you can drive live UI from its value in real time. Here, moving the slider resizes the preview text.
The quick brown fox jumps over the lazy dog.
Filtering with a Range
A range slider’s two thumbs make it a natural filter control. Here, dragging the thumbs hides list items whose price falls outside the selected range.
- Sticker pack — $15
- T-shirt — $30
- Hoodie — $55
- Backpack — $80
- Jacket — $120
API
Importing
If you're using the autoloader or a hosted project, components load on demand — no manual import needed. To cherry-pick this component, use one of the following snippets.
import '@cruglobal/cornerstone-components/components/slider/slider.js';
import './cornerstone/components/slider/slider.js';
import CsSlider from '@cruglobal/cornerstone-components/react/slider/index.js';
Slots
Learn more about using slots.
| Name | Description |
|---|---|
hint | Text that describes how to use the input. Alternatively, you can use the hint attribute. instead. |
label | The slider label. Alternatively, you can use the label attribute. |
reference | One or more reference labels to show visually below the slider. |
Attributes & Properties
Learn more about attributes and properties.
| Property | Attribute | Description | Type | Default | Reflects |
|---|---|---|---|---|---|
autofocus | autofocus | Tells the browser to focus the slider when the page loads or a dialog is shown. | boolean | — | — |
defaultValue | value | The default value of the form control. Primarily used for resetting the form control. | number | — | Yes |
disabled | disabled | Disables the slider. | boolean | false | — |
form | — | By default, form controls are associated with the nearest containing <form> element. This attribute allows you to place the form control outside of a form and associate it with the form that has this id. The form must be in the same document or shadow root for this to work. | HTMLFormElement | null | — | — |
hint | hint | The slider hint. If you need to display HTML, use the hint slot instead. | string | '' | — |
indicatorOffset | indicator-offset | The starting value from which to draw the slider's fill, which is based on its current value. | number | — | — |
isRange | — | Get if this is a range slider | boolean | — | — |
label | label | The slider's label. If you need to provide HTML in the label, use the label slot instead. | string | '' | — |
max | max | The maximum value allowed. | number | 100 | — |
maxValue | max-value | The maximum value of a range selection. Used only when range attribute is set. | number | 50 | — |
min | min | The minimum value allowed. | number | 0 | — |
minValue | min-value | The minimum value of a range selection. Used only when range attribute is set. | number | 0 | — |
name | name | The name of the slider. This will be submitted with the form as a name/value pair. | string | null | null | Yes |
orientation | orientation | The orientation of the slider. | 'horizontal' | 'vertical' | 'horizontal' | Yes |
range | range | Converts the slider to a range slider with two thumbs. | boolean | false | Yes |
readonly | readonly | Makes the slider a read-only field. | boolean | false | Yes |
size | size | The slider's size. | 'xs' | 's' | 'm' | 'l' | 'xl' | 'm' | Yes |
ssrHint | ssr-hint | Only required for SSR. Set to true if you're slotting in a hint element so the server-rendered markup includes the hint before the component hydrates on the client. | boolean | false | — |
ssrLabel | ssr-label | Only required for SSR. Set to true if you're slotting in a label element so the server-rendered markup includes the label before the component hydrates on the client. | boolean | false | — |
ssrReference | ssr-reference | Only required for SSR. Set to true if you're slotting in a reference element. | boolean | false | — |
step | step | The granularity the value must adhere to when incrementing and decrementing. | number | 1 | — |
tooltipDistance | tooltip-distance | The distance of the tooltip from the slider's thumb. | number | 8 | — |
tooltipPlacement | tooltip-placement | The placement of the tooltip in reference to the slider's thumb. | 'top' | 'right' | 'bottom' | 'left' | 'top' | Yes |
validationTarget | — | Override validation target to point to the focusable element | undefined | HTMLElement | — | — |
validators | — | Validators are static because they have observedAttributes, essentially attributes to "watch" for changes. Whenever these attributes change, we want to be notified and update the validator. | Validator[] | [] | — |
value | — | The current value of the slider, submitted as a name/value pair with form data. | number | — | — |
valueFormatter | — | A custom formatting function to apply to the value. This will be shown in the tooltip and announced by screen readers. Must be set with JavaScript. Property only. | (value: number) => string | — | — |
withMarkers | with-markers | Draws markers at each step along the slider. | boolean | false | — |
withTooltip | with-tooltip | Draws a tooltip above the thumb when the control has focus or is dragged. | boolean | false | — |
Methods
Learn more about methods.
| Name | Description | Arguments |
|---|---|---|
blur() | Removes focus from the slider. | — |
focus() | Sets focus to the slider. | — |
formStateRestoreCallback() | Called when the browser is trying to restore element’s state to state in which case reason is "restore", or when the browser is trying to fulfill autofill on behalf of user in which case reason is "autocomplete". In the case of "restore", state is a string, File, or FormData object previously set as the second argument to setFormValue. | state: string | File | FormData | null, reason: 'autocomplete' | 'restore' |
resetValidity() | Reset validity is a way of removing manual custom errors and native validation. | — |
setCustomValidity() | Do not use this when creating a "Validator". This is intended for end users of components. We track manually defined custom errors so we don't clear them on accident in our validators. | message: string |
stepDown() | Decreases the slider's value by step. This is a programmatic change, so input and change events will not be emitted when this is called. | — |
stepUp() | Increases the slider's value by step. This is a programmatic change, so input and change events will not be emitted when this is called. | — |
Events
Learn more about events.
| Name | Description |
|---|---|
blur | Emitted when the control loses focus. |
change | Emitted when an alteration to the control's value is committed by the user. |
cs-invalid | Emitted when the form control has been checked for validity and its constraints aren't satisfied. |
focus | Emitted when the control gains focus. |
input | Emitted when the control receives input. |
CSS Custom Properties
Learn more about CSS custom properties.
| Name | Description | Default |
|---|---|---|
--marker-height | The height of each individual marker. | 0.1875em |
--marker-width | The width of each individual marker. | 0.1875em |
--thumb-height | The height of the thumb. | 1.25em |
--thumb-width | The width of the thumb. | 1.25em |
--track-size | The height or width of the slider's track. | 0.75em |
Custom States
Learn more about custom states.
| Name | Description | CSS selector |
|---|---|---|
disabled | Applied when the slider is disabled. | :state(disabled) |
dragging | Applied when the slider is being dragged. | :state(dragging) |
focused | Applied when the slider has focus. | :state(focused) |
user-invalid | Applied when the slider is invalid and the user has sufficiently interacted with it. | :state(user-invalid) |
user-valid | Applied when the slider is valid and the user has sufficiently interacted with it. | :state(user-valid) |
CSS Parts
Learn more about CSS parts.
| Name | Description | CSS selector |
|---|---|---|
hint | The element that contains the slider's description. | ::part(hint) |
indicator | The colored indicator that shows from the start of the slider to the current value. | ::part(indicator) |
label | The element that contains the sliders's label. | ::part(label) |
marker | The individual markers that are shown when with-markers is used. | ::part(marker) |
markers | The container that holds all the markers when with-markers is used. | ::part(markers) |
references | The container that holds references that get slotted in. | ::part(references) |
slider | The focusable element with role="slider". Contains the track and reference slot. | ::part(slider) |
thumb | The slider's thumb. | ::part(thumb) |
thumb-max | The max value thumb in a range slider. | ::part(thumb-max) |
thumb-min | The min value thumb in a range slider. | ::part(thumb-min) |
tooltip | The tooltip, a <cs-tooltip> element. | ::part(tooltip) |
tooltip__arrow | The tooltip's arrow part. | ::part(tooltip__arrow) |
tooltip__body | The tooltip's body part. | ::part(tooltip__body) |
tooltip__tooltip | The tooltip's tooltip part. | ::part(tooltip__tooltip) |
track | The slider's track. | ::part(track) |
Dependencies
This component automatically imports the following elements. Sub-dependencies, if any exist, are included in this list.

