Стоит отметить, что при изменении моноширинного шрифта может быть выполнено приятное изменение размера, поэтому мы можем идеально изменить размер элемента input
с помощью модуля ch
.
Также в этом подходе мы можемобновите ширину поля, просто обновив CSS-переменную ( пользовательское свойство ) для события input
, и мы также должны позаботиться о предварительно заполненном вводе для события DOMContentLoaded
Демонстрация кодов
Разметка
<input type="text" value="space mono font" class="selfadapt" />
CSS
:root { --size: 0; }
.selfadapt {
padding: 5px;
min-width: 10ch;
font-family: "space mono";
font-size: 1.5rem;
width: calc(var(--size) * 1ch);
}
В качестве корневой переменной мы устанавливаем --size: 0
: эта переменная будет содержать длину ввода и будет умножена на 1ch
внутри выражения calc()
.По умолчанию мы также можем установить минимальную ширину, например, 10ch
Часть Javascript читает длину вставленного значения и обновляет переменную --size
:
JS
let input = document.querySelector('.selfadapt');
let root = document.documentElement.style;
/* on input event auto resize the field */
input.addEventListener('input', function() {
root.setProperty('--size', this.value.length );
});
/* resize the field if it is pre-populated */
document.addEventListener("DOMContentLoaded", function() {
root.setProperty('--size', input.value.length);
});
конечно, это все еще работает, даже если вы не используете моноширинный шрифт, но в этом случае вам нужно будет изменить формулу calc()
, умножив переменную --size
на другое значение(что строго зависит от font-family
и font-size
), отличных от 1ch
.