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.