Range Sliders

This handy slider will allow you to drag a handle to select a specific value from a range.



Basic

You can create a range slider bar using minimal markup. The slider's value will be assigned to any <input type="hidden"> elements inside the data-slider div and as the value of the data-slider attribute.

Horizontal

By default, the range slider displays horizontally.

HTML

<div class="range-slider" data-slider> <span class="range-slider-handle" role="slider" tabindex="0"></span> <span class="range-slider-active-segment"></span> <input type="hidden"> </div>

Rendered HTML

Vertical

Adding the vertical-range class to the outer <div> and passing the data-option vertical: true; displays the slider vertically instead of horizontally.

HTML

<div class="range-slider vertical-range" data-slider data-options="vertical: true;"> <span class="range-slider-handle" role="slider" tabindex="0"></span> <span class="range-slider-active-segment"></span> <input type="hidden"> </div>

Rendered HTML

With Label

You can use the display_selector data option to pass in an element (or input) to display the slider value in.

HTML

<div class="row"> <div class="small-10 medium-11 columns"> <div class="range-slider" data-slider data-options="display_selector: #sliderOutput3;"> <span class="range-slider-handle" role="slider" tabindex="0"></span> <span class="range-slider-active-segment"></span> </div> </div> <div class="small-2 medium-1 columns"> <span id="sliderOutput3"></span> </div> </div>

Rendered HTML

With Input

If you use the display_selector data option to pass in an input, your users can use the input and their changes will be reflected on the slider.

HTML

<div class="row"> <div class="small-10 columns"> <div class="range-slider" data-slider data-options="display_selector: #days-off-count; initial: 28;"> <span class="range-slider-handle" role="slider" tabindex="0"></span> <span class="range-slider-active-segment"></span> </div> </div> <div class="small-2 columns"> <input type="number" id="days-off-count" value="28" /> </div> </div>

Rendered HTML


Advanced

Additional classes and data options can be added to your range slider to change its appearance and function.

Styling Classes

You can add a border radius to the range slider by adding the radius class to the range-slider element, or fully round it by adding the round class. Adding the disabled class or attribute to the slider will disable it completely.

HTML

<div class="range-slider radius" data-slider> <span class="range-slider-handle" role="slider" tabindex="0"></span> <span class="range-slider-active-segment"></span> <input type="hidden"> </div> <div class="range-slider round" data-slider> <span class="range-slider-handle" role="slider" tabindex="0"></span> <span class="range-slider-active-segment"></span> <input type="hidden"> </div> <div class="range-slider disabled" data-slider disabled> <span class="range-slider-handle" role="slider" tabindex="0"></span> <span class="range-slider-active-segment"></span> <input type="hidden"> </div>

Rendered HTML





Fixed Steps

You can create a range slider with fixed steps by setting the steps variable in the data-options attribute.

HTML

<div class="range-slider" data-slider data-options="step: 20;"> <span class="range-slider-handle" role="slider" tabindex="0"></span> <span class="range-slider-active-segment"></span> <input type="hidden"> </div>

Rendered HTML

Custom Range

You can create a range slider with custom range by setting the start and end variables in the data-options attribute.

HTML

<div class="range-slider" data-slider data-options="start: 1; end: 10;"> <span class="range-slider-handle" role="slider" tabindex="0"></span> <span class="range-slider-active-segment"></span> <input type="hidden"> </div>

Rendered HTML

Callbacks

There are two ways to bind to callbacks in your sliders.

Deprecation Notice

Previous versions of the slider plugin emitted an un-namespaced change event, however, this has been replaced by the namespaced change.fndtn.slider event. The un-namespaced event have been fully deprecated.

Callback Function

$(document).foundation({ slider: { on_change: function(){ // do something when the value changes } } });

Events

$('[data-slider]').on('change.fndtn.slider', function(){ // do something when the value changes });

Getting and Setting Values

To get the value of a slider, get the vale of its data-slider attribute.

Get Value

$('#slider').attr('data-slider');

To set a slider's value, call the foundation function on the slider and pass in 'slider', 'set_value' and the new slider value as arguments.

Set Value

var new_value = 3; $('.range-slider').foundation('slider', 'set_value', new_value);

Using the Javascript

Before you can use Slider you'll want to verify that jQuery and foundation.js are available on your page. You can refer to the Javascript documentation on setting that up.

Just add foundation.slider.js AFTER the foundation.js file. Your markup should look something like this:

<body> ... <script src="js/vendor/jquery.js"></script> <script src="js/foundation/foundation.js"></script> <script src="js/foundation/foundation.slider.js"></script> <!-- Other JS plugins can be included here --> <script> $(document).foundation(); </script> </body>

Required Foundation Library: foundation.slider.js


Accessibility

Because the range slider is a non-standard form input, assistive devices need some additional information to understand what they are. On the slider handle itself, you need the attribute role="slider", to inform assistive devices about the functionality of the element. You also need the attribute tabindex="0", so the element can be focused when navigating using a keyboard.

If the slider has a label, the label should be connected to the slider by giving the label a unique ID, and giving the slider the attribute aria-labelledby, using the ID of the label as the value. Our JavaScript handles the rest of the ARIA attributes.

<label id="sliderLabel">Age</label> <div class="range-slider" data-slider> <span class="range-slider-handle" role="slider" tabindex="0" aria-labelledby="sliderLabel"></span> <span class="range-slider-active-segment"></span> <input type="hidden"> </div>

If a slider doesn't have a text label, we recommend adding the attribute aria-label to the slider handle with an appropriate label.

<span class="range-slider-handle" role="slider" tabindex="0" aria-label="Age"></span>

Adding New Range Slider After Page Load

If you add new content after the page has been loaded, you will need to reinitialize the Foundation JavaScript by running the following:

$(document).foundation();

Reflow will make Foundation check the DOM for any elements and re-apply any listeners to them.

$(document).foundation('slider', 'reflow');

Customize with Sass

Sliders can be easily customized using our provided Sass variables.

$include-html-range-slider-classes: $include-html-classes; // These variables define the slider bar styles $range-slider-bar-width: 100%; $range-slider-bar-height: rem-calc(16); $range-slider-bar-border-width: 1px; $range-slider-bar-border-style: solid; $range-slider-bar-border-color: $gainsboro; $range-slider-radius: $global-radius; $range-slider-round: $global-rounded; $range-slider-bar-bg-color: $ghost; $range-slider-active-segment-bg-color: scale-color($secondary-color, $lightness: -1%); // Vertical bar styles $range-slider-vertical-bar-width: rem-calc(16); $range-slider-vertical-bar-height: rem-calc(200); // These variables define the slider handle styles $range-slider-handle-width: rem-calc(32); $range-slider-handle-height: rem-calc(22); $range-slider-handle-position-top: rem-calc(-5); $range-slider-handle-bg-color: $primary-color; $range-slider-handle-border-width: 1px; $range-slider-handle-border-style: solid; $range-slider-handle-border-color: none; $range-slider-handle-radius: $global-radius; $range-slider-handle-round: $global-rounded; $range-slider-handle-bg-hover-color: scale-color($primary-color, $lightness: -12%); $range-slider-handle-cursor: pointer; $range-slider-disabled-opacity: 0.7;

Sass Errors?

If the default "foundation" import was commented out, then make sure you import this file:

SCSS

@import "foundation/components/range-slider";




Building Blocks Using Range Sliders


Want more? Check out all the hot Building Blocks ⇨

Stay on top of what’s happening in responsive design.

Sign up to receive monthly Responsive Reading highlights. Read Last Month's Edition »