The ld-slider component can be used to select a single numeric value or a range of numeric values.
<ld-slider></ld-slider><ld-slider value="40"></ld-slider><ld-slider min="-50" max="50"></ld-slider><ld-slider size="sm"></ld-slider>
<ld-slider></ld-slider>
<ld-slider size="lg"></ld-slider><ld-slider disabled value="40"></ld-slider>
<ld-slider aria-disabled="true" value="40"></ld-slider><ld-slider step="5"></ld-slider>Custom stops behave just like steps, but without the need for an even distance between them.
<ld-slider stops="20,35,45,60,85"></ld-slider>snap-offset="0" to just add the labels for the custom stops without forcing them to behave like steps.
<ld-slider indicators step="10"></ld-slider>
<ld-slider indicators stops="20,35,45,60,85"></ld-slider><ld-slider indicators snap-offset="2" step="10"></ld-slider>
<ld-slider snap-offset="2" stops="20,35,45,60,85"></ld-slider>← → ↑ ↓ or click on the track to select values near the snap-points.
You can add 2 or more comma-separated values to the slider. This results in additional thumbs being added.
<ld-slider value="40,90"></ld-slider>
<ld-slider value="30,60,90"></ld-slider>
<ld-slider value="20,50,70,90"></ld-slider>The swappable mode allows swapping the thumbs.
<ld-slider swappable value="40,90"></ld-slider><ld-slider hide-values value="40,90"></ld-slider><ld-slider hide-value-labels value="40,90"></ld-slider><ld-slider hide-stop-labels indicators stops="20,40,60,90" value="40,90"></ld-slider><ld-slider unit="%"></ld-slider>
<ld-slider unit=" px" stops="24,64,96" max="128"></ld-slider>The negative mode highlights deselected ranges as selected and vice versa.
<ld-slider negative value="50"></ld-slider>
<ld-slider negative value="40,90"></ld-slider>By default, the ld-slider applies a width of 100%. You can set it to any fixed width using the width prop.
<ld-slider width="20rem"></ld-slider>100% is not supported, but you can work around this by wrapping the component in a container and give that container any width you like.
  ld-slider inside a flexbox container.
<div class="flex">
  <ld-input id="from" type="number" value="40"></ld-input>
  <ld-slider id="slider1" value="40,90" width="20rem"></ld-slider>
  <ld-input id="to" type="number" value="90"></ld-input>
</div>
<div class="flex">
  <ld-button id="minus">-</ld-button>
  <ld-slider id="slider2" value="40" width="20rem"></ld-slider>
  <ld-button id="plus">+</ld-button>
</div>
<style>
  .flex {
    align-items: end;
    display: flex;
    flex-wrap: wrap;
    gap: var(--ld-sp-8);
    justify-content: center;
  }
  #from, #to, #minus, #plus {
    flex: 0 0 auto;
    margin-bottom: 1.125rem;
    width: 3rem;
  }
  #from::part(input), #to::part(input) {
    text-align: center;
  }
</style>
<script>
  const slider1 = document.getElementById('slider1')
  const slider2 = document.getElementById('slider2')
  const from = document.getElementById('from')
  const to = document.getElementById('to')
  const minus = document.getElementById('minus')
  const plus = document.getElementById('plus')
  const handleInput = (event) => {
    if (!from.value || !to.value) {
      return
    }
    slider1.value = [from.value, to.value].join(',')
  }
  slider1.addEventListener('ldchange', (event) => {
    const [newFrom, newTo] = event.detail
    from.value = newFrom
    to.value = newTo
  })
  from.addEventListener('input', handleInput)
  to.addEventListener('input', handleInput)
  slider2.addEventListener('ldchange', (event) => {
    const [newValue] = event.detail
    if (newValue === 0) {
      minus.disabled = true
    } else {
      minus.disabled = false
    }
    if (newValue === 100) {
      plus.disabled = true
    } else {
      plus.disabled = false
    }
  })
  minus.addEventListener('click', () => {
    const currValue = Number.parseInt(slider2.value)
    if (currValue <= 0) return
    slider2.value = String(currValue - 1)
  })
  plus.addEventListener('click', () => {
    const currValue = Number.parseInt(slider2.value)
    if (currValue >= 100) return
    slider2.value = String(currValue + 1)
  })
</script>| Property | Attribute | Description | Type | Default | 
|---|---|---|---|---|
| ariaDisabled | aria-disabled | Alternative disabled state that keeps element focusable | string | undefined | 
| disabled | disabled | Disabled state of the slider | boolean | false | 
| hideStopLabels | hide-stop-labels | Prevents rendering of the stop labels below the slider | boolean | false | 
| hideValueLabels | hide-value-labels | Prevents rendering of the value labels below the slider | boolean | false | 
| hideValues | hide-values | Makes the current values only visible on interaction | boolean | false | 
| indicators | indicators | Specifies the legal number intervals | boolean | false | 
| key | key | for tracking the node's identity when working with lists | string | number | undefined | 
| labelFrom | label-from | "From" value label (when exactly 2 values are given) | string | 'From' | 
| labelTo | label-to | "To" value label (when exactly 2 values are given) | string | 'To' | 
| labelValue | label-value | "Value" label (when exactly 2 values are given) | string | 'Value' | 
| ldTabindex | ld-tabindex | Tab index of the input(s). | number | undefined | 
| max | max | Specifies the maximum value allowed | number | 100 | 
| min | min | Specifies the minimum value allowed | number | 0 | 
| negative | negative | Swap which areas are being marked as selected and deselected | boolean | false | 
| ref | ref | reference to component | any | undefined | 
| size | size | Size of the thumb(s). | "lg" | "sm" | undefined | 
| snapOffset | snap-offset | Offset inside which a thumb snaps to a stop point | number | undefined | 
| step | step | Specifies the legal number intervals | number | undefined | 
| stops | stops | Adds custom stop points to the slider (instead of steps) | string | undefined | 
| swappable | swappable | Allows swapping of thumbs | boolean | false | 
| unit | unit | Adds custom stop points to the slider (instead of steps) | string | undefined | 
| value | value | Specifies the default value | string | String(this.min) | 
| width | width | Width of the slider | string | '100%' | 
| Event | Description | Type | 
|---|---|---|
| ldchange | CustomEvent<number[]> | 
focusInner() => Promise<void> #Focuses the toggle
Type: Promise<void>
| Part | Description | 
|---|---|
| "focusable" | |
| "indicator" | Stop/step indicator div elements | 
| "input" | inputelements | 
| "label" | ld-sr-onlyelements labelling an input | 
| "output" | outputelements | 
| "value-label" | divelement containing the max/min/stops values + unit | 
graph TD;
  ld-slider --> ld-sr-only
  style ld-slider fill:#f9f,stroke:#333,stroke-width:4pxBuilt with StencilJS