我可以隐藏HTML5号码输入的旋转框吗?

Ala*_*lan 934 javascript css html5 numbers input

跨浏览器是否有一致的方法来隐藏某些浏览器(如Chrome)为类型编号的HTML输入呈现的新旋转框?我正在寻找一种CSS或JavaScript方法来防止上/下箭头出现.

<input id="test" type="number">
Run Code Online (Sandbox Code Playgroud)

ant*_*onj 1082

这个CSS有效地隐藏了webkit浏览器的旋转按钮(已在Chrome 7.0.517.44和Safari Version 5.0.2(6533.18.5)中测试过):

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
    /* display: none; <- Crashes Chrome on hover */
    -webkit-appearance: none;
    margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
}

input[type=number] {
    -moz-appearance:textfield; /* Firefox */
}
Run Code Online (Sandbox Code Playgroud)
<input type="number" step="0.01" />
Run Code Online (Sandbox Code Playgroud)

您始终可以使用检查器(webkit,可能是Firebug for Firefox)查找您感兴趣的元素的匹配CSS属性,查找伪元素.此图显示输入元素类型="数字"的结果:

输入类型的检查器=数字(Chrome)

  • 看起来Chrome不再有问题,所以你可以只使用`display:none;`作为选择器内的唯一内容 (20认同)
  • 遗憾的是,这不是跨浏览器,所以如果你必须隐藏这些箭头,我建议不要使用`type = number`.例如,目前它们仍然会在Opera中显示,并且当它们实现此输入类型时,它们将开始在Firefox,IE等中显示. (9认同)
  • 只需使用 `&lt;input inputmode="numeric" ... /&gt; 它具有[现在广泛支持](https://caniuse.com/?search=inputmode) (3认同)
  • 我不会称之为“广泛支持”...... (3认同)
  • 为了记录,Chrome还为X按钮提供了`input :: - webkit-clear-button` (2认同)
  • @Johansrk,因为字母“e”可以是有效数字的一部分,即 1e3 === 1000。 (2认同)

swe*_*ren 423

Firefox 29目前增加了对数字元素的支持,所以这里有一个片段用于在基于webkit和moz的浏览器中隐藏微调器:

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

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
    -webkit-appearance: none;
}
Run Code Online (Sandbox Code Playgroud)
<input id="test" type="number">
Run Code Online (Sandbox Code Playgroud)


Jos*_*ier 344

简短回答:

input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
input[type="number"] {
    -moz-appearance: textfield;
}
Run Code Online (Sandbox Code Playgroud)
<input type="number" />
Run Code Online (Sandbox Code Playgroud)

更长的回答:

要添加到现有答案......

火狐:

在当前版本的Firefox中,这些元素的-moz-appearance属性(用户代理)默认值为number-input.将其更改为值会textfield有效地删除微调器.

input[type="number"] {
    -moz-appearance: textfield;
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您可能希望最初隐藏微调器,然后显示在悬停/焦点上.(这是目前Chrome中的默认行为).如果是这样,您可以使用以下内容:

input[type="number"] {
    -moz-appearance: textfield;
}
input[type="number"]:hover,
input[type="number"]:focus {
    -moz-appearance: number-input;
}
Run Code Online (Sandbox Code Playgroud)
<input type="number"/>
Run Code Online (Sandbox Code Playgroud)


铬:

在当前版本的Chrome中,这些元素的-webkit-appearance属性(用户代理)默认值已经存在textfield.为了消除微调,该-webkit-appearance属性的值需要改变none::-webkit-outer-spin-button/ ::-webkit-inner-spin-button伪类(它是-webkit-appearance: inner-spin-button默认情况下).

input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
Run Code Online (Sandbox Code Playgroud)
<input type="number" />
Run Code Online (Sandbox Code Playgroud)

值得指出的是,margin: 0它用于删除旧版 Chrome 中的边距.

目前,在撰写本文时,这里是'inner-spin-button'伪类的默认用户代理样式:

input::-webkit-inner-spin-button {
    -webkit-appearance: inner-spin-button;
    display: inline-block;
    cursor: default;
    flex: 0 0 auto;
    align-self: stretch;
    -webkit-user-select: none;
    opacity: 0;
    pointer-events: none;
    -webkit-user-modify: read-only;
}
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这个答案,因为它包含相关的firefox信息,在开发某些内容时需要考虑.忽略其他浏览器引擎的仅限webkit的答案还有很多不足之处 (14认同)

小智 123

根据Apple的移动Safari用户体验编码指南,您可以使用以下内容在iPhone浏览器中显示数字键盘:

<input type="text" pattern="[0-9]*" />
Run Code Online (Sandbox Code Playgroud)

pattern\d*也可以工作.

  • 在Android上,目前在所有浏览器中都没有.在Android 4.2上的浏览器4.2.2,Chrome 28和Firefox 23中的[此测试页](http://jsfiddle.net/roryokane/T2VRE/show/)上进行了测试.这些浏览器只显示带有此标记的标准文本键盘. (19认同)
  • 尽管如此,经检查的解决方案对于给定的问题非常有效,我决定在此处切换到此解决方案.一个原因是,例如Opera浏览器也显示箭头,您也应该阻止它.其次,我在Chrome 17中发现了更大的问题.一方面,'maxlen'属性似乎不再起作用; 您可以在那里输入任意数量的字符.另一方面,超过一定长度的数字只是四舍五入.使用此解决方案"只是在iOS设备上打开小键盘"似乎对我来说更安全. (5认同)
  • 这是适用于Android和iOS的不错解决方案:http://stackoverflow.com/a/31619311/806956 (3认同)
  • 上面的注释已经过时了,根据 [caniuse](https://caniuse.com/input-inputmode),现在最流行的 Android 浏览器都支持它。另外,即使它还没有做任何事情,它也符合标准并且应该添加,因为浏览器在不断发展 (2认同)

MER*_*ĞAN 37

请尝试使用input type="tel".它弹出一个带数字的键盘,它不显示旋转框.它不需要JavaScript或CSS或插件或其他任何东西.

  • 此解决方案目前在任何浏览器中都没有进行任何验证,例如`type = number`. (17认同)
  • 没有"." 在电话键盘: - < (14认同)
  • [电话键盘](http://i.stack.imgur.com/aiLAa.png)不如[数字键盘](http://i.stack.imgur.com/gZRfo.png),虽然它比[文字键盘](http://i.stack.imgur.com/2m6Yr.png)好得多.电话键盘具有从数字键盘中省略的无关字母和符号.(在Android 4.2上使用[本页](http://jsfiddle.net/roryokane/T2VRE/show/)测试过.) (5认同)
  • 这不是解决方案,而且HTML5标准也是愚蠢的.input [tel]用于电话号码,input [number]用于通用号码,包括浮点号码.所以这根本不是解决方案. (3认同)

you*_*jin 34

我找到了一个超级简单的解决方案

<input type="text" inputmode="numeric" />
Run Code Online (Sandbox Code Playgroud)

大多数浏览器都支持:https : //developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode

  • 如果您有物理键盘,仍然可以输入任何字符 (22认同)
  • https://technology.blog.gov.uk/2020/02/24/why-the-gov-uk-design-system-team-changed-the-input-type-for-numbers/解释了为什么英国政府从在此解决方案中键入“number”。 (5认同)

Pep*_*les 20

如果您试图隐藏浏览器添加的控件,则应该暗示您正在滥用该输入类型。

标准一致性问题

根据type=number 的 HTML 规范

type=number状态不适合仅包含数字但严格来说不是数字的输入。例如,它不适用于信用卡号码或美国邮政编码。

(重点是我的)

可用性问题

GOV.UK 团队进行的可用性研究发现<input type=number>存在问题。该团队维护着世界上最著名的设计系统之一,并得出结论,该输入类型:

替代解决方案

相反,他们建议使用<input type="text" inputmode="numeric" pattern="[0-9]*">@team_steve 和 @youjin 的综合答案。这不仅隐藏了旋转框,还提高了元素的整体可用性。

不用说,需要进行额外的验证以及有用的错误文本。

<label>Postal Code
<input type="text" inputmode="numeric" pattern="[0-9]*" size="5">
</label>
Run Code Online (Sandbox Code Playgroud)

  • 仍然可以输入非数字字符 - 这是不希望的。可用性并不总是重要的,因为只允许输入数字的限制效果,这是一个巨大的优势 (5认同)

fra*_*cis 17

/* Chrome, Safari, Edge, Opera */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

/* Firefox */
input[type=number] {
  -moz-appearance: textfield;
}
Run Code Online (Sandbox Code Playgroud)

来源


San*_*ath 16

仅添加此css以在输入数字时删除微调器

/* For Firefox */

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



/* Webkit browsers like Safari and Chrome */

input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
Run Code Online (Sandbox Code Playgroud)


Xia*_*nyu 9

我遇到过这个问题input[type="datetime-local"],这与这个问题类似.

我找到了克服这类问题的方法.

首先,你必须通过"DevTools - >设置 - >常规 - >元素 - >显示用户代理阴影DOM"打开chrome的阴影根功能

然后你可以看到所有阴影的DOM元素,例如,<input type="number">带有阴影DOM的完整元素是:

<input type="number">
  <div id="text-field-container" pseudo="-webkit-textfield-decoration-container">
    <div id="editing-view-port">
      <div id="inner-editor"></div>
    </div>
    <div pseudo="-webkit-inner-spin-button" id="spin"></div>
  </div>
</input>
Run Code Online (Sandbox Code Playgroud)

输入的阴影DOM [type =

根据这些信息,您可以草拟一些CSS来隐藏不需要的元素,就像@Josh所说的那样.


小智 5

为了在 Safari 中实现此功能,我发现添加!importantwebkit调整中会强制隐藏旋转按钮。

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
    /* display: none; <- Crashes Chrome on hover */
    -webkit-appearance: none !important;
    margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
}
Run Code Online (Sandbox Code Playgroud)

我仍然无法找到 Opera 的解决方案。


Swa*_*oid 5

这是更好的答案,我想建议鼠标悬停和不悬停

input[type='number'] {
  appearance: textfield;
}
input[type='number']::-webkit-inner-spin-button,
input[type='number']::-webkit-outer-spin-button,
input[type='number']:hover::-webkit-inner-spin-button, 
input[type='number']:hover::-webkit-outer-spin-button {
-webkit-appearance: none; 
 margin: 0; }
Run Code Online (Sandbox Code Playgroud)