css - 样式输入类型范围,不同浏览器的高度差异

标签 css html

我正在尝试设置“范围”类型输入的样式,使其在多个浏览器中看起来相同。

我发现了一些有用的资源...

https://css-tricks.com/styling-cross-browser-compatible-range-inputs-css/

http://danielstern.ca/range.css/#/

http://www.cssportal.com/style-input-range/

...但是有一个问题似乎没有得到解决。那就是Firefox和其他浏览器认为input的高度是track的高度和thumb的结合高度(或类似的东西),然而Chrome似乎只认为track的高度是thumb的高度整个输入。

这是我的代码(精简版):

.container {
  border: 1px solid red;
  background-color: lightgreen;
  margin-top: 10px;
}

p {
  border: 1px solid blue;
  margin: 0;
  padding: 0;
}

input[type=text],
input[type=range] {
  -webkit-appearance: none;
  width: 200px;
  margin: 0;
  padding: 0;
  display: block;
  height: 50px;
}

input[type=range]:focus {
  outline: none;
}

input[type=range]::-webkit-slider-runnable-track {
  width: 100%;
  height: 4px;
  cursor: pointer;
  animate: 0.2s;
  background: #ccc;
  border: 1px solid #333;
}

input[type=range]::-webkit-slider-thumb {
  border: 1px solid #333;
  height: 30px;
  width: 8px;
  background: #fff;
  -webkit-appearance: none;
  margin-top: -7px;
}

input[type=range]:focus::-webkit-slider-runnable-track {
  background: #367ebd;
}

input[type=range]::-moz-range-track {
  width: 100%;
  height: 4px;
  cursor: pointer;
  animate: 0.2s;
  background: #ccc;
  border: 1px solid #333;
}

input[type=range]::-moz-range-thumb {
  border: 1px solid #333;
  height: 30px;
  width: 6px;
  background: #fff;
}
<div class="container">
  <p>
    Some text...
  </p>
  <input type="range" />
  <p>
    Some more text...
  </p>
</div>

<div class="container">
  <input type="text">
</div>

如果您在 Chrome 和 Firefox 中运行它,您会发现这两种浏览器对此有不同的处理方式。在 Chrome 中,输入得到白色背景。

如果我删除 input[type=range] 上的 height: 50px;,浏览器处理高度的方式也会有明显差异。

如您所见,这会影响范围输入上方和之后的标记的相对定位方式。

我该如何解决这个问题?

最佳答案

引用自css-tricks.com

根据测试支持 Firefox 23+、Chrome 6+、IE 10+

你错过了我在评论中提到的一些 CSS

.container {
  border: 1px solid red;
  background-color: lightgreen;
  margin-top: 10px;
}
p {
  border: 1px solid blue;
  margin: 0;
  padding: 0;
}
input[type=text] {
  height: 50px;
}
input[type=text],
input[type=range] {
  -webkit-appearance: none;
  margin: 18px 0;
  width: 200px;
}
input[type=range]:focus {
  outline: none;
}
input[type=range]::-webkit-slider-runnable-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  animate: 0.2s;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  background: #3071a9;
  border-radius: 1.3px;
  border: 0.2px solid #010101;
}
input[type=range]::-webkit-slider-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
  -webkit-appearance: none;
  margin-top: -14px;
}
input[type=range]:focus::-webkit-slider-runnable-track {
  background: #367ebd;
}
input[type=range]::-moz-range-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  animate: 0.2s;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  background: #3071a9;
  border-radius: 1.3px;
  border: 0.2px solid #010101;
}
input[type=range]::-moz-range-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
}

  /* CSS is missing in your code  */
input[type=range]::-ms-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  animate: 0.2s;
  background: transparent;
  border-color: transparent;
  border-width: 16px 0;
  color: transparent;
}
input[type=range]::-ms-fill-lower {
  background: #2a6495;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-fill-upper {
  background: #3071a9;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
}
input[type=range]:focus::-ms-fill-lower {
  background: #3071a9;
}
input[type=range]:focus::-ms-fill-upper {
  background: #367ebd;
}
<div class="container">
  <p>
    Some text...
  </p>
  <input type="range" />
  <p>
    Some more text...
  </p>
</div>

<div class="container">
  <input type="text">
</div>

关于css - 样式输入类型范围,不同浏览器的高度差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39440613/

相关文章:

css - 如何使用 css 更改 svg rect 的宽度

php - CSS - Wordpress Jquery Box 中的按钮位置

CSS -webkit-过滤器 : grayscale(0%) don't work in IE 10 and Safari

html - 使用 CSS 在鼠标悬停时显示不同的 'height' 链接

html - 为什么骨架中第一列之前有一个空格?

javascript - 为什么在 Ajax 中从 Label 读取值不起作用

html - Ember.js + HTML5 拖放购物车演示

ios - 使用 ionic for ios 构建 html5 应用程序

javascript - 如何从呈现的文本中删除 HTML 标签

html - 变换 drop down to drop UP