На самом деле, то, что вы делаете, работает нормально. Вам просто нужно помнить, чтобы установить позицию родительского элемента.
<div>
<input type="text">
</div>
Тогда CSS это:
div {
width: 400px;
position: relative;
}
input {
position: absolute;
left: 5px;
right: 5px;
}
Это приведет к тому, что поле ввода будет 390px.
Если вы установите гибкость div, то поле ввода тоже будет.
edit: , кажется, работает только в Chrome, так что вам нужно поместить ввод внутрь другого элемента. Это работает и в FF, и в IE:
<div id="parent">
<div><input type="text"></div>
</div>
с этим CSS:
#parent {
position: relative;
width: 400px;
}
#parent div {
position: absolute;
left: 5px;
right: 5px;
}
#parent div input {
width: 100%;
}
Это имеет ожидаемый эффект. Немного хак, может быть ...