设置输入类型的样式=数字


78

是否可以<input type="number">在CSS的内部“向上箭头”和“向下箭头”中应用样式?我想将向上箭头的背景更改为蓝色,将向下箭头的背景更改为红色。有任何想法吗?

造型内部箭头


1
据我所知,不仅仅是CSS。
Leeish


1
您可以尝试使用Shadow DOM选择器,但是它们不可靠,因为每个浏览器都需要不同的选择器。
RaphaelDDL

Codepen显示+/-而不是箭头。
Dan Dascalescu '18

Answers:


68

更新17/03/2017

原始解决方案将不再起作用。微调器是影子dom的一部分。现在只需要隐藏在chrome中即可:

input[type=number]::-webkit-inner-spin-button {
  -webkit-appearance: none;
}
<input type="number" />

或始终显示:

input[type=number]::-webkit-inner-spin-button {
  opacity: 1;
}
<input type="number" />

您可以尝试以下操作,但请记住,该方法仅适用于Chrome


1
也有一些像kendo
Alex Char

当输入失去焦点时,我注意到chrome淡出了旋转按钮。我想知道css中是否存在将其固定在屏幕上的规则,从而使旋转按钮始终可见?
Savrige 2014年

查看此线程中可接受的答案:stackoverflow.com/questions/25194631/…它对我有用

1
我建议在此处查看此代码示例 codepen.io/komarovdesign/pen/PPRbgb 其js + css解决方案和跨浏览器兼容(已测试Firefox,Chrome,Safari)。对于按钮,您可以添加.svg或png等图像。
guido _nhcol.com.br_

32

对于mozila

input[type=number] { 
  -moz-appearance: textfield;
  appearance: textfield;
  margin: 0; 
}

对于Chrome

input[type=number]::-webkit-inner-spin-button, 
input[type=number]::-webkit-outer-spin-button { 
      -webkit-appearance: none; 
      margin: 0; 
}

9

我稍微修改了@LcSalazar的答案...还是不完美,因为默认按钮的背景仍然可以在Firefox,Chrome和Opera中看到(未在Safari中测试);但是点击箭头仍然有效

笔记:

  • 添加pointer-events: none;使您可以单击重叠的按钮,但是在悬停时无法设置按钮的样式。
  • 箭头在Edge中可见,但由于Edge不使用箭头而无法使用。它仅添加一个“ x”以清除输入。

.number-wrapper {
  position: relative;
}

.number-wrapper:after,
.number-wrapper:before {
  position: absolute;
  right: 5px;
  width: 1.6em;
  height: .9em;
  font-size: 10px;
  pointer-events: none;
  background: #fff;
}

.number-wrapper:after {
  color: blue;
  content: "\25B2";
  margin-top: 1px;
}

.number-wrapper:before {
  color: red;
  content: "\25BC";
  margin-bottom: 5px;
  bottom: -.5em;
}
<span class='number-wrapper'>
    <input type="number" />
</span>


9

与其他答案略有不同,使用类似的概念,但使用div代替伪类:

input {
  position: absolute;
  left: 10px;
  top: 10px;
  width: 50px;
  height: 20px;
  padding: 0px;
  font-size: 14pt;
  border: solid 0.5px #000;
  z-index: 1;
}

.spinner-button {
  position: absolute;
  cursor: default;
  z-index: 2;
  background-color: #ccc;
  width: 14.5px;
  text-align: center;
  margin: 0px;
  pointer-events: none;
  height: 10px;
  line-height: 10px;
}

#inc-button {
  left: 46px;
  top: 10.5px;
}

#dec-button {
  left: 46px;
  top: 20.5px;
}
<input type="number" value="0" min="0" max="100"/>
<div id="inc-button" class="spinner-button">+</div>
<div id="dec-button" class="spinner-button">-</div>


4

疯狂的主意...

您可以使用一些伪元素,并创建CSS内容十六进制代码的向上/向下箭头。唯一的挑战是精确定位箭头,但它可能会起作用:

input[type="number"] {
    height: 100px;
}

.number-wrapper {
    position: relative;
}

.number-wrapper:hover:after {
    content: "\25B2";
    position: absolute;
    color: blue;
    left: 100%;
    margin-left: -17px;
    margin-top: 12%;
    font-size: 11px;
}

.number-wrapper:hover:before {
    content: "\25BC";
    position: absolute;
    color: blue;
    left: 100%;
    bottom: 0;
    margin-left: -17px;
    margin-bottom: -14%;
    font-size: 11px;
}
<span class='number-wrapper'>
    <input type="number" />
</span>


6
确实好尝试@LcSalazar并遇到一些问题。当您完全单击箭头时,它不起作用。另外,当您将鼠标移出并保持焦点时,请显示默认值。虽然+1 :)
Alex Char

4

我一直在手机和平​​板电脑上苦苦挣扎。我的解决方案是absolute在微调器上使用定位,所以我只是发布它以防其他人使用:

<html><head>
    <style>
      body {padding: 10px;margin: 10px}
      input[type=number] {
        /*for absolutely positioning spinners*/
        position: relative; 
        padding: 5px;
        padding-right: 25px;
      }

      input[type=number]::-webkit-inner-spin-button,
      input[type=number]::-webkit-outer-spin-button {
        opacity: 1;
      }

      input[type=number]::-webkit-outer-spin-button, 
      input[type=number]::-webkit-inner-spin-button {
        -webkit-appearance: inner-spin-button !important;
        width: 25px;
        position: absolute;
        top: 0;
        right: 0;
        height: 100%;
      }
    </style>
  <meta name="apple-mobile-web-app-capable" content="yes"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0"/>
  </head>
  <body >
    <input type="number" value="1" step="1" />

  </body></html>


2

上面的chrome代码工作正常。我曾在mozila尝试过这种方法,但无法正常工作。我找到了解决方案

对于mozila

input[type=number] { 
  -moz-appearance: textfield;
  appearance: textfield;
  margin: 0; 
}

谢谢桑吉布


1

修改微调器箭头的css是钝角且不可靠的跨浏览器。

我发现的最稳定的选择是使用指针事件绝对定位图像。在微调器上。

在Edge中未经测试,但在所有其他浏览器中均可使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.