在 HTML 输入中增加数字而不是字母

Increase numbers but not letters in HTML input

我遇到了这个问题,我想要一个可以同时接受数字和字母的输入。我希望能够只增加和减少数字,但保持字母不变,而且用户不能删除字母。喜欢下图:

只输入数字和字母:

我有一个解决方法,将 <span>mm</span> 放在数字旁边,使用 position: absolute;

有什么更好的方法吗?

你可以通过固定容器的宽度来做到这一点

HTML :

<div class="input__container">
  <input type="number" class="input" />
  <span class="input__text">mm</span>
</div> 

CSS :

.input__container{
  position:relative;
  width:60px;
}
.input{
  position:absolute;
  width:100%;
}
.input__text{
  position:absolute;
  top:50%;
  tranform:translateY(-50%);
  right:10px;
}

码笔:https://codepen.io/abdelhedi/pen/JjodrRq

检查下面我的解决方案:

.input-num {position: relative;}
.input-num span { position: absolute; left: 18px;}
<div class="input-num">
  <input value="50" type="number" name="quantity" min="10" max="99">
  <span>mm</span>
</div>

你可以这样做:

div {
  display: inline-block;
  position: relative;
}

div::after {
  position: absolute;
  top: 2px;
  right: .5em;
  transition: all .05s ease-in-out;
}

div:hover::after,
div:focus-within::after {
  right: 1.5em;
}

.ms::after {
  content: 'mm';
}
<div class="ms">
  <input type="number" id="milliseconds" />
</div>

另一种方法:文本对齐、填充和来自可重用的通用结构的伪造,其中单元可以更新。

可能的布局:

* {
  padding: 0;
  margin: 0;
}


/* 101*/

[data-unit] {
  font-family: courier;  /* use a font to master size and letter spacing */
  font-size: 1.25rem;
  letter-spacing: 0.05em;
}

[data-unit]::after {
  content: attr(data-unit);
  margin-left: -1.5em;  /* fits to font-family:courier; */
}

[data-unit] [type="number"] {
  font-size: 1.25rem;
  text-align: right;
  padding-right: 1.8em;  /* fits to font-family:courier; */
}


/* makup */

[data-unit] {
  box-sizing: border-box;
  display: flex;
  width: max-content;
  padding: 0.5em;
  background: lightblue;
  margin: 1em;
  border: outset;
  align-items: center;
}

[data-unit]::after {
  font-weight: bold;
}
only style data-unit attributes boxes.
<div data-unit="mm">
  <input type="number" value="0" />
</div>

<div data-unit="km">
  <input type="number" value="0" />
</div>

<div data-unit="cm">
  <input type="number" value="0" />
</div>
regular untouched
<div>
  <input type="number" value="0" />
</div>