Slider
Slider
The slider component allows users to visualize a relative amount or portion of a whole. The slider should be implemented when users are required to set a value that falls within a bounded range in order to provide visual feedback about where that value falls. Sliders can have a discrete or continuous scale, depending on the use case. Continuous scales simply rely on a min and max value whereas discrete scales allow users to snap to specific values.
Use cases for sliders can vary a great deal, but some examples include:
- Setting storage size, memory limit, or other configuration options
- Setting a time range on a chart
- Setting price ranges or other filters
Slider Example
Slider
-
Label: There should be a slider label to the left of the slider, indicating what the slider values represent. A text string or an icon may be used in the label position.
- Slider Handle:
- The slider handle should sit on the selected value.
- The slider handle should move when users click and drag, when users click on a new area along the slide, and when users enter a new value in the field input.
- For discrete sliders, the handle should snap to the closest tic mark value.
- The slide area to the left of the handle should be highlighted in blue, with the slide area to the right in grey.
-
Tooltip: The current value should be displayed in a tooltip when users hover or click on the slider handle.
- Numeric Scale (optional):
- A numeric scale may be displayed below the slider.
- Displaying a numeric scale is recommended when using a discrete slider that snaps to specific values.
- Note: The scale is not required to denote ALL discrete values.
-
Discrete Values (optional): When using a discrete scale, each available value may be indicated using marks along the slider. The marks make it clear to users when the slider will snap to specific values.
-
Field Input (optional): The slider can optionally have a field input on the right side to enter the desired value as an alternative to sliding. The slider button should move to indicate the value entered.
- Unit Dropdown (optional): A dropdown may be provided in conjunction with the field input if various units are available for selection.
Slider Examples
Slider Example In Context
Future Considerations
- Sliders with two draggable handles, allowing users to set a range
- Vertical sliders
- Sliders with interactive buttons, allowing users to jump to specific values without dragging the slider handle
- View Angular PatternFly Example
- View PatternFly NG Example
- View PatternFly React Example
PatternFly Core Example
Examples
Example of a slider in a form
<script src="components/bootstrap-slider/dist/bootstrap-slider.js"></script> <input id="slider-one" type="text" data-provide="slider" data-slider-min="0" data-slider-max="100" data-slider-tooltip="show" /> <br> <br> <input id="slider-two" type="text" data-provide="slider" data-slider-ticks="[1, 2, 3, 4, 5]" data-slider-ticks-labels='["1", "2", "3", "4", "5"]' data-slider-min="1" data-slider-max="5" data-slider-step="1" data-slider-value="3" data-slider-tooltip="show" /> <h2>Example of a slider in a form</h2> <form class="form-horizontal" role="form"> <div class="form-group"> <label for="size" class="col-sm-2 control-label">Size</label> <div class="col-sm-10"> <input id="slider" type="text" data-provide="slider" data-slider-ticks="[1, 2, 3, 4, 5]" data-slider-ticks-labels='["1", "2", "3", "4", "5"]' data-slider-min="1" data-slider-max="5" data-slider-step="1" data-slider-value="3" data-slider-tooltip="show" /> </div> </div> <div class="form-group"> <label for="name" class="col-sm-2 control-label">Name</label> <div class="col-sm-10"> <input type="text" class="form-control" id="name"> </div> </div> <div class="form-group"> <label for="size" class="col-sm-2 control-label">Size</label> <div class="col-sm-10"> <div class="slider-pf"> <b>0</b> <input id="size" type="text" data-provide="slider" data-slider-min="0" data-slider-max="100" data-slider-tooltip="show" /> <b>100</b> <input type="text" size="3" class="slider-input-pf"> <span>GB</span> </div> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">Sign in</button> </div> </div> </form> <br> <br> <div class="slider-pf"> <b>0</b> <input id="slider-pf" type="text" data-provide="slider" data-slider-min="0" data-slider-max="100" data-slider-tooltip="show" /> <b>100</b> <input type="text" size="3" class="slider-input-pf"> <span>GB</span> </div> <br> <br> <div class="slider-pf"> <b>0</b> <input id="with-stops" type="text" data-provide="slider" data-slider-min="0" data-slider-max="100" data-slider-tooltip="show" /> <b>100</b> <input type="text" size="3" class="slider-input-pf"> <span class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> GB <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> <li><a href="#">GB</a></li> <li><a href="#">MB</a></li> </ul> </span> </div> <script> $(function () { $('.slider-input-pf').tooltip({ trigger: 'manual' }) .on('keyup', function (e) { var $this = $(this); var sd = $this.siblings('[data-provide=slider]').slider(); if ($this.val().trim() !== '' && !$.isNumeric(this.value)) { this.value = sd.slider('getValue'); } }) .on('keypress blur', function (e) { if (e.which == 13 || e.type === 'blur') { e.preventDefault(); var $this = $(this); var sd = $this.siblings('[data-provide=slider]').slider(); var max = sd.slider('getAttribute', 'max'); var min = sd.slider('getAttribute', 'min'); if (!$.isNumeric(this.value) || (this.value > max || this.value < min)) { var warningInfo = $.isNumeric(this.value) ? 'Valid value should be between ' + min + ' and ' + max : 'Valid value should be number'; $this.attr('data-original-title', warningInfo).tooltip('show').addClass('warning'); this.value = sd.slider('getValue'); setTimeout(function(){ $this.tooltip('hide'); }, 3000); } else { if ($this.is('.warning')) { $this.tooltip('hide'); } this.value = $this.val().trim(); sd.slider('setValue', this.value); } } }) .siblings('[data-provide=slider]').each(function () { $(this).siblings('.slider-input-pf').val(this.value); $(this).slider().on('slide', function (e) { $(e.target).siblings('.slider-input-pf').val(e.value); }); }); }); </script>