Digamos que eu tenho um trecho de html como este:
<div style="width:300px;">
<label for="MyInput">label text</label>
<input type="text" id="MyInput" />
</div>
Este não é o meu código exato, mas o importante é que há um rótulo e uma entrada de texto na mesma linha em um contêiner de largura fixa. Como posso estilizar a entrada para preencher a largura restante do contêiner sem embrulhar e sem saber o tamanho do rótulo?
Respostas:
por mais que todo mundo odeie tabelas para layout, elas ajudam com coisas como essa, usando tags de tabela explícitas ou usando display: table-cell
fonte
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.
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 .
fonte
Sugiro usar o Flexbox:
Certifique-se de adicionar os prefixos adequados do fornecedor!
fonte
label
? Eu estaria especialmente interessado em saber como o código HTML a pergunta original poderia ser layouted usandoborder-box
...flex: 2
e nãoflex: 1
?Por favor, use flexbox para isso. Você tem um contêiner que flexionará seus filhos em uma linha. O primeiro filho ocupa seu espaço conforme necessário. O segundo flexiona para ocupar todo o espaço restante:
fonte
row
por padrão, você não precisa especificá-lo.A maneira mais fácil de conseguir isso seria:
CSS:
HTML:
Parece que: http://jsfiddle.net/JwfRX/
fonte
Um truque muito fácil é usar uma
CSS calc
fórmula. Todos os navegadores modernos, IE9, grande variedade de navegadores móveis devem suportar isso.fonte
você pode tentar isso:
fonte
Se você estiver usando o Bootstrap 4:
Melhor ainda, use o que está embutido no Bootstrap:
https://jsfiddle.net/nap1ykbr/
fonte