Это, к сожалению, невозможно с чистым CSS; Модификации HTML или Javascript необходимы для любого нетривиального гибкого, но ограниченного поведения пользовательского интерфейса. CSS3-столбцы помогут в этом отношении, но не в таких сценариях, как ваш.
Решение Давида самое чистое. Это на самом деле не случай дивитита - вы не добавляете кучу дивов без необходимости, или не даете им имена классов, такие как «p» и «h1». Он служит определенной цели, и в этом случае приятно то, что это также расширяемое решение, например Вы можете добавить закругленные углы в любое время, не добавляя ничего дальше. На доступность также не влияют, так как они пустые div.
Кстати, вот как я реализую все свои текстовые поля:
<div class="textbox" id="username">
<div class="before"></div>
<div class="during">
<input type="text" value="" />
</div>
<div class="after"></div>
</div>
Теперь вы можете свободно использовать CSS для добавления закругленных углов, добавления отступов, как в вашем случае, и т. Д., Но вам также не нужно - вы можете полностью скрыть эти боковые элементы и иметь только обычный текстовый блок ввода.
Другими решениями являются использование таблиц, например, Amazon использует таблицы, чтобы получить гибкий, но ограниченный макет, или использовать Javascript для настройки размеров и обновления их при изменении размеров окна, например, Google Docs, Maps и т. Д. Все это делают.
В любом случае, мои два цента: не позволяйте идеализму мешать практичности в подобных случаях. :) Решение Дэвида работает и практически не загромождает HTML (и на самом деле использование семантических имен классов, таких как «до» и «после», все еще очень чистая вещь).