我有一个使用以下代码呈现的类型 number 的输入:
<input class="quantity" id="id_form-0-quantity" min="0" name="form-0-quantity" value="1" type="number">
它看起来像这样:
我想把它变成这样的东西:
第二个视图使用两个单独的按钮进行模拟。
我怎么能像描述的那样设置箭头的样式?
原文由 MadPhysicist 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个使用以下代码呈现的类型 number 的输入:
<input class="quantity" id="id_form-0-quantity" min="0" name="form-0-quantity" value="1" type="number">
它看起来像这样:
我想把它变成这样的东西:
第二个视图使用两个单独的按钮进行模拟。
我怎么能像描述的那样设置箭头的样式?
原文由 MadPhysicist 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是另一个版本,基于@tao 的答案,使用字体真棒:
input[type="number"] {
-webkit-appearance: textfield;
-moz-appearance: textfield;
appearance: textfield;
}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
}
.number-input {
border: 2px solid #ddd;
display: inline-flex;
}
.number-input,
.number-input * {
box-sizing: border-box;
}
.number-input button {
outline:none;
-webkit-appearance: none;
background-color: transparent;
border: none;
align-items: center;
justify-content: center;
width: 3rem;
height: 3rem;
cursor: pointer;
margin: 0;
position: relative;
}
.number-input button:after {
display: inline-block;
position: absolute;
font-family: "Font Awesome 5 Free";
font-weight: 900;
content: '\f077';
transform: translate(-50%, -50%) rotate(180deg);
}
.number-input button.plus:after {
transform: translate(-50%, -50%) rotate(0deg);
}
.number-input input[type=number] {
font-family: sans-serif;
max-width: 5rem;
padding: .5rem;
border: solid #ddd;
border-width: 0 2px;
font-size: 2rem;
height: 3rem;
font-weight: bold;
text-align: center;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css" integrity="sha512-HK5fgLBL+xu6dm/Ii3z4xhlSUyZgTT9tuc/hSrtw6uzJOvgRr2a9jyxxT1ely+B+xFAmJKVSTbpM/CuL7qxO8w==" crossorigin="anonymous" />
<div class="number-input">
<button onclick="this.parentNode.querySelector('input[type=number]').stepDown()" class="minus"></button>
<input class="quantity" min="0" name="quantity" value="1" type="number">
<button onclick="this.parentNode.querySelector('input[type=number]').stepUp()" class="plus"></button>
</div>
原文由 Black 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答880 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
2 回答925 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
2 回答897 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
tl;博士:
在私下被问到以下设置好几次后,我决定为其添加一个演示(Bootstrap 4 + jQuery + Font Awesome 输入组设置):
长(初始)答案:
本机
input[type=number]
控件不是可样式化的跨浏览器。实现跨浏览器/跨设备所需的最简单和最安全的方法是使用以下方法隐藏它们:…允许您使用自定义按钮,可以链接到执行微调器(箭头)将(
.stepUp()
和.stepDown()
)的功能,前提是您保留输入的type="number"
。例如:
注意: 要更改输入的值,需要找到它。为了提供灵活性,在上面的示例中,我将按钮和
<input>
分组在一个共同的父级下,并使用该父级找到<input>
(选择不依赖于它们的接近度或特定顺序DOM)。上述方法 将更改按钮的任何input[type=number]
兄弟。如果这不方便,可以使用任何其他方法从按钮中查找输入:.querySelector('#some-id')
:.querySelector('.some-class')
:另请注意,上述示例仅在
.parentNode
内搜索,而不是在整个document
内搜索,这也是可能的:即:
onclick="document.getElementById('#some-id').stepUp()"
previousElementSibling
|nextElementSibling
)使用 jQuery 时的一个重要注意事项是
stepUp()
和stepDown()
方法放在 DOM 元素上,而不是放在 jQuery 包装器上。 DOM 元素位于jQuery
包装器的0
属性中。注意
preventDefault()
。在<button>
中单击<form>
将 触发表单提交。因此,如果如上所述使用,在表单内部,onclick
也应该包含preventDefault();
。例子:但是,如果使用
<a>
标签而不是<button>
s,则没有必要。此外,可以使用一个小的 JavaScript 片段为所有表单按钮全局设置防护:…或者,使用 jQuery: