Как указано в другом ответе, width: auto не работает из-за того, что ширина создается атрибутом размера ввода, который не может быть установлен на «auto» или что-то подобное.
Есть несколько обходных путей, которые вы можете использовать, чтобы заставить его хорошо работать с блочной моделью, но, насколько мне известно, ничего фантастического.
Сначала вы можете установить заполнение поля в процентах, убедившись, что ширина в сумме составляет 100%, например:
input {
width: 98%;
padding: 1%;
}
Еще вы можете попробовать использовать абсолютное позиционирование, при этом left и right установлены в 0. Используя эту разметку:
<fieldset>
<input type="text" />
</fieldset>
И этот CSS:
fieldset {
position: relative;
}
input {
position: absolute;
left: 0;
right: 0;
}
Это абсолютное позиционирование приведет к тому, что ввод будет заполнять родительский набор полей по горизонтали, независимо от заполнения или поля ввода. Однако огромным недостатком этого является то, что теперь вам нужно иметь дело с высотой набора полей, которая будет равна 0, если вы ее не установите. Если все ваши входы имеют одинаковую высоту, это сработает для вас, просто установите высоту набора полей на любую высоту ввода.
Помимо этого, есть несколько JS-решений, но мне не нравится применять базовые стили с JS.