Skip to main content

CSS-only Tailwind CSS range slider with primary, secondary, accent, and semantic color variants. Sizes xsโ€“xl. WCAG AA accessible, works with Django, HTMX, Laravel, React, and any stack.

Range components allow users to select a numeric value within a defined range using an interactive slider. Built with native HTML range inputs and smooth styling, range sliders provide intuitive control over continuous values. The Frutjam range system supports multiple sizes, colors, and statesโ€”ideal for volume controls, price filters, and timeline scrubbing.

CSS-only, no JavaScript required. WCAG AA accessible and framework-agnostic โ€” works with Django, HTMX, Laravel, React, and any stack.

Class Type Description
rangeBaseStyled range slider input
range-xsSizeExtra small
range-smSizeSmall
range-mdSizeMedium (default)
range-lgSizeLarge
range-xlSizeExtra large
range-primaryColorPrimary theme color
range-secondaryColorSecondary theme color
range-accentColorAccent theme color
range-neutralColorNeutral theme color
range-infoColorInfo semantic color
range-successColorSuccess semantic color
range-warningColorWarning semantic color
range-errorColorError semantic color

Basic Usage

<input type="range" min="0" max="100" value="40" class="range">
<input type="range" min="0" max="100" value="40" className="range">

Range Sizes

html
1
2
3
4
5
<input type="range" min="0" max="100" value="40" class="range range-xs">
<input type="range" min="0" max="100" value="40" class="range range-sm">
<input type="range" min="0" max="100" value="40" class="range range-md">
<input type="range" min="0" max="100" value="40" class="range range-lg">
<input type="range" min="0" max="100" value="40" class="range range-xl">

Range Colors

html
1
2
3
4
5
6
7
8
<input type="range" min="0" max="100" value="40" class="range">
<input type="range" min="0" max="100" value="40" class="range range-primary">
<input type="range" min="0" max="100" value="40" class="range range-secondary">
<input type="range" min="0" max="100" value="40" class="range range-accent">
<input type="range" min="0" max="100" value="40" class="range range-info">
<input type="range" min="0" max="100" value="40" class="range range-success">
<input type="range" min="0" max="100" value="40" class="range range-warning">
<input type="range" min="0" max="100" value="40" class="range range-error">

Range with Steps

html
1
2
3
<input type="range" min="0" max="100" step="10" value="40" class="range">
<input type="range" min="0" max="100" step="5" value="40" class="range range-primary">
<input type="range" min="0" max="100" step="1" value="40" class="range range-secondary">

Range with Label

html
1
2
3
4
5
6
7
8
9
<label>
  <span class="block text-sm font-medium mb-2">Volume</span>
  <input type="range" min="0" max="100" value="70" class="range range-primary">
</label>

<label>
  <span class="block text-sm font-medium mb-2">Price Range: $20 - $80</span>
  <input type="range" min="0" max="100" value="50" class="range">
</label>

Disabled Range

html
<input type="range" min="0" max="100" value="40" class="range" disabled>

Range with Marks

0 25 50 75 100
html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<div>
  <div class="flex justify-between text-xs mb-2">
    <span>0</span>
    <span>25</span>
    <span>50</span>
    <span>75</span>
    <span>100</span>
  </div>
  <input type="range" min="0" max="100" value="50" class="range range-primary w-full">
</div>