これは、絶対配置で実現できます。フローからスパンを取り出し、入力の上に置きます。また、display:block が設定されている場合、自然に 100% の幅にならないため、これを行うには入力を div に配置する必要があります。
HTML
<div class="wrapper">
<span class="span-one">span</span>
<div class="input"><input type="text" class="input"></div>
<span class="span-two">span</span>
</div>
CSS
.wrapper { position: relative; }
div.input { margin: 0 20px; }
input {
width: 100%;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box; }
span.span-one {
position: absolute;
width:20px; height:20px;
left:0; top:0;
background-color: red; }
span.span-two {
position: absolute;
width:20px; height:20px;
right:0; top:0;
background-color: red; }
これがフィドルです:http://jsfiddle.net/ywUeu/1/
もちろん、スパン内の「スパン」という単語は 20px よりも長いため、スパンからはみ出します。私もやったように、入力に「ボックスサイジング」を追加するのが最善かもしれません。