Range
A range input allows users to select a value from a specified range.
| Class name | Type | |
|---|---|---|
.prs-range |
Component | For <input> or <label> |
.prs-range-info |
Modifier | Blue variant |
.prs-range-success |
Modifier | Green variant |
.prs-range-warning |
Modifier | Yellow variant |
.prs-range-danger |
Modifier | Red variant |
.prs-range_focus |
State | Manually apply visual focus |
.prs-range_disabled |
State | Manually apply visual disabled |
-
<div class="w-96 max-w-xs space-y-5"> <!-- <- this is just for demo purposes --> <label><input type="range" min="0" max="100" value="50" class="prs-range" aria-label="Range" /></label> <div> <label><input type="range" min="1" max="5" step="1" value="2" class="prs-range" aria-label="Range" /></label> <div class="p-1 w-full text-(gray-500 xs) font-mono [font-variant-numeric:tabular-nums] flex justify-between pointer-events-none select-none" aria-hidden="true"> <!-- <- this is just for demo purposes --> <span>1</span><span>2</span><span>3</span><span>4</span><span>5</span> </div> </div> </div> -
<div class="w-96 max-w-xs"> <!-- <- this is just for demo purposes --> <label><input type="range" min="0" max="100" value="50" class="prs-range prs-range-info" aria-label="Range" /></label> </div> -
<div class="w-96 max-w-xs"> <!-- <- this is just for demo purposes --> <label><input type="range" min="0" max="100" value="50" class="prs-range prs-range-success" aria-label="Range" /></label> </div> -
<div class="w-96 max-w-xs"> <!-- <- this is just for demo purposes --> <label><input type="range" min="0" max="100" value="50" class="prs-range prs-range-warning" aria-label="Range" /></label> </div> -
<div class="w-96 max-w-xs"> <!-- <- this is just for demo purposes --> <label><input type="range" min="0" max="100" value="50" class="prs-range prs-range-danger" aria-label="Range" /></label> </div> -
<div class="w-96 max-w-xs space-y-5 [&>:where(label:not(.prs-form-control))]:(w-full block)"> <!-- <- this is just for demo purposes --> <label><input type="range" min="0" max="100" value="50" class="prs-range prs-range_focus" aria-label="Range" /></label> <label><input type="range" min="0" max="100" value="50" class="prs-range prs-range-info prs-range_focus" aria-label="Range" /></label> <label><input type="range" min="0" max="100" value="50" class="prs-range prs-range-success prs-range_focus" aria-label="Range" /></label> <label><input type="range" min="0" max="100" value="50" class="prs-range prs-range-warning prs-range_focus" aria-label="Range" /></label> <label><input type="range" min="0" max="100" value="50" class="prs-range prs-range-danger prs-range_focus" aria-label="Range" /></label> </div> -
<div class="w-96 max-w-xs"> <!-- <- this is just for demo purposes --> <label><input type="range" min="0" max="100" value="50" class="prs-range" aria-label="Range" disabled /></label> </div>
CSS
Full Library
Component Only
.prs-range {
--filler: var(--prs-c-primary);
--filler-size: 100rem;
--filler-offset: 0.6rem;
appearance: none;
width: 100%;
height: 1rem;
background: transparent;
display: block;
overflow: hidden;
cursor: pointer;
border-radius: 9999px;
}
.prs-range::-webkit-slider-runnable-track {
appearance: none;
width: 100%;
height: 0.5rem;
background-color: var(--prs-c-gray-300);
align-items: center;
border-radius: 9999px;
}
.prs-range::-moz-range-track {
appearance: none;
width: 100%;
height: 0.5rem;
background-color: var(--prs-c-gray-300);
align-items: center;
border-radius: 9999px;
}
.prs-range::-webkit-slider-thumb {
appearance: none;
border-style: none;
width: 1rem;
height: 1rem;
background-color: var(--prs-c-white);
color: var(--filler);
position: relative;
top: 50%;
transform: translateY(-50%);
border-radius: 9999px;
box-shadow: 0 0 0 3px var(--filler) inset, 0 0, calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size);
transition-property: var(--prs-transition-property);
transition-timing-function: var(--prs-transition-timing);
transition-duration: var(--prs-transition-duration);
}
.prs-range::-moz-range-thumb {
--filler-offset: 0.5rem;
appearance: none;
border-style: none;
width: 1rem;
height: 1rem;
background-color: var(--prs-c-white);
color: var(--filler);
position: relative;
top: 50%;
border-radius: 9999px;
box-shadow: 0 0 0 3px var(--filler) inset, 0 0, calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size);
transition-property: var(--prs-transition-property);
transition-timing-function: var(--prs-transition-timing);
transition-duration: var(--prs-transition-duration);
}
.prs-range-info {
--filler: var(--prs-c-info);
}
.prs-range-success {
--filler: var(--prs-c-success-700);
}
.prs-range-warning {
--filler: var(--prs-c-warning-700);
}
.prs-range-danger {
--filler: var(--prs-c-danger);
}
.prs-range:focus-visible,.prs-range:where(.prs-range_focus) {
outline: 2px solid var(--filler);
outline-offset: 1px;
}
.prs-range:disabled {
--filler: var(--prs-c-gray-400);
background-color: transparent;
cursor: not-allowed;
}
Coming soon...