如何在CSS中设置html输入标签宽度“fit-content”

Dan*_*ang 9 html javascript css

我的 HTML 页面中有一个输入标签,如下所示。

我想制作一个输入标签宽度以适应内容和最小宽度。所以我写了如下CSS。

.number-input {
  width: fit-content;
  min-width: 120px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="price-input">
  <input type="text" value="200001230001003002" class="number-input">
  <button class="save"></button>
</div>
Run Code Online (Sandbox Code Playgroud)

是否可以调整 CSS 以使输入适合文本宽度?

我已经搜索过,但答案使用了 javascript 函数。

请任何人帮忙。

Joh*_*ohn 6

这是使用很少使用的单位的好时机,ch其相对于当前字体的“0”(零)的宽度和所使用的字体大小!然后使用 JS 使宽度等于输入的长度,ch我已经在 2 个地方完成了此操作,一次是在加载时,然后onkeypress是在编辑时扩展。看看这里:

.number-input {
    width: fit-content;
    min-width: 120px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="price-input">
    <input type="text" id="mytxt" onkeypress="this.style.width = (this.value.length) + 'ch';" value="200001230001003002" class="number-input" onload="myFunction()">
    <button onload="myFunction()" class="save"></button>
</div>



<script>
function myFunction() {
  document.getElementById("mytxt").style.width = (mytxt.value.length) + 'ch';
}

window.onload = myFunction();
</script>
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,遗憾的是它只适用于等宽字体。 (2认同)

Sat*_*eru 3

你可以这样做。我发布了两个带有 span 和 data-* 的解决方案。

html

    <p>solution with span <span class="number-input" role="textbox" contenteditable>200001230001003002</span></p>
    
    <p>Solution with data-*<label class="input-sizer" data-value="200001230001003002">
        <input class="number-input1" type="text" oninput="this.parentNode.dataset.value = this.value" size="1" value="200001230001003002">
    </label></p>
    <button class="save"></button>
Run Code Online (Sandbox Code Playgroud)

-css

.number-input {
  border: 1px solid #ccc;
  font-family: inherit;
  font-size: inherit;
  padding: 1px 6px;
}

.number-input1{
  font-family: inherit;
  font-size: inherit;
}

.input-sizer {
  display: inline-grid;
  vertical-align: top;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  position: relative;
  font-family: inherit;
  font-size: inherit;
}  

.input-sizer::after 
{
    content: attr(data-value) "  ";
    visibility: hidden;
    font-family: inherit;
    font-size: inherit;
    white-space: pre-wrap; 
}
Run Code Online (Sandbox Code Playgroud)