Search code examples
jqueryhtmlcssjquery-uirangeslider

Insert content to UI slider handle - UI Range Slider


I have created a range slider using UI library. By default it has it's slider handler. This slider handler is coming through the jQuery. You can inspect the snippet and understand it. Now what I want is, I want to place some text inside the slide handlers like,

enter image description here enter image description here

So far I have tried this in both JS and CSS way which gave me no change.

CSS way (created the text as a PNG and pushed into a pseudo element)

#slider-range .ui-slider-handle:first-child:before {
  content: url('./images/min.png');
}

and JS way (used inner HTML in JS and also tried html() in jQuery).

  $('#slider-range .ui-slider-handle:first-child').html('<p>MIN<br><></p>');
  $('#slider-range .ui-slider-handle:last-child').html('<p>MAX<br><></p>');

I have gone through the UI documentation, but I couldn't find any helpful attribute to achieve this. Here is my snippet.

$(function() {
  $("#slider-range").slider({
    range: true,
    min: 4500,
    max: 8000,
    values: [5000, 7500],
    slide: function(event, ui) {
      $("#amount").val("$" + ui.values[0] + " - $" + ui.values[1]);
    }
  });
  $("#amount").val("$" + $("#slider-range").slider("values", 0) +
    " - $" + $("#slider-range").slider("values", 1));
});
.wrapper{
  padding:60px;
}
#slider-range>div {
  background: #ff6c00;
}
#slider-range .ui-state-default {
  background: #ffcc00;
  height: 50px;
  width: 50px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  transform: translateY(-50%);      
  border-radius: 7px;
  box-shadow: 0px 3px 5px 0px rgba(1, 1, 1, 0.23);
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>


<div class="wrapper">
  <div id="slider-range"></div>
</div>


Solution

  • With only css

    You can use pseudo to the .ui-slider-handle with content min/max

    $(function() {
      $("#slider-range").slider({
        range: true,
        min: 4500,
        max: 8000,
        values: [5000, 7500],
        slide: function(event, ui) {
          $("#amount").val("$" + ui.values[0] + " - $" + ui.values[1]);
        }
      });
      $("#amount").val("$" + $("#slider-range").slider("values", 0) +
        " - $" + $("#slider-range").slider("values", 1));
    });
    .wrapper{
      padding:60px;
    }
    #slider-range>div {
      background: #ff6c00;
    }
    #slider-range .ui-state-default {
      background: #ffcc00;
      height: 50px;
      width: 50px;
      top: 50%;
      transform: translateY(-50%);
      border-radius: 7px;
      box-shadow: 0px 3px 5px 0px rgba(1, 1, 1, 0.23);
    }
    .ui-slider-handle:after{
    content:"<>";
    font-size:20px;
    padding-left: 8px;
        position: absolute;
        top: 21px;
        right: 15px;
    }
    .ui-slider-handle:before{
    content:"min";
    font-size:20px;
    padding-left: 8px;
    }
    .ui-slider-handle:last-child:before{
    content:"max";
    }
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    
    
    <div class="wrapper">
      <div id="slider-range"></div>
    </div>