Bootstrap - Bootstrap 5 Range

Bootstrap 5 provides a range input component that allows users to select numeric values within a given range using a slider.
It is implemented using the HTML5 <input type="range"> element and styled with the .form-range class.


1. Basic Bootstrap 5 Range Slider

The .form-range class styles a default range slider.

<div class="mb-3">
  <label for="customRange1" class="form-label">Default Range</label>
  <input type="range" class="form-range" id="customRange1">
</div>

Key Points:

  • Uses <input type="range">.

  • .form-range applies Bootstrap 5 styling.

  • Default range: 0 to 100.


2. Setting Min, Max, and Step Values

You can control the range and intervals using the min, max, and step attributes.

<div class="mb-3">
  <label for="customRange2" class="form-label">Range with Steps</label>
  <input type="range" class="form-range" min="0" max="50" step="5" id="customRange2">
</div>

Explanation:

  • min="0" → Minimum value

  • max="50" → Maximum value

  • step="5" → Slider moves in increments of 5.


3. Disabled Range Slider

Add the disabled attribute to make the slider unusable.

<div class="mb-3">
  <label for="disabledRange" class="form-label">Disabled Slider</label>
  <input type="range" class="form-range" id="disabledRange" disabled>
</div>

4. Custom Colors for Range Sliders

Bootstrap 5 allows you to customize the slider color using contextual background classes on the track thumb via .bg-*.

<div class="mb-3">
  <label for="rangePrimary" class="form-label">Primary Slider</label>
  <input type="range" class="form-range bg-primary" id="rangePrimary">
</div>

<div class="mb-3">
  <label for="rangeSuccess" class="form-label">Success Slider</label>
  <input type="range" class="form-range bg-success" id="rangeSuccess">
</div>

<div class="mb-3">
  <label for="rangeDanger" class="form-label">Danger Slider</label>
  <input type="range" class="form-range bg-danger" id="rangeDanger">
</div>

5. Range Slider with Live Value Display

Bootstrap 5 doesn’t have a built-in tooltip, but we can use JavaScript to display the current value dynamically.

<div class="mb-3">
  <label for="liveRange" class="form-label">Volume: <span id="rangeValue">50</span></label>
  <input type="range" class="form-range" min="0" max="100" value="50" id="liveRange">
</div>

<script>
  const rangeInput = document.getElementById("liveRange");
  const rangeValue = document.getElementById("rangeValue");

  rangeInput.addEventListener("input", () => {
    rangeValue.textContent = rangeInput.value;
  });
</script>

6. Range Slider with Tooltip (Advanced UI)

Bootstrap 5 doesn't provide native slider tooltips, but we can combine JavaScript with Bootstrap’s tooltips to make it interactive.

<div class="mb-3 position-relative">
  <label for="tooltipRange" class="form-label">Tooltip Slider</label>
  <input type="range" class="form-range" id="tooltipRange" min="0" max="100" value="40" data-bs-toggle="tooltip" data-bs-placement="top" title="40">
</div>

<script>
  const tooltipRange = document.getElementById("tooltipRange");
  const tooltip = new bootstrap.Tooltip(tooltipRange);

  tooltipRange.addEventListener("input", function () {
    tooltip.setContent({ '.tooltip-inner': this.value });
  });
</script>

7. Validation with Range Sliders

You can integrate range sliders into Bootstrap 5 form validation.

<form class="needs-validation" novalidate>
  <div class="mb-3">
    <label for="validationRange" class="form-label">Select a value between 10 and 90</label>
    <input type="range" class="form-range" id="validationRange" min="10" max="90" required>
    <div class="invalid-feedback">
      Please choose a valid range.
    </div>
  </div>
  <button class="btn btn-primary" type="submit">Submit</button>
</form>

8. Full Example: All Bootstrap 5 Range Slider Features

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Bootstrap 5 Range Sliders</title>
  <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="p-4">

  <h3>Bootstrap 5 Range Sliders</h3>

  <!-- Basic Slider -->
  <div class="mb-3">
    <label for="basicRange" class="form-label">Basic Range</label>
    <input type="range" class="form-range" id="basicRange">
  </div>

  <!-- Min, Max, Step -->
  <div class="mb-3">
    <label for="stepRange" class="form-label">Range with Steps (0 to 50, step 5)</label>
    <input type="range" class="form-range" min="0" max="50" step="5" id="stepRange">
  </div>

  <!-- Disabled -->
  <div class="mb-3">
    <label for="disabledRange" class="form-label">Disabled Slider</label>
    <input type="range" class="form-range" id="disabledRange" disabled>
  </div>

  <!-- Colors -->
  <div class="mb-3">
    <label for="coloredRange" class="form-label">Primary Slider</label>
    <input type="range" class="form-range bg-primary" id="coloredRange">
  </div>

  <!-- Live Value -->
  <div class="mb-3">
    <label for="volumeRange" class="form-label">Volume: <span id="volumeValue">50</span></label>
    <input type="range" class="form-range" min="0" max="100" value="50" id="volumeRange">
  </div>

  <script>
    const volumeRange = document.getElementById("volumeRange");
    const volumeValue = document.getElementById("volumeValue");
    volumeRange.addEventListener("input", () => {
      volumeValue.textContent = volumeRange.value;
    });
  </script>

  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>