8.0k New

Slider

An input where the user selects a value from within a given range.

Docs API Reference

Epicenter

Local-first, open source apps

Special Sponsor
<script lang="ts">
  import { Slider } from "$lib/components/ui/slider/index.js";
 
  let value = $state(75);
</script>
 
<Slider
  type="single"
  bind:value
  max={100}
  step={1}
  class="mx-auto w-full max-w-xs"
/>

Installation

pnpm dlx shadcn-svelte@latest add slider

Usage

<script lang="ts">
  import { Slider } from "$lib/components/ui/slider/index.js";
  let value = $state(33);
</script>
<Slider type="single" bind:value max={100} step={1} />

Range

Use type="multiple" with an array of two values for a range slider.

<script lang="ts">
  import { Slider } from "$lib/components/ui/slider/index.js";
 
  let value = $state([25, 50]);
</script>
 
<Slider
  type="multiple"
  bind:value
  max={100}
  step={5}
  class="mx-auto w-full max-w-xs"
/>

Multiple Thumbs

Use an array with multiple values for multiple thumbs.

<script lang="ts">
  import { Slider } from "$lib/components/ui/slider/index.js";
 
  let value = $state([10, 20, 70]);
</script>
 
<Slider
  type="multiple"
  bind:value
  max={100}
  step={10}
  class="mx-auto w-full max-w-xs"
/>

Vertical

Use orientation="vertical" for a vertical slider.

<script lang="ts">
  import { Slider } from "$lib/components/ui/slider/index.js";
 
  let first = $state(50);
  let second = $state(25);
</script>
 
<div class="mx-auto flex w-full max-w-xs items-center justify-center gap-6">
  <Slider
    type="single"
    bind:value={first}
    max={100}
    step={1}
    orientation="vertical"
    class="h-40"
  />
  <Slider
    type="single"
    bind:value={second}
    max={100}
    step={1}
    orientation="vertical"
    class="h-40"
  />
</div>

Controlled

0.3, 0.7
<script lang="ts">
  import { Label } from "$lib/components/ui/label/index.js";
  import { Slider } from "$lib/components/ui/slider/index.js";
 
  let value = $state([0.3, 0.7]);
</script>
 
<div class="mx-auto grid w-full max-w-xs gap-3">
  <div class="flex items-center justify-between gap-2">
    <Label for="slider-demo-temperature">Temperature</Label>
    <span class="text-sm text-muted-foreground">{value.join(", ")}</span>
  </div>
  <Slider
    type="multiple"
    id="slider-demo-temperature"
    bind:value
    min={0}
    max={1}
    step={0.1}
  />
</div>

Disabled

Use the disabled prop to disable the slider.

<script lang="ts">
  import { Slider } from "$lib/components/ui/slider/index.js";
 
  let value = $state(50);
</script>
 
<Slider
  type="single"
  bind:value
  max={100}
  step={1}
  disabled
  class="mx-auto w-full max-w-xs"
/>