Aqui está uma solução simples e limpa sem usar JavaScript ou hacks de layout de tabela. É semelhante a esta resposta: Insira a largura automática do texto preenchendo 100% com outros elementos flutuantes
É importante agrupar o campo de entrada com uma extensão que seja display:block
. A próxima coisa é que o botão tem que vir primeiro e o campo de entrada depois.
Em seguida, você pode flutuar o botão para a direita e o campo de entrada preenche o espaço restante.
form {
width: 500px;
overflow: hidden;
background-color: yellow;
}
input {
width: 100%;
}
span {
display: block;
overflow: hidden;
padding-right:10px;
}
button {
float: right;
}
<form method="post">
<button>Search</button>
<span><input type="text" title="Search" /></span>
</form>
Um violino simples: http://jsfiddle.net/v7YTT/90/
Atualização 1: se o seu site é direcionado apenas a navegadores modernos, sugiro o uso de caixas flexíveis . Aqui você pode ver o suporte atual .
Atualização 2: isso funciona mesmo com vários botões ou outros elementos que compartilham o máximo com o campo de entrada. Aqui está um exemplo .