Digamos que eu tenho uma caixa de texto que quero preencher uma linha inteira. Eu daria um estilo assim:
input.wide {display:block; width: 100%}
Isso causa problemas porque a largura é baseada no conteúdo da caixa de texto. As caixas de texto possuem margem, bordas e preenchimento por padrão, o que torna uma caixa de texto com 100% de largura maior que seu contêiner.
Por exemplo, aqui à direita:
Existe alguma maneira de fazer uma caixa de texto preencher a largura de seu contêiner sem se expandir além dele?
Aqui está um exemplo de HTML para mostrar o que quero dizer:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<style type="text/css">
#outer{border: 1px solid #000; width: 320px; margin: 0px;padding:0px}
#inner{margin: 20px; padding: 20px; background: #999;border: 1px solid #000;}
input.wide {display:block; margin: 0px}
input.normal {display:block; float: right}
</style>
</head>
<body>
<div id="outer">
<div id="inner">
<input type="text" class="wide" />
<input type="text" class="normal" />
<div style="clear:both;"></div>
</div>
</div>
</body>
</html>
Se isso for executado, você poderá ver olhando para a caixa de texto "normal" que a caixa de texto "larga" está saindo além do contêiner. A caixa de texto "normal" flutua até a borda real do contêiner. Estou tentando fazer com que a caixa de texto "larga" encha seu contêiner, sem expandir além da borda, como a caixa de texto "normal".
Sim: usando a propriedade CSS3 'box-sizing: border-box', é possível redefinir o que 'width' significa incluir o preenchimento e a borda externos.
Infelizmente, por ser CSS3, o suporte não é muito maduro e, como o processo de especificação ainda não foi concluído, ele possui nomes temporários diferentes nos navegadores. Assim:
A alternativa da velha escola é simplesmente colocar uma quantidade de 'padding-right' no elemento <div> ou <td> anexo, igual a quanto estofamento / borda extra esquerda e direita em 'px' você acha que os navegadores dê a entrada. (Normalmente 6px para IE <8.)
fonte
Isso resolveu o problema para mim!
Sem a necessidade de uma div externa. Basta aplicá-lo à sua caixa de texto.
Com esta propriedade "As propriedades de largura e altura (e propriedades mín. / Máx.) Incluem conteúdo, preenchimento e borda, mas não a margem"
Veja a descrição da propriedade em w3schools .
Espero que isso ajude alguém!
fonte
Eu mesmo me deparei com esse problema, e a única solução que encontrei que funcionou em todos os meus navegadores de teste (IE6, IE7, Firefox) foi a seguinte:
O código:
Aqui, o estouro horizontal total do elemento de entrada é de 6px - 2x (preenchimento + borda) - portanto, definimos um preenchimento à direita para o DIV interno de 6px.
fonte
o suporte ao dimensionamento de caixas é realmente bom: http://caniuse.com/#search=box-sizing
Portanto, a menos que você tenha como alvo o IE7, poderá resolver esse tipo de problema usando essa propriedade. Uma camada como sass ou menos facilita o manuseio de regras prefixadas como essa, btw.
fonte
Na verdade, é porque o CSS define 100% em relação a toda a largura do contêiner, incluindo suas margens, bordas e preenchimento; isso significa que o espaço está disponível. seu conteúdo é uma quantidade menor que 100%, a menos que o contêiner não tenha margens, bordas ou preenchimentos.
Isso é contra-intuitivo e amplamente considerado por muitos como um erro com o qual estamos presos agora . Isso significa efetivamente que as dimensões% não servem para nada além de um contêiner de nível superior e, mesmo assim, apenas se não tiver margens, bordas ou preenchimento.
Observe que as margens, bordas e preenchimento do campo de texto estão incluídos no tamanho CSS especificado para ele - é o contêiner que descarta as coisas.
Trabalhei de maneira tolerável usando 98%, mas essa é uma solução menos que perfeita, pois os campos de entrada tendem a ficar mais curtos à medida que o contêiner fica maior.
Edição: me deparei com essa pergunta semelhante - nunca tentei a resposta dada e não sei ao certo se isso se aplica ao seu problema, mas parece que sim.
fonte
Uma solução que pode funcionar (funciona para mim) é aplicar margem negativa na entrada (caixa de texto) ... ou largura fixa para ie7 ou descartar o suporte ie7. Isso resulta em largura perfeita de pixel .. Para mim, são 7, então eu adicionei 3 e 4, mas ainda é pixel perfeito ..
Eu tive o mesmo problema e eu odiava ter divs extras para borda etc!
Então aqui está a minha solução que parece funcionar!
Você deve usar uma folha de estilo somente ie7 para evitar os starhacks.
fonte
Se você não pode usá-
box-sizing:border-box
lo, tente remover o atributowidth:100%
e colocar umsize
atributo muito grande no<input>
elemento. No entanto, você deve modificar o html e não pode fazê-lo apenas com CSS:fonte
Se você não precisar fazer isso dinamicamente (por exemplo, seu formulário é de largura fixa), basta definir a largura dos
<input>
elementos filhos para a largura do contêiner, menos decorações como estofamento, margem, borda etc.:fonte
Se você não pode usar o tamanho da caixa (por exemplo, quando você converte HTML para PDF usando o iText). Tente o seguinte:
CSS
HTML
fonte
Isso funciona:
A primeira 'largura' é uma regra de fallback para navegadores mais antigos.
fonte
Basta estilizar a entrada para compensar o preenchimento extra. No exemplo a seguir, o preenchimento na entrada seria 10 px à esquerda e à direita para um deslocamento total do preenchimento de 20 px:
fonte