DaisyUI-like Slider

Here I am trying to recreate the slider design from DaisyUI, but adding my own bit of flare on the pips, labels and floats. The colors are based on the theme variables that DaisyUI creates.

Demo of the Slider Styles
20 80
20 80
20 - 80
20
20
/**
 * Range Slider default size/colors
 */
.daisy-ui .rangeSlider {
  font-size: 18px;

  /**
   * here we are setting the default colors for the slider
   * based on the daisyui theme. This will not work unless 
   * the daisyui library is already loaded.
   */

  --slider-accent: var(--color-base-content);
  --slider-bg: var(--color-base-300);
  --slider-base: var(--color-base-content);
  --range: var(--color-base-content);
  --range-inactive: var(--color-base-content);
  --handle: var(--color-base-100);
  --handle-inactive: var(--color-base-100);
  --handle-focus: var(--color-base-100);
  --handle-border: var(--color-base-content);
  --float: var(--color-base-content);
  --float-inactive: var(--color-base-content);
}

.daisy-ui .rangePips {
  --pip: color-mix(in oklab, var(--color-base-content) 50%, #0000);
  --pip-in-range: var(--color-base-300);
}

/**
 * Track / Bar
 */
.daisy-ui .rangeSlider .rangeBar {
  height: 1.4em;
  top: 50%;
  transform: translateY(-50%);
}

.daisy-ui .rangeSlider.rsRange .rangeBar {
  border-radius: 0;
}

.daisy-ui .rangeSlider.rsRange.rsMin .rangeBar {
  border-radius: 100px 0 0 100px;
}

.daisy-ui .rangeSlider.rsRange.rsMax .rangeBar {
  border-radius: 0 100px 100px 0;
}

/** 
 * Handles / Floats
 */
.daisy-ui .rangeSlider .rangeNub,
.daisy-ui .rangeSlider.rsFocus .rangeNub,
.daisy-ui .rangeSlider .rangeHandle.rsActive .rangeNub {
  border: 3px solid var(--slider-base);
}

.daisy-ui .rangeSlider .rangeFloat {
  font-size: 0.75em;
  line-height: 1.8em;
  height: 1.8em;
  min-width: 2.4em;
  padding-block: 0;
  padding-inline: 0.75em;
  border-radius: 2em;
  transform: translateY(-5px);
}

.daisy-ui .rangeSlider.rsRange .rangeFloat {
  height: 1.8em;
  top: 50%;
  bottom: auto;
  transform: translateY(calc(-50% - 2px));
  display: flex;
  align-items: center;
  justify-content: center;
}

.daisy-ui .rangeSlider.rsRange .rangeBar .rangeFloat {
  background: transparent;
}

/* float position on the first handle (or min-range slider) */
.daisy-ui .rangeSlider.rsRange.rsMin .rangeFloat,
.daisy-ui .rangeSlider.rsRange.rsMin:hover .rangeFloat,
.daisy-ui .rangeSlider.rsRange:not(.rsMin):not(.rsMax) .rangeHandle:nth-child(2) .rangeFloat,
.daisy-ui .rangeSlider.rsRange:not(.rsMin):not(.rsMax) .rangeHandle:nth-child(2):hover .rangeFloat {
  transform: translateX(-100%) translateY(calc(-50% - 2px));
  background: transparent;
}

/* float position on the second handle (or max-range slider) */
.daisy-ui .rangeSlider.rsRange.rsMax .rangeFloat,
.daisy-ui .rangeSlider.rsRange.rsMax:hover .rangeFloat,
.daisy-ui .rangeSlider.rsRange:not(.rsMin):not(.rsMax) .rangeHandle:nth-child(1) .rangeFloat,
.daisy-ui .rangeSlider.rsRange:not(.rsMin):not(.rsMax) .rangeHandle:nth-child(1):hover .rangeFloat {
  transform: translateX(100%) translateY(calc(-50% - 2px));
  background: transparent;
}

/* flip the float position on the first handle when range is < 20 */
.daisy-ui.minFlip .rangeSlider.rsRange.rsMin .rangeFloat,
.daisy-ui.minFlip .rangeSlider.rsRange.rsMin:hover .rangeFloat,
.daisy-ui.rangeFlip
  .rangeSlider.rsRange:not(.rsMin):not(.rsMax)
  .rangeHandle:nth-child(2)
  .rangeFloat,
.daisy-ui.rangeFlip
  .rangeSlider.rsRange:not(.rsMin):not(.rsMax)
  .rangeHandle:nth-child(2):hover
  .rangeFloat {
  transform: translateX(100%) translateY(calc(-50% - 2px));
  background: var(--float);
}

/* flip the float position on the second handle when range is > 80 */
.daisy-ui.maxFlip .rangeSlider.rsRange.rsMax .rangeFloat,
.daisy-ui.maxFlip .rangeSlider.rsRange.rsMax:hover .rangeFloat,
.daisy-ui.rangeFlip
  .rangeSlider.rsRange:not(.rsMin):not(.rsMax)
  .rangeHandle:nth-child(1)
  .rangeFloat,
.daisy-ui.rangeFlip
  .rangeSlider.rsRange:not(.rsMin):not(.rsMax)
  .rangeHandle:nth-child(1):hover
  .rangeFloat {
  transform: translateX(-100%) translateY(calc(-50% - 2px));
  background: var(--float);
}

.daisy-ui.rangeFlip .rangeSlider.rsDrag .rangeBar .rangeFloat {
  transform: translateY(calc(-150% - 2px));
  background: var(--float);
}

/**
 * Pips
 */
.daisy-ui .rangeSlider .rangePips {
  z-index: 1;
}
.daisy-ui .rangeSlider.rsRange .rangePips {
  pointer-events: none;
}

.daisy-ui .rangeSlider .rsPip {
  border-radius: 3px;
  translate: -1px -5px;
  pointer-events: all;
}

.daisy-ui .rangeSlider .rsPip.rsSelected,
.daisy-ui .rangeSlider .rsPip.rsInRange {
  width: 3px;
  translate: -1px -1px;
}

.daisy-ui .rangeSlider .rsPip.rsInRange {
  width: 1px;
  height: 4px;
}