JSFiddle - React, Tailwind, and code Playground

by Keith Jeter

HTML

<div class="center">
  <div class="price text-blu"><span id="from">$500</span><span> - </span><span id="to">$15 000</span></div>
  <div class="multi-range">
    <input id="min" type="range" min="0" max="100" value="0" step="0.0001"/>
    <input id="max" type="range" min="0" max="100" value="100" step="0.0001"/>
  </div>
</div>

CSS

.center {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 400px;
  height: 300px;
  padding: 40px;
  border-radius: 30px;
  transition: transform 0.5s;
  transform: translate(-50%, -50%);
  background-color: #fff;
}

@media screen and (max-height: 500px) {
  .center {
    transform: translate(-50%, -50%) scale(0.7);
  }
}

.text-blu {
  color: #007cbd;
}

.multi-range input[type=range]:nth-child(1)::-webkit-slider-thumb::before {
  background-color: #007cbd;
}

.multi-range input[type=range]:nth-child(2) {
  background: none;
}

.multi-range input[type=range]:nth-child(2)::-webkit-slider-thumb::before {
  background-color: #007cbd;
}

.multi-range input[type=range]::-moz-range-track {
  background: none;
}

input[type=range] {
  position: absolute;
  width: 100%;
  padding: 0;
  margin: 0;
  border: 0;
  outline: none;
  background: linear-gradient(#007cbd, #007cbd) no-repeat center;
  background-size: 100% 2px;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  pointer-events: none;
}

input[type=range]:active,
input[type=range]:focus,
input[type=range]::-moz-focus-outer {
  border: none;
  outline: none;
}

input[type=range]::-moz-range-thumb {
  position: relative;
  height: 28px;
  width: 28px;
  margin: 5px 0;
  border-radius: 50%;
  background-color: #fff;
  box-shadow: 0 1px 4px 0.5px rgba(0, 0, 0, 0.3);
  -moz-appearance: none;
  appearance: none;
  pointer-events: all;
}

input[type=range]::-moz-range-thumb:hover {
  background-color: #007cbd;
  
}

input[type=range]::-moz-range-thumb:active {
  background-color: #007cbd;
}

input[type=range]::-webkit-slider-thumb {
  position: relative;
    cursor: pointer;
  height: 28px;
  width: 28px;
  margin: 5px 0;
  border-radius: 50%;
  background-color: #007cbd;
  box-shadow: 0 1px 4px 0.5px rgba(0, 0, 0, 0.3);
  -webkit-appearance: none;
  appearance: none;
  pointer-events: all;
}

input[type=range]::-webkit-slider-thumb:hover {
  background-color:...

JavaScript

/*
  Inspired by: "Price Range Control"
  By: cubertodesign
  Link: https://www.instagram.com/p/Bs-0fByhwy8/
*/

let minDollars = 500;
let maxDollars = 15000;

let minSlider = document.querySelector('#min');
let maxSlider = document.querySelector('#max');

function numberWithSpaces(number) {
  return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
}

function updateDollars() {
  let fromValue = (maxDollars - minDollars) * minSlider.value / 100 + minDollars;
  let toValue = (maxDollars - minDollars) * maxSlider.value / 100 + minDollars;

  document.querySelector('#from').textContent = `$${numberWithSpaces(Math.floor(fromValue))}`;
  document.querySelector('#to').textContent = `$${numberWithSpaces(Math.floor(toValue))}`;
}

maxSlider.addEventListener('input', () => {
  let minValue = parseInt(minSlider.value);
  let maxValue = parseInt(maxSlider.value);

  if (maxValue < minValue + 10) {
    minSlider.value = maxValue - 10;

    if (minValue === parseInt(minSlider.min)) {
      maxSlider.value = 10;
    }
  }

  updateDollars();
});

minSlider.addEventListener('input', () => {
  let minValue = parseInt(minSlider.value);
  let maxValue = parseInt(maxSlider.value);

  if (minValue > maxValue - 10) {
    maxSlider.value = minValue + 10;

    if (maxValue === parseInt(maxSlider.max)) {
      minSlider.value = parseInt(maxSlider.max) - 10;
    }
  }

  updateDollars();
});