<input id="test" type="number">
这个 CSS 可以有效地隐藏 Webkit 浏览器(已在 Chrome 7.0.517.44 和 Safari 版本 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 */
}
<input type="number" step="0.01" />
您可以随时使用检查器(webkit,可能是Firefox的Firebug)查找您感兴趣的元素的匹配CSS属性,寻找伪元素。此图显示了type =“ number”的输入元素的结果:
display: none;
。 - philfreotype=number
。例如,在 Opera 浏览器中仍会显示箭头,在 Firefox、IE 等浏览器实现该输入类型后也将开始显示。 - mgol<input inputmode="numeric" ... />
即可。它现在得到了广泛的支持(https://caniuse.com/?search=inputmode)。 - Shivam JhaFirefox 29现在支持number元素,因此这是一个隐藏webkit和moz浏览器中的微调器的代码片段:
input[type='number'] {
-moz-appearance:textfield;
}
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
}
<input id="test" type="number">
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;
}
<input type="number" />
补充现有答案...
在当前版本的Firefox中,这些元素上(user agent)默认的-moz-appearance
属性的值是number-input
。将其更改为值textfield
可以有效地去除微调器。
input[type="number"] {
-moz-appearance: textfield;
}
在某些情况下,您可能希望旋转器最初处于隐藏状态,并在悬停/聚焦时出现。(这是Chrome当前的默认行为)。如果是这样,请使用以下内容:
input[type="number"] {
-moz-appearance: textfield;
}
input[type="number"]:hover,
input[type="number"]:focus {
-moz-appearance: number-input;
}
<input type="number"/>
在当前版本的Chrome中,这些元素上(用户代理)-webkit-appearance
属性的默认值已经是textfield
。为了去掉微调器,需要将-webkit-appearance
属性在伪类::-webkit-outer-spin-button
/::-webkit-inner-spin-button
上的值改为none
(默认为-webkit-appearance: inner-spin-button
)。
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
<input type="number" />
值得注意的是,在旧版本的Chrome中,margin: 0
用于去除边距。
目前,在编写本文时,'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;
}
<input type="text" pattern="[0-9]*" />
使用 \d*
这个正则表达式模式也可以生效。
我发现了一个超级简单的解决方案,使用
<input type="text" inputmode="numeric" />
这在大多数浏览器中都受支持:
input type="tel"
代替。它会弹出一个数字键盘,不会显示旋转框。它不需要任何 JavaScript、CSS、插件或其他东西。如果您试图隐藏浏览器添加的控件,则应该提示您错误使用了该输入类型。
type = number
状态不适用于仅由数字组成但严格来说不是数字的输入。例如,信用卡号码或美国邮政编码将不适用。
(强调是我的)
<input type=number>
在GOV.UK团队执行的一项可用性研究中被发现存在问题。该团队维护着世界上最著名的设计系统之一,并得出结论,这种输入类型:
- 在使用Dragon Naturally Speaking时无法被指定或选择
- 在NVDA的元素列表中没有标签
- 在NVDA的对象导航中显示为旋转按钮,内部有一个编辑字段和两个未标记的按钮- 这些按钮减少/增加值
- 在使用nvda+tab时报告为未标记的编辑字段
相反,他们建议使用<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>
1K
,他们的意思是 1000
。但是,如果无法输入 K
,则无法检测到此错误。输入将是 1
,这不是所想要的。 - Pepijn Gieles<form>
元素的这种Web应用程序中,验证仍然需要实现。并且适当的错误消息比干扰用户输入要更加用户友好。你在链接中提供了证据。 - Andypattern
属性的支持现在更好了? - undefinedmin
和max
这样的数字特定属性。 - undefined只需添加此 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;
}
/* 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;
}
我曾遇到过一个与input[type="datetime-local"]
类似的问题,而我找到了解决这类问题的方法。
首先,您必须通过“DevTools->设置->常规->元素->显示用户代理阴影DOM”开启Chrome的shadow-root功能。
然后,您就可以看到所有受shadow DOM影响的DOM元素,例如,对于<input type="number">
,完整的带有shadow 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>
根据这些信息,您可以编写一些CSS来隐藏不需要的元素,就像@Josh所说的那样。
<input type="number" min="4" max="8" />
,并且看到一个带有上下箭头的典型输入框。 - calvinf<input type="number" pattern="[0-9]*" inputmode="numeric">
。更多信息请参见:https://dev59.com/XW025IYBdhLWcg3wKSiP#31619311。 - Aaron Gray<input type="text" placeholder="number (digits only)" pattern="[0-9]+" class="validate number-validation" ... >
的标记,并使用 jQuery Validati 或类似工具来处理验证。我尚未测试过这种方法,这也是为什么这是一条评论而不是答案的原因。 - Agi Hammerthief