Почему display:block;width:auto;
при моем вводе текста не ведет себя как div и заполняет ширину контейнера?
У меня сложилось впечатление, что div - это просто элемент блока с автоматической шириной. В следующем коде не должны ли div и input иметь одинаковые размеры?
Как мне получить данные для заполнения ширины? Ширина 100% не будет работать, потому что вход имеет отступы и границу (конечная ширина 1 пиксель + 5 пикселей + 100% + 5 пикселей + 1 пиксель). Фиксированная ширина не вариант, и я ищу что-то более гибкое.
Я бы предпочел прямой ответ обходному пути. Это похоже на причуду CSS, и понимание этого может быть полезно позже.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>width:auto</title>
<style>
div, input {
border: 1px solid red;
height: 5px;
padding: 5px;
}
input, form {
display: block;
width: auto;
}
</style>
</head>
<body>
<div></div>
<form>
<input type="text" name="foo" />
</form>
</body>
</html>
Я должен отметить, что уже могу сделать это с помощью обходных путей. Помимо этого искажения семантики страницы и отношений селектора CSS, я пытаюсь понять природу проблемы и можно ли ее преодолеть, изменив природу самого INPUT.
Хорошо, это действительно странно! Я обнаружил, что решение состоит в том, чтобы просто добавить max-width:100%
к входу с width:100%;padding:5px;
. Однако это поднимает еще больше вопросов (которые я задам в отдельном вопросе), но кажется, что width использует обычную блочную модель CSS, а max-width использует граничную модель Internet Explorer. Как странно.
Хорошо, эта последняя ошибка в Firefox 3. Internet Explorer 8 и Safari 4 ограничивают максимальную ширину 100% + отступ + граница, что и предписано в спецификации. Наконец, Internet Explorer что-то понял.
Боже мой, это потрясающе! В процессе игры с этим и с большой помощью почтенных гуру Дина Эдвардса и Эрика Арвидссона мне удалось собрать воедино три отдельных решения, чтобы сделать настоящий кросс-браузер 100 % ширина элементов с произвольным заполнением и границами. Смотрите ответ ниже. Это решение не требует никакой дополнительной разметки HTML, только класс (или селектор) и необязательное поведение для устаревшего Internet Explorer.