Пример HTML/CSS:
<div class="container">
<input type="text" />
<div class="filler"></div>
</div>
div.container {
padding: 5px;
border: 1px solid black;
background-color: gray;
}
div.filler {
background-color: red;
height: 5px;
}
input {
display: block;
}
Вопрос
Почему окно ввода не расширяется, чтобы иметь ту же внешнюю ширину, что, скажем, div.filler
? То есть, почему окно ввода не расширяется, чтобы соответствовать его контейнеру, как и другие элементы блока с помощью width: auto;
do?
Я попытался проверить "User Agent CSS" в Firebug, чтобы узнать, могу ли я что-нибудь придумать. Не повезло. Я не мог найти каких-либо особых различий в CSS, которые я мог бы конкретно связать с полем ввода, по-другому отличающимся от обычного div.filler
.
Помимо любопытства, я хотел бы знать, почему это нужно, чтобы разобраться в нем, чтобы выяснить способ установить ширину один раз и забыть об этом. Моя текущая практика явной установки ширины как input
, так и ее содержащего элемента блока кажется избыточной и менее модульной. Хотя я знаком с техникой обертывания входного элемента в div, а затем назначая отрицательные поля входного элемента, это кажется совершенно нежелательным.
borkweb и Phrogz предоставили исключительную информацию, которая использует боковую модель border-box
из старых дней. Спасибо за это! Я хотел бы еще раз подчеркнуть мой вопрос, который я намерен придерживаться в предлагаемом решении моей практической проблемы:
Что относительно спецификации заставляет окна ввода форматироваться в отличие от обычных элементов блока, таких как div
s? Решение с пограничным полем замечательно, но оно не удовлетворяет желанию выяснить, почему в первую очередь вводятся поля ввода и почему они не могут вести себя так же, как обычные div
s, которые не в настоящее время используйте модель пограничного блока.