range-slider-element
Version: 
A cross browser customizable and accessible <range-slider> web component
113 lines (73 loc) • 3.6 kB
Markdown
# <range-slider> element
> A cross browser customizable and accessible <range-slider> web component.
[](https://github.com/andreruffert/range-slider-element/actions/workflows/test.yml)
[](https://www.npmjs.com/package/range-slider-element)
[](https://pkg-size.dev/range-slider-element)
[](https://www.npmjs.com/package/range-slider-element)
[](https://www.jsdelivr.com/package/npm/range-slider-element)
## Features
* Framework agnostic [web component](https://developer.mozilla.org/en-US/docs/Web/API/Web_components) (no dependencies)
* Cross browser customizable styling
* Single and multi thumb
* Horizontal and vertical orientations
* Works like a built-in HTML form element (uses [ElementInternals](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals))
* Keyboard accessible (use arrow keys)
* Touch friendly
* Follows the [ARIA best practices guide on sliders](https://www.w3.org/WAI/ARIA/apg/patterns/slider)
## Install
Install via npm
```shell
npm install range-slider-element
```
## Usage
### JavaScript
Import as ES module
```js
import 'range-slider-element';
```
Or via CDN
```html
<script type="module" src="https://cdn.jsdelivr.net/npm/range-slider-element@2/+esm"></script>
```
### HTML
```html
<range-slider min="0" max="100" step="1" value="50"></range-slider>
```
### CSS
Make sure to load the base styles exported via `range-slider-element/style.css`.
Or via CDN
```html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/range-slider-element@2/dist/range-slider-element.css">
```
## Attributes
* `min` The minimum permitted value. The default is `0`.
* `max` The maximum permitted value. The default is `100`.
* `step` The stepping interval. The default is `1`.
* `value` The value. The default is `min + (max - min) / 2`.
* [`dir`][dir] Directionality. The default is ltr. Allowed options `rtl`.
* `orientation` The default is horizontal. Allowed options `vertical`.
[dir]: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir
## Styling
**CSS custom properties**
Exposed CSS custom properties scoped within the `range-slider` element.
* `--track-size` - The track size. The default is `0.2rem`. Can be overwritten for customization.
* `--thumb-size` - The thumb size. The default is `1.2rem`. Can be overwritten for customization.
**DOM selectors**
```css
range-slider {}
range-slider [data-track] {}
range-slider [data-track-fill] {}
range-slider [data-thumb] {}
/* Advanced customization */
range-slider [data-runnable-track] {}
```
For examples of how to customize the default styling, check out the [docs][docs].
[docs]: https://andreruffert.github.io/range-slider-element
## Events
* `input` - Pointer move, value changed. Bubbles.
* `change` - Pointer up, key up, value changed. Bubbles.
## Examples
For examples checkout the [CodePen <range-slider> collection](https://codepen.io/collection/XPJJbq).
## License
Distributed under the MIT license. See LICENSE for details. 
© [André Ruffert](https://andreruffert.com)