【问题标题】:HTML5 slider bar's thumb can't cover the trackHTML5 滑动条的拇指无法覆盖轨道
【发布时间】:2017-02-08 07:28:06
【问题描述】:

我用 html5 & css 做了一个滑动条,像这样。

function showValue(value) {
  document.getElementById("range").innerHTML = value;
}
.c-zoombar {
  -webkit-appearance: none;
  background: none;
  outline: none;
  overflow: hidden;
  width: 200px;
  height: 20px;
}
.c-zoombar::-webkit-slider-thumb {
  -webkit-appearance: none;
  background: #5e6fd9;
  border: 1px solid #fff;
  border-radius: 50%;
  height: 12px;
  position: relative;
  top: -5.5px;
  transition: .2s;
  width: 12px;
}
.c-zoombar::-webkit-slider-runnable-track {
  background: transparent;
  border: 1px solid #000;
  border-radius: 2px;
  cursor: pointer;
  height: 3px;
  width: 100%;
}
.c-zoombar:active::-webkit-slider-thumb {
  height: 16px;
  top: -8px;
  width: 16px;
}
.c-zoombar::-webkit-slider-thumb:hover {
  height: 16px;
  top: -8px;
  width: 16px;
}
<div>
  <input type="range" value="0" class="c-zoombar" onInput="showValue(this.value)" />
</div>
<div>
  <span id="range">0</span>
</div>

但是,当我将拇指滚动到最右/最左时,拇指无法完全覆盖轨道,如下图所示。

我应该修改什么以使拇指在滚动到最右/最左时能够覆盖轨道?谢谢。

【问题讨论】:

  • 请添加html,您可以在编辑器中使用'code sn-p'按钮
  • @godblessstrawberry 完成。谢谢你的建议

标签: css html slider pseudo-element


【解决方案1】:

我发现transform: scale() 可以发挥作用(比例转换也比宽度/高度更平滑)。 12px 大小是强制性的吗?

function showValue(value) {
  document.getElementById("range").innerHTML = value;
}
.c-zoombar {
  -webkit-appearance: none;
  background: none;
  outline: none;
  overflow: visible;
  width: 200px;
  height: 20px;
}
.c-zoombar::-webkit-slider-thumb {
  -webkit-appearance: none;
  background: #5e6fd9;
  border: 1px solid #fff;
  border-radius: 50%;
  height: 12px;
  position: relative;
  top: -5.5px;
  transition: .2s;
  width: 12px;
  transform: scale(1.33);
}
.c-zoombar::-webkit-slider-runnable-track {
  background: transparent;
  border: 1px solid #000;
  border-radius: 2px;
  cursor: pointer;
  height: 3px;
  width: 100%;

}
.c-zoombar:active::-webkit-slider-thumb,
.c-zoombar::-webkit-slider-thumb:hover {
  transform: scale(1.66);
}
<div class='wrap'>
  <input type="range" value="0" class="c-zoombar" onInput="showValue(this.value)" />
</div>
<div>
  <span id="range">0</span>
</div>

【讨论】:

  • 这行得通!大小不是强制性的。我认为这里可以使用这种方法。谢谢。
  • @Ezek yw,顺便说一句很好的实现
猜你喜欢
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2014-01-10
相关资源
最近更新 更多