Width: auto для полей <input>
Новый вопрос CSS. Я думал, что width:auto
для элемента display:block
означает "заполнить свободное пространство". Однако для элемента <input>
это, похоже, не так. Например:
<body>
<form style='background-color:red'>
<input type='text' style='background-color:green;display:block;width:auto'>
</form>
</body>
Два вопроса:
-
Существует ли определение того, какая ширина: auto означает? Спецификация CSS кажется смутной для меня, но, возможно, я пропустил соответствующий раздел.
-
Есть ли способ достичь ожидаемого поведения для поля ввода - т.е. заполнить доступное пространство, как и другие элементы уровня блока?
Спасибо!
Ответы
Ответ 1
Ширина <input>
создается из атрибута size
. Значение по умолчанию size
- это то, что управляет автоматической шириной.
Вы можете попробовать width:100%
, как показано в моем примере ниже.
Не заполняет ширину:
<form action='' method='post' style='width:200px;background:khaki'>
<input style='width:auto' />
</form>
Заполняет ширину:
<form action='' method='post' style='width:200px;background:khaki'>
<input style='width:100%' />
</form>
Меньший размер, меньшая ширина:
<form action='' method='post' style='width:200px;background:khaki'>
<input size='5' />
</form>
UPDATE
Вот лучшее, что я мог сделать через несколько минут. Он 1px выключен в FF, Chrome и Safari и идеально подходит для IE. (Проблема в том, что # ^ & * IE применяет границы по-другому, чем все остальные, чтобы они не были согласованы.)
<div style='padding:30px;width:200px;background:red'>
<form action='' method='post' style='width:200px;background:blue;padding:3px'>
<input size='' style='width:100%;margin:-3px;border:2px inset #eee' />
<br /><br />
<input size='' style='width:100%' />
</form>
</div>
Ответ 2
"Существует ли определение того, какая ширина: авто означает?
spec кажется смутным для меня, но, возможно, я пропустил соответствующий раздел.
Никто не ответил на вышеупомянутую часть исходного вопроса о посте.
Вот ответ:
http://www.456bereastreet.com/archive/201112/the_difference_between_widthauto_and_width100/
Пока значение ширины автоматически, элемент может иметь горизонтальный margin, padding и border, не становясь более широкими, чем его контейнер...
С другой стороны, если вы укажете ширину: 100%, то общее количество элементов ширина будет составлять 100% от его содержащего блока плюс любой горизонтальный запас, padding и border... Это может быть то, что вы хотите, но, скорее всего, это не так.
Чтобы визуализировать разницу, я привел пример: http://www.456bereastreet.com/lab/width-auto/
Ответ 3
Как указано в другом ответе, width: auto не работает из-за того, что ширина генерируется атрибутом размера ввода, который не может быть установлен на "авто" или что-то подобное.
Есть несколько обходных решений, которые вы можете использовать, чтобы заставить его хорошо играть с коробкой, но ничего фантастического, насколько мне известно.
Сначала вы можете установить прописку в поле с использованием процентов, убедившись, что ширина составляет до 100%, например:
input {
width: 98%;
padding: 1%;
}
Еще одна вещь, которую вы можете попробовать - использовать абсолютное позиционирование, с левым и правым значением 0. Используя эту разметку:
<fieldset>
<input type="text" />
</fieldset>
И этот CSS:
fieldset {
position: relative;
}
input {
position: absolute;
left: 0;
right: 0;
}
Это абсолютное позиционирование приведет к тому, что ввод заполнит родительский набор полей горизонтально, независимо от ввода или поля ввода. Однако огромный недостаток этого заключается в том, что теперь вам приходится иметь дело с высотой набора полей, которая будет равна 0, если вы не установите ее. Если ваши входы имеют одинаковую высоту, это будет работать для вас, просто установите высоту набора полей в зависимости от высоты ввода.
Кроме этого существуют некоторые решения JS, но мне не нравится применять базовый стиль с JS.
Ответ 4
Это может быть не совсем то, что вы хотите, но мое обходное решение - применить стиль автоучета к обертке div, а затем установить ваш вход на 100%.
Ответ 5
Единственный вариант, о котором я могу думать, - это использовать width:100%
. Если вы хотите иметь дополнение в поле ввода, а не просто разместить контейнер label
вокруг него, вместо этого переместите форматирование на эту метку, а также укажите дополнение к метке. Поля ввода являются жесткими.
Ответ 6
Ответ 1 - "ответ" дал хороший ответ/ссылку для него. Короче говоря, "auto" по умолчанию, так что это как удаление любых изменений в ширине элемента
Ответ 2 - вместо этого используйте width: 100%
. Он заполнит 100% родительского контейнера, в данном случае "форму".