使用纯CSS为webkit设置样式输入范围

前端之家收集整理的这篇文章主要介绍了使用纯CSS为webkit设置样式输入范围前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想自定义输入类型范围,如 this.

我尝试使用以下代码更改拇指,如下所示,但未更改选定的范围颜色.

HTML:

<input type="range" />

CSS:

input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
  height: 20px;
  width: 20px;
  border-radius: 10px;
  background: red;
  cursor: pointer;
  border: none;
  margin-top: -8px;
}

input[type=range] {
  -webkit-appearance: none;
  outline: 0;
  margin: 0;
  padding: 0;
  height: 30px;
  width: 100%;
}

有人可以建议我改变选定的可运行轨道背景颜色吗?

解决方法

Ionic框架使用有趣的方法仅使用CSS来设置范围输入轨道的样式.他们将:: before伪元素添加到:: – webkit-slider-thumb,使其尽可能宽,然后将其放置在轨道顶部. (我无法使用border-radius来处理它.)
input[type='range'] {
  width: 210px;
  height: 30px;
  overflow: hidden;
  cursor: pointer;
}
input[type='range'],input[type='range']::-webkit-slider-runnable-track,input[type='range']::-webkit-slider-thumb {
  -webkit-appearance: none;
}
input[type='range']::-webkit-slider-runnable-track {
  width: 200px;
  height: 10px;
  background: #AAA;
}
input[type='range']::-webkit-slider-thumb {
  position: relative;
  height: 30px;
  width: 30px;
  margin-top: -10px;
  background: steelblue;
  border-radius: 50%;
  border: 2px solid white;
}
input[type='range']::-webkit-slider-thumb::before {
  position: absolute;
  content: '';
  height: 10px; /* equal to height of runnable track */
  width: 500px; /* make this bigger than the widest range input element */
  left: -502px; /* this should be -2px - width */
  top: 8px; /* don't change this */
  background: #777;
}
<div class="container">
  <input type="range" min="0" max="100" value="10" />
</div>

据我所知,对于Webkit驱动的浏览器(和FF),没有纯CSS方法可以做到这一点. IE提供了一种使用-ms-fill-lower和-ms-fill-upper为轨道的两个部分设置样式的方法,但在WebKit中没有等效项,因此需要JavaScript.

您可以使用线性渐变作为可运行轨道的背景图像,然后使用JavaScript更改背景大小以实现所需的效果.由于问题是针对Webkit的,因此提供的代码段目前仅适用于Webkit驱动的浏览器.此方法允许我们向轨道添加边界半径.

这个片段改编自Ana Tudor的CodePen Demo.该演示还有一些方法可以让它在其他浏览器中运行.

window.onload = function() {
  var input = document.querySelector('input[type=range]'),style_el = document.createElement('style'),styles = [],track_sel = ['::-webkit-slider-runnable-track'];
  document.body.appendChild(style_el);

  styles.push('');

  input.addEventListener('input',function() {
    var min = this.min || 0,max = this.max || 100,c_style,u,edge_w,val,str = '';

    this.setAttribute('value',this.value);

    val = this.value + '% 100%';
    str += 'input[type="range"]' + track_sel[0] + '{background-size:' + val + '}';

    styles[0] = str;
    style_el.textContent = styles.join('');
  },false);
}
input[type='range'] {
  width: 210px;
  height: 50px;
  cursor: pointer;
}
input[type='range'],input[type='range']::-webkit-slider-thumb {
  -webkit-appearance: none;
}
input[type='range']::-webkit-slider-runnable-track {
  width: 200px;
  height: 10px;
  background: linear-gradient(to right,#777,#777),#AAA;
  background-size: 10% 100%;
  background-repeat: no-repeat;
  border-radius: 5px;
}
input[type='range']::-webkit-slider-thumb {
  height: 30px;
  width: 30px;
  margin-top: -10px;
  background: steelblue;
  border-radius: 50%;
  border: 2px solid white;
}
<div class="container">
  <input type="range" min="0" max="100" value="10" />
</div>

猜你在找的CSS相关文章