Web Awesome (ViUR)

Font Awesome
Try SSR Server-side rendering (SSR) generates component HTML on the server before the page loads, improving SEO and initial load time. Use the switch to see Web Awesome components render with and without SSR.
Search this website ⌘KCtrl+K Light Dark System Docs Select Color Scheme Default Awesome Shoelace Active Brutalist Glossy Matter Mellow Playful Premium Tailspin Docs Select Theme View Project on GitHub Star Project on GitHub
Start Components Docs Help
Web Awesome Font Awesome Build Awesome
Search this site… /
Try SSR Server-side rendering (SSR) generates component HTML on the server before the page loads, improving SEO and initial load time. Use the switch to see Web Awesome components render with and without SSR.
Light Dark System Docs Select Color Scheme Default Awesome Shoelace Active Brutalist Glossy Matter Mellow Playful Premium Tailspin Docs Select Theme

Getting Started

  • Installation
  • Usage
  • Forms
  • Localization
  • Frameworks
  • Using with AI
  • Figma Design Kit ProThis requires access to Web Awesome Pro
  • Server Rendering

Resources

  • Accessibility
  • Browser Support
  • Contributing
  • Patterns ProPatterns require access to Web Awesome Pro
  • Migrating from Shoelace
  • Visual Tests
  • Changelog
  • Help & Support

Theming & Utilities

  • Overview
  • Built-in Themes
  • Color Palettes
  • Design Tokens
  • Customizing & Theming
  • CSS Utilities

ViUR Components

  • Alert
  • Combobox
  • Pagination
  • Table Wrapper

Actions

  • Button
  • Button Group
  • Copy Button
  • Dropdown
    • Dropdown Item

Forms

  • Checkbox
  • Checkbox Group
  • Color Picker
  • Input
  • Known Date
  • Number Input
  • Radio Group
    • Radio
  • Rating
  • Select
    • Option
  • Slider
  • Switch
  • Textarea
  • Time Input
  • Data Grid Planned A Web Awesome Kickstarter stretch goal!

Layout

  • Accordion
    • Accordion Item
  • Card
  • Details
  • Dialog
  • Divider
  • Drawer
  • Page
  • Scroller
  • Split Panel

Navigation

  • Breadcrumb
    • Breadcrumb Item
  • Tab Group
    • Tab
    • Tab Panel
  • Tree
    • Tree Item

Feedback

  • Badge
  • Callout
  • Progress Bar
  • Progress Ring
  • Skeleton
  • Spinner
  • Tag
  • Tooltip

Media

  • Animated Image
  • Avatar
  • Carousel
    • Carousel Item
  • Comparison
  • Icon
  • Markdown
  • QR Code
  • Zoomable Frame

Data Viz

  • Advanced Usage

Helpers

  • Animation
  • Format Bytes
  • Format Date
  • Format Number
  • Include
  • Intersection Observer
  • Mutation Observer
  • Popover
  • Popup
  • Random Content
  • Relative Time
  • Resize Observer

Slider

  • Examples
  • Labels
  • Hint
  • Showing Tooltips
  • Setting Min, Max, & Step
  • Showing Markers
  • Adding References
  • Formatting the Value
  • Range Selection
  • Vertical Sliders
  • Size
  • Indicator Offset
  • Disabled
  • Importing
  • Slots
  • Attributes & Properties
  • Methods
  • Events
  • CSS Custom Properties
  • Custom States
  • CSS Parts
  • Dependencies
On This Page...
  • Examples
  • Labels
  • Hint
  • Showing Tooltips
  • Setting Min, Max, & Step
  • Showing Markers
  • Adding References
  • Formatting the Value
  • Range Selection
  • Vertical Sliders
  • Size
  • Indicator Offset
  • Disabled
  • Importing
  • Slots
  • Attributes & Properties
  • Methods
  • Events
  • CSS Custom Properties
  • Custom States
  • CSS Parts
  • Dependencies

Slider

<wa-slider>
Stable Forms Since 2.0

Sliders let users choose a numeric value within a defined range by dragging a thumb along a track.

Less More
<wa-slider
  label="Number of users"
  hint="Limit six per team"
  name="value"
  value="3"
  min="0"
  max="6"
  with-markers
  with-tooltip
>
  <span slot="reference">Less</span>
  <span slot="reference">More</span>
</wa-slider>

This component works with standard <form> elements. Please refer to the section on form controls to learn more about form submission and client-side validation.

Examples

Link to This Section

Labels

Link to This Section

Use the label attribute to give the slider an accessible label. For labels that contain HTML, use the label slot instead.

<wa-slider label="Volume" min="0" max="100"></wa-slider>

Hint

Link to This Section

Add descriptive hint to a slider with the hint attribute. For hints that contain HTML, use the hint slot instead.

<wa-slider label="Volume" hint="Controls the volume of the current song." min="0" max="100" value="50"></wa-slider>

Showing Tooltips

Link to This Section

Use the with-tooltip attribute to display a tooltip with the current value when the slider is focused or being dragged.

<wa-slider label="Quality" name="quality" min="0" max="100" value="50" with-tooltip></wa-slider>

Setting Min, Max, & Step

Link to This Section

Use the min and max attributes to define the slider's range, and the step attribute to control the increment between values.

<wa-slider label="Between zero and one" min="0" max="1" step="0.1" value="0.5" with-tooltip></wa-slider>

Showing Markers

Link to This Section

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.

<wa-slider label="Size" name="size" min="0" max="8" value="4" with-markers></wa-slider>

Adding References

Link to This Section

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.

Slow Medium Fast
<wa-slider
  label="Speed"
  name="speed"
  min="1"
  max="5"
  value="3"
  with-markers
  hint="Controls the speed of the thing you're currently doing."
>
  <span slot="reference">Slow</span>
  <span slot="reference">Medium</span>
  <span slot="reference">Fast</span>
</wa-slider>

If you want to show a reference next to a specific marker, you can add position: absolute to it and set the left, right, top, or bottom property to a percentage that corresponds to the marker's position.

Formatting the Value

Link to This Section

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.



<!-- Percent -->
<wa-slider
  id="slider__percent"
  label="Percentage"
  name="percentage"
  value="0.5"
  min="0"
  max="1"
  step=".01"
  with-tooltip
></wa-slider
><br />

<script>
  const slider = document.getElementById('slider__percent');
  const formatter = new Intl.NumberFormat('en-US', { style: 'percent' });

  customElements.whenDefined('wa-slider').then(() => {
    slider.valueFormatter = value => formatter.format(value);
  });
</script>

<!-- Duration -->
<wa-slider id="slider__duration" label="Duration" name="duration" value="12" min="0" max="24" with-tooltip></wa-slider
><br />

<script>
  const slider = document.getElementById('slider__duration');
  const formatter = new Intl.NumberFormat('en-US', { style: 'unit', unit: 'hour', unitDisplay: 'long' });

  customElements.whenDefined('wa-slider').then(() => {
    slider.valueFormatter = value => formatter.format(value);
  });
</script>

<!-- Currency -->
<wa-slider id="slider__currency" label="Currency" name="currency" min="0" max="100" value="50" with-tooltip></wa-slider>

<script>
  const slider = document.getElementById('slider__currency');
  const formatter = new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD',
    currencyDisplay: 'symbol',
    maximumFractionDigits: 0,
  });

  customElements.whenDefined('wa-slider').then(() => {
    slider.valueFormatter = value => formatter.format(value);
  });
</script>

Range Selection

Link to This Section

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.

$0 $50 $100
<wa-slider
  label="Price Range"
  hint="Select minimum and maximum price"
  name="price"
  range
  min="0"
  max="100"
  min-value="20"
  max-value="80"
  with-tooltip
  id="slider__range"
>
  <span slot="reference">$0</span>
  <span slot="reference">$50</span>
  <span slot="reference">$100</span>
</wa-slider>

<script>
  const slider = document.getElementById('slider__range');
  const formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', maximumFractionDigits: 0 });

  customElements.whenDefined('wa-slider').then(() => {
    slider.valueFormatter = value => formatter.format(value);
  });
</script>

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('wa-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

Link to This Section

Set the orientation attribute to vertical to create a vertical slider. Vertical sliders automatically center themselves and fill the available vertical space.

<div style="display: flex; gap: 1rem;">
  <wa-slider orientation="vertical" label="Volume" name="volume" value="65" style="width: 80px"></wa-slider>

  <wa-slider orientation="vertical" label="Bass" name="bass" value="50" style="width: 80px"></wa-slider>

  <wa-slider orientation="vertical" label="Treble" name="treble" value="40" style="width: 80px"></wa-slider>
</div>

Range sliders can also be vertical.

<div style="height: 300px; display: flex; align-items: center; gap: 2rem;">
  <wa-slider
    label="Temperature Range"
    orientation="vertical"
    range
    min="0"
    max="100"
    min-value="30"
    max-value="70"
    with-tooltip
    tooltip-placement="right"
    id="slider__vertical-range"
  >
  </wa-slider>
</div>

<script>
  const slider = document.getElementById('slider__vertical-range');
  slider.valueFormatter = value => {
    return new Intl.NumberFormat('en', {
      style: 'unit',
      unit: 'fahrenheit',
      unitDisplay: 'short',
      minimumFractionDigits: 0,
      maximumFractionDigits: 1,
    }).format(value);
  };
</script>

Size

Link to This Section

Control the slider's size using the size attribute. Valid options include xs, s, m, l, and xl.





<wa-slider size="xs" value="50" label="Extra Small"></wa-slider><br />
<wa-slider size="s" value="50" label="Small"></wa-slider><br />
<wa-slider size="m" value="50" label="Medium"></wa-slider><br />
<wa-slider size="l" value="50" label="Large"></wa-slider><br />
<wa-slider size="xl" value="50" label="Extra Large"></wa-slider>

Indicator Offset

Link to This Section

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.

Easy Moderate Difficult
<wa-slider
  label="User Friendliness"
  hint="Did you find our product easy to use?"
  name="value"
  value="0"
  min="-5"
  max="5"
  indicator-offset="0"
  with-markers
  with-tooltip
>
  <span slot="reference">Easy</span>
  <span slot="reference">Moderate</span>
  <span slot="reference">Difficult</span>
</wa-slider>

Disabled

Link to This Section

Use the disabled attribute to disable a slider.

<wa-slider label="Disabled" value="50" disabled></wa-slider>

Importing

Link to This Section

If you're using the autoloader or a hosted project, components load on demand — no manual import needed. To cherry-pick a component manually, use one of the following snippets.

CDN npm Self-Hosted React

Import this component directly from the CDN:

import 'https://ka-f.webawesome.com/webawesome@0.17.0/components/slider/slider.js';

After installing Web Awesome via npm, import this component:

import '@awesome.me/webawesome/dist/components/slider/slider.js';

If you're self-hosting Web Awesome, import this component from your server:

import './webawesome/dist/components/slider/slider.js';

To import this component for React 18 or below, use the following code:

import WaSlider from '@awesome.me/webawesome/dist/react/slider/index.js';

Slots

Link to This Section

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

Link to This Section

Learn more about attributes and properties.

Name Description Reflects
autofocus
autofocus
Tells the browser to focus the slider when the page loads or a dialog is shown.
Type boolean
defaultValue
value
The default value of the form control. Primarily used for resetting the form control.
Type number
disabled
disabled
Disables the slider.
Type boolean
Default 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.
Type HTMLFormElement | null
hint
hint
The slider hint. If you need to display HTML, use the hint slot instead.
Type string
Default ''
indicatorOffset
indicator-offset
The starting value from which to draw the slider's fill, which is based on its current value.
Type number
isRange
Get if this is a range slider
Type boolean
label
label
The slider's label. If you need to provide HTML in the label, use the label slot instead.
Type string
Default ''
max
max
The maximum value allowed.
Type number
Default 100
maxValue
max-value
The maximum value of a range selection. Used only when range attribute is set.
Type number
Default 50
min
min
The minimum value allowed.
Type number
Default 0
minValue
min-value
The minimum value of a range selection. Used only when range attribute is set.
Type number
Default 0
name
name
The name of the slider. This will be submitted with the form as a name/value pair.
Type string | null
Default null
orientation
orientation
The orientation of the slider.
Type 'horizontal' | 'vertical'
Default 'horizontal'
range
range
Converts the slider to a range slider with two thumbs.
Type boolean
Default false
readonly
readonly
Makes the slider a read-only field.
Type boolean
Default false
size
size
The slider's size.
Type 'xs' | 's' | 'm' | 'l' | 'xl' | 'small' | 'medium' | 'large'
Default 'm'
step
step
The granularity the value must adhere to when incrementing and decrementing.
Type number
Default 1
tooltipDistance
tooltip-distance
The distance of the tooltip from the slider's thumb.
Type number
Default 8
tooltipPlacement
tooltip-placement
The placement of the tooltip in reference to the slider's thumb.
Type 'top' | 'right' | 'bottom' | 'left'
Default 'top'
validationTarget
Override validation target to point to the focusable element
Type 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.
Type Validator[]
Default []
value
The current value of the slider, submitted as a name/value pair with form data.
Type 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.
Type (value: number) => string
withHint
with-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.
Type boolean
Default false
withLabel
with-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.
Type boolean
Default false
withMarkers
with-markers
Draws markers at each step along the slider.
Type boolean
Default false
withTooltip
with-tooltip
Draws a tooltip above the thumb when the control has focus or is dragged.
Type boolean
Default false

Methods

Link to This Section

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

Link to This Section

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.
focus Emitted when the control gains focus.
input Emitted when the control receives input.
wa-invalid Emitted when the form control has been checked for validity and its constraints aren't satisfied.

CSS Custom Properties

Link to This Section

Learn more about CSS custom properties.

Name Description
--marker-height
The height of each individual marker.
Default 0.1875em
--marker-width
The width of each individual marker.
Default 0.1875em
--thumb-height
The height of the thumb.
Default 1.25em
--thumb-width
The width of the thumb.
Default 1.25em
--track-size
The height or width of the slider's track.
Default 0.75em

Custom States

Link to This Section

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

Link to This Section

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 <wa-tooltip> element. ::part(tooltip)
tooltip__arrow The tooltip's arrow part. ::part(tooltip__arrow)
tooltip__content The tooltip's content part. ::part(tooltip__content)
tooltip__tooltip The tooltip's tooltip part. ::part(tooltip__tooltip)
track The slider's track. ::part(track)

Dependencies

Link to This Section

This component automatically imports the following elements. Sub-dependencies, if any exist, will also be included in this list.

  • <wa-popup>
  • <wa-tooltip>
Need a hand? Report a bug Ask for help
Go Make Something Awesome
Version 0.17.0 © Fonticons, Inc.
  • Terms
  • Privacy
  • Refunds
  • Core License
  • Pro License

Quick Links

  • Components
  • CSS Utilities
  • Theming
  • Using with AI
  • Changelog
  • Help & Support

Recent Searches

    D'oh! No results for “”

    Suggest on GitHub Ask on Discord
    Navigate Select
    Close Esc