Pergunta CSS para iniciantes. Eu pensei width:auto
que um display:block
elemento significava 'preencher o espaço disponível'. No entanto, para um <input>
elemento, isso não parece ser o caso. Por exemplo:
<body>
<form style='background-color:red'>
<input type='text' style='background-color:green;display:block;width:auto'>
</form>
</body>
Duas perguntas então:
Existe uma definição de exatamente qual largura: auto significa? A especificação CSS parece vaga para mim, mas talvez eu tenha perdido a seção relevante.
Existe uma maneira de alcançar o meu comportamento esperado para um campo de entrada - ou seja. preencher o espaço disponível como outros elementos no nível do bloco?
Obrigado!
Respostas:
A
<input>
largura de uma é gerada a partir de seusize
atributo. O padrãosize
é o que está direcionando a largura automática.Você pode tentar
width:100%
como ilustrado no meu exemplo abaixo.Não preenche a largura:
Preenche a largura:
Tamanho menor, largura menor:
ATUALIZAR
Aqui está o melhor que eu poderia fazer depois de alguns minutos. É 1px de desconto no FF, Chrome e Safari, e perfeito no IE. (O problema é # ^ & * O IE aplica bordas de maneira diferente de todos os outros, por isso não é consistente.)
fonte
border:2px inset #eee; margin:-2px
. Ainda não testei, mas algo nesse sentido."Existe uma definição exata de qual largura: auto significa? A especificação do CSS parece vaga para mim, mas talvez eu tenha perdido a seção relevante."
Na verdade, ninguém respondeu à parte acima da pergunta do pôster original.
Aqui está a resposta: http://www.456bereastreet.com/archive/201112/the_difference_between_widthauto_and_width100/
fonte
Conforme declarado na outra resposta, width: auto não funciona devido à largura gerada pelo atributo de tamanho da entrada, que não pode ser definido como "auto" ou algo semelhante.
Existem algumas soluções alternativas que você pode usar para que ele funcione bem com o modelo de caixa, mas nada fantástico até onde eu sei.
Primeiro, você pode definir o preenchimento no campo usando porcentagens, certificando-se de que a largura seja de até 100%, por exemplo:
Outra coisa que você pode tentar é usar o posicionamento absoluto, com a esquerda e a direita definidas como 0. Usando esta marcação:
E este CSS:
Esse posicionamento absoluto fará com que a entrada preencha o conjunto de campos pai horizontalmente, independentemente do preenchimento ou da margem da entrada. No entanto, uma grande desvantagem disso é que agora você precisa lidar com a altura do conjunto de campos, que será 0, a menos que você o defina. Se suas entradas tiverem a mesma altura, isso funcionará para você, simplesmente defina a altura do conjunto de campos para qualquer que seja a altura da entrada.
Fora isso, existem algumas soluções JS, mas não gosto de aplicar estilos básicos com JS.
fonte
Porque
input
'swidth
é controlado por ele desize
atributo, isto é como eu inicializar uminput
width
de acordo com seu conteúdo:fonte
#angular
resposta específica não seja válida para a pergunta do OP (e não estou votando), vim para esse tópico apenas para encontrar essa ideia em particular.Pode não ser exatamente o que você deseja, mas minha solução alternativa é aplicar o estilo de largura automática a uma div de wrapper - depois defina sua entrada como 100%.
fonte
A única opção em que consigo pensar é usar
width:100%
. Se você também deseja colocar um preenchimento no campo de entrada, basta colocar um contêinerlabel
ao redor dele, mova a formatação para esse rótulo e especifique o preenchimento para o rótulo. Os campos de entrada são rígidos.fonte
Resposta 1 - "resposta" deu uma boa resposta / link para ele. Para resumir, "auto" é o padrão, por isso é como remover qualquer alteração na largura de um elemento
Resposta 2 - use em seu
width: 100%
lugar. Ele preencherá 100% do contêiner pai, nesse caso, o "formulário".fonte
Links absolutamente incríveis que descrevem um recurso incrível absoluto:
https://css-tricks.com/snippets/css/a-guide-to-flexbox
https://www.htmllion.com/css-flexbox.html
A essência:
display: flex;
.flex-grow: 1;
em cada um dos elementos contidos.Editar - exemplo :
fonte