Чому display:block;width:auto;
моє введення тексту не поводиться як div і не заповнює ширину контейнера?
У мене було враження, що div - це просто блок-елемент із автоматичною шириною. У наведеному нижче коді не повинні роздільник і вхід мати однакові розміри?
Як мені отримати вхід для заповнення ширини? 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, я намагаюся зрозуміти суть проблеми та чи її можна подолати, змінивши природу самого ВХОДУ.
Гаразд, це ДУЖЕ дивно! Я виявив, що рішення полягає в тому, щоб просто додати max-width:100%
до вхідного сигналу width:100%;padding:5px;
. Однак це викликає ще більше питань (про які я запитаю в окремому запитанні), але, схоже, ширина використовує звичайну модель CSS-коробки, а максимальна ширина використовує модель межі Internet Explorer. Як дуже дивно.
Гаразд, останній виявляється помилкою в Firefox 3. Internet Explorer 8 і Safari 4 обмежують максимальну ширину до 100% + прокладка + рамка, що саме те, що говорить специфікація. Нарешті, у Internet Explorer щось підходить.
О боже, це приголомшливо! У процесі гри з цим, і за великої допомоги поважних гуру Діна Едвардса та Еріка Арвідссона , мені вдалося зібрати три окремих рішення, щоб зробити справжній крос-браузер на 100% шириною на елементах з довільною прокладкою та рамками. Дивіться відповідь нижче. Це рішення не потребує додаткової розмітки HTML, просто класу (або селектора) та необов'язкової поведінки для застарілого Internet Explorer.
input
елементів, які, очевидно, не відповідають специфікації CSS 2.1, тоді як питання, з яким ви посилаєтесь, запитує, як запобігти переповненню ящиків, що ідеально відбувається в межах специфікацій CSS 2.1. Як питання, так і їх рішення перетинаються, але називати їх точними дублікатами просто неправильно.