Por que display:block;width:auto;
minha entrada de texto não se comporta como uma div e preenche a largura do contêiner?
Fiquei com a impressão de que uma div é simplesmente um elemento de bloco com largura automática. No código a seguir, a div e a entrada não devem ter dimensões idênticas?
Como obtenho a entrada para preencher a largura? A largura de 100% não funcionará, porque a entrada possui preenchimento e borda (causando uma largura final de 1 pixel + 5 pixels + 100% + 5 pixels + 1 pixels). Larguras fixas não são uma opção, e estou procurando algo mais flexível.
Eu preferiria uma resposta direta a uma solução alternativa. Parece uma peculiaridade do CSS e entender que pode ser útil mais tarde.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>width:auto</title>
<style>
div, input {
border: 1px solid red;
height: 5px;
padding: 5px;
}
input, form {
display: block;
width: auto;
}
</style>
</head>
<body>
<div></div>
<form>
<input type="text" name="foo" />
</form>
</body>
</html>
Devo salientar que já posso fazer isso com soluções alternativas do invólucro. Além disso, sem entender as relações semânticas da página e os seletores de CSS, estou tentando entender a natureza do problema e se ele pode ser superado alterando a natureza da própria entrada.
Ok, isso é realmente estranho! Eu descobri que a solução é simplesmente adicionar max-width:100%
a uma entrada com width:100%;padding:5px;
. No entanto, isso levanta ainda mais questões (que eu farei em uma pergunta separada), mas parece que width usa o modelo de caixa CSS normal e max-width usa o modelo de caixa de borda do Internet Explorer. Que estranho.
Ok, esse último parece ser um bug no Firefox 3. O Internet Explorer 8 e o Safari 4 limitam a largura máxima a 100% + preenchimento + borda, que é o que as especificações dizem fazer. Finalmente, o Internet Explorer acertou em algo.
Oh meu Deus, isso é incrível! No processo de brincar com isso, e com muita ajuda dos veneráveis gurus Dean Edwards e Erik Arvidsson , consegui reunir três soluções separadas para criar uma largura de 100% entre navegadores em elementos com preenchimento e bordas arbitrários. Veja a resposta abaixo. Esta solução não requer nenhuma marcação HTML extra, apenas uma classe (ou seletor) e um comportamento opcional para o Internet Explorer herdado.
input
elementos aparentemente não cumprindo a especificação CSS 2.1, enquanto a pergunta que você vinculou pergunta como evitar caixas transbordantes que ocorrem perfeitamente dentro dos limites da especificação CSS 2.1. As perguntas e suas soluções se sobrepõem, mas chamá-las de duplicatas exatas está simplesmente errada.Respostas:
Confira o que eu criei, uma solução usando o
box-sizing:border-box
estilo relativamente desconhecido do CSS 3. Isso permite uma largura '100%' verdadeira em qualquer elemento, independentemente do preenchimento e / ou das bordas dos elementos.Esta solução suporta o Internet Explorer 6 e o Internet Explorer 7 por meio de um comportamento escrito por Erik Arvidsson com alguns ajustes de Dean Edwards para suportar porcentagens e outras larguras que não sejam de pixels.
Exemplo de trabalho
prático de comportamento (boxsizing.htc)
fonte
width:100%
, mas isso não acontece se você usarwidth:auto
, consulte aqui: jsfiddle.net/hGuzEA razão pela qual isso acontece é que o tamanho de uma entrada de texto é determinado por seu atributo de tamanho. adicione size = "50" dentro da tag <input>. Então mude para size = "100" - entende o que eu quero dizer?
Suspeito que exista uma solução melhor, mas a única que me vem à mente é algo que encontrei na pergunta "Recursos ocultos do HTML" no SO: use uma div editável por conteúdo, em vez de uma entrada. Passar a entrada do usuário para o formulário anexo (se é isso que você precisa) pode ser um pouco complicado.
Recursos ocultos do HTML
fonte
button
também, que não tem umsize
atributo?input
é um elemento substituído.Sua melhor aposta é agrupar a entrada em uma div com sua borda, margens, etc., e ter a entrada interna com largura de 100% e sem borda, sem margens, etc.
Por exemplo,
fonte
Você poderia fingir, assim:
fonte
Tente o seguinte:
fonte
Além disso, você pode fingir, assim:
fonte
Adicione isso ao seu estilo:
fonte