我可以隐藏 HTML5 数字输入的旋转框吗?

IT技术 javascript css html input numbers
2021-02-03 22:19:44

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

<input id="test" type="number">
6个回答

此 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" 的结果:

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

@Johansrk 因为字母 'e' 可以是有效数字的一部分,即 1e3 === 1000。
2021-03-14 22:19:44
只需使用`<input inputmode="numeric" ... /> 现在已经得到广泛支持
2021-03-20 22:19:44
我不会称之为“广泛支持”......
2021-03-29 22:19:44
Chrome似乎不再有问题,因此您可以将其 display: none;用作选择器中的唯一内容
2021-04-02 22:19:44
不幸的是,这不是跨浏览器,因此type=number如果您必须隐藏这些箭头,我建议不要使用例如,目前它们仍会显示在 Opera 中,并且当它们实现此输入类型时,它们将开始显示在 Firefox、IE 等中。
2021-04-03 22:19:44

Firefox 29 目前增加了对数字元素的支持,所以这里有一个在基于 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 中,这些元素-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属性的值需要被改变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;
}
<input type="number" />

值得指出的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;
}
我更喜欢这个答案,因为它包含相关的 Firefox 信息,在开发某些东西时,需要考虑这些信息。忽略其他浏览器引擎的仅 webkit 答案还有很多不足之处
2021-03-12 22:19:44

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

<input type="text" pattern="[0-9]*" />

A patternof\d*也将起作用。

目前,在所有浏览器中,这在 Android 上没有任何作用。在浏览器 4.2.2、Chrome 28 和 Android 4.2 上的 Firefox 23 中此测试页上进行了测试这些浏览器仅显示带有此标记的标准文本键盘。
2021-03-28 22:19:44

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

该解决方案目前不会像type=number这样在任何浏览器中进行任何验证
2021-03-11 22:19:44
这不是解决方案,而且按照 HTML5 标准,这很愚蠢。input[tel] 用于电话号码, input[number] 用于通用号码,包括浮点数。所以这根本不是解决方案。
2021-03-24 22:19:44
电话键盘不如数字键盘,但比文本键盘好得多电话键盘上有数字键盘省略的无关字母和符号。在 Android 4.2 上使用此页面进行测试。)
2021-03-27 22:19:44
没有“。” 在电话键盘中:-<
2021-03-29 22:19:44