Eu tenho o seguinte trecho de CSS e HTML sendo renderizado.
textarea
{
border:1px solid #999999;
width:100%;
margin:5px 0;
padding:3px;
}
<div style="display: block;" id="rulesformitem" class="formitem">
<label for="rules" id="ruleslabel">Rules:</label>
<textarea cols="2" rows="10" id="rules"/>
</div>
O problema é que a área de texto acaba sendo 8px mais larga (2px para borda + 6px para preenchimento) do que o pai. Existe uma maneira de continuar a usar borda e preenchimento, mas restringir o tamanho total do textarea
para a largura do pai?
html
css
stylesheet
Eric Schoonover
fonte
fonte
Respostas:
Por que não esquecer os hacks e apenas fazê-lo com CSS?
Um que eu uso com frequência:
Veja o suporte do navegador aqui .
fonte
A resposta para muitos problemas de formatação CSS parece ser "add another <div>!"
Então, nesse espírito, você tentou adicionar uma div de wrapper à qual a borda / preenchimento é aplicada e depois colocar a área de texto com 100% de largura dentro dela? Algo como (não testado):
fonte
vamos considerar a saída final renderizada ao usuário do que queremos alcançar: uma área de texto preenchida com borda e preenchimento, cujas características são clicadas, elas passam o foco para nossa área de texto e a vantagem de uma largura automática de 100% típico de elementos de bloco.
A melhor abordagem, na minha opinião, é usar soluções de baixo nível, na medida do possível, para alcançar o suporte máximo aos navegadores. Nesse caso, o único HTML poderia funcionar bem, evitando o uso de Javascript (que de qualquer maneira todos gostamos).
A tag LABEL vem em nossa ajuda porque tem esse comportamento e pode conter os elementos de entrada aos quais deve ser endereçada. Seu estilo padrão é o dos elementos inline, portanto, dando ao rótulo um estilo de exibição de bloco, podemos aproveitar a largura automática de 100%, incluindo preenchimento e bordas, enquanto a área de texto interna não possui borda, preenchimento e largura de 100% .
Examinando as especificidades do W3C, outras vantagens que podemos notar são:
Consulte as especificações do W3C para obter informações mais detalhadas.
Exemplo simples:
O preenchimento e a borda dos elementos .textareaContainer são os que queremos fornecer à área de texto. Tente editá-los para estilizá-lo como quiser. Dei preenchimento e bordas grandes e visíveis ao elemento .textareaContainer para permitir que você veja o comportamento deles quando clicado.
fonte
Se você não estiver muito preocupado com a largura do preenchimento, essa solução também manterá o preenchimento em porcentagem.
Não é perfeito, mas você terá um pouco de preenchimento e a largura é de até 100%, então está tudo bem
fonte
Encontrei outra solução aqui que é tão simples: adicione padding-right ao contêiner da área de texto. Isso mantém a margem, a borda e o preenchimento na área de texto, o que evita o problema apontado por Beck sobre o foco destacado pelo chrome e safari ao redor da área de texto.
O preenchimento à direita do contêiner deve ser a soma da margem, borda e preenchimento efetivos nos dois lados da área de texto, além de qualquer preenchimento que você possa desejar para o contêiner. Então, para o caso na pergunta original:
fonte
Este código funciona para mim com o IE8 e Firefox
fonte
Você pode usar a propriedade de dimensionamento de caixa, que é suportada por todos os principais navegadores compatíveis com o padrão e pelo IE8 +. Você ainda precisará de uma solução alternativa para o IE7. Leia mais aqui .
fonte
Não, você não pode fazer isso com CSS. Essa é a razão pela qual a Microsoft introduziu outro modelo de caixa , talvez mais prático . O modelo de caixa que acabou vencendo torna impraticável misturar porcentagens e unidades.
Não acho que você possa expressar larguras de preenchimento e borda em porcentagem dos pais também.
fonte
Eu estava procurando por uma solução de estilo embutido em vez da solução CSS, e é o melhor que posso fazer para uma área de texto responsiva:
fonte
Se você preencher e compensar assim:
o lado direito da área de texto se alinha perfeitamente com o lado direito do contêiner, e o texto dentro da área de texto se alinha perfeitamente com o corpo do texto no contêiner ... e o lado esquerdo da área de texto 'sobressai' um pouco. às vezes é mais bonito.
fonte
Use a propriedade de dimensionamento da caixa :
Isso vai ajudar
fonte
Para pessoas que usam o Bootstrap, o textarea.form-control também pode levar a problemas de dimensionamento da área de texto. Chrome e Firefox parecem usar alturas diferentes com o seguinte CSS de Bootstrap:
fonte
Costumo corrigir esse problema
calc()
. Você apenas atribui à área de texto uma largura de 100% e uma certa quantidade de preenchimento, mas é necessário subtrair o preenchimento total esquerdo e direito da largura de 100% que você atribuiu à área de texto:Ou se você deseja atribuir uma borda à área de texto:
fonte
E as margens negativas?
fonte
fonte