SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
25.11.2024

Ajustes Dinâmicos de Largura para Campos de Entrada com Base no Conteúdo em CSS

Resposta Rápida

Para criar um campo de texto que ajusta dinamicamente sua largura com base no número de caracteres digitados, utilize JavaScript em conjunto com o atributo size e o evento oninput. O JavaScript definirá um valor inicial de largura que mudará à medida que o texto for inserido. Veja um exemplo:

<input type="text" size="10" oninput="this.size=Math.max(this.value.length, 10)">

Isso irá fornecer um campo de entrada que pode ajustar automaticamente seu tamanho com base na quantidade de texto digitada pelo usuário, garantindo que o tamanho não seja reduzido abaixo de um mínimo pré-definido.

Ajustando o Tamanho Dinâmico com CSS e a Unidade 'ch'

A unidade 'ch' em CSS é igual à largura do caractere '0' aplicado à fonte utilizada no campo de entrada. Isso permite uma definição de tamanho conveniente para um número específico de caracteres. Por exemplo:

input[type="text"] {
  width: 10ch; /* Ideal para entrada de 10 caracteres */
}

No entanto, devido às características da fonte, o resultado pode variar aproximadamente 20-30%. Esse fator deve ser levado em conta, e a largura ajustada de acordo com a fonte, o preenchimento e as especificidades da entrada do usuário.

Considerando Fontes, Caracteres Especiais e Interação do Usuário

Fontes e caracteres diferentes podem se comportar de maneira distinta. Nesse caso, uma abordagem dinâmica utilizando JavaScript e manipulação do DOM se torna útil. Monitoramos o evento input e, utilizando um elemento oculto <span>, que reflete o conteúdo e o estilo do campo de entrada, ajustamos a largura conforme necessário:

function resizeInput(input) {
  let hiddenSpan = document.createElement('span');
  hiddenSpan.style.visibility = 'hidden';
  hiddenSpan.style.position = 'absolute';
  hiddenSpan.textContent = input.value || input.placeholder;

  document.body.appendChild(hiddenSpan);
  let newWidth = Math.max(hiddenSpan.scrollWidth, 10);
  input.style.width = `${newWidth}px`;

  document.body.removeChild(hiddenSpan);
}

document.querySelector('input[type=text]').addEventListener('input', function() {
  resizeInput(this);
});

A função resizeInput ajusta a largura do campo de entrada, considerando os placeholders e mantendo um tamanho mínimo para o campo.

Visualização

Vamos visualizar nosso campo de entrada da seguinte forma:

Campo de Entrada 🔭: [🔍📏]

Quando o texto começa a ser inserido no campo:

"Planeta" 🌍 = 🔭: [🔍📏📏📏📏📏📏📏]
"Cometa" 💫  = 🔭: [🔍📏📏📏📏📏]

A largura do campo muda com base na quantidade de texto inserido, muito parecido com um telescópio ajustado para observar objetos cósmicos.

O comprimento reflete **o Conteúdo**:
"🔭: [🔍📏📏]" versus "🔭: [🔍🔍🔍📏📏📏📏📏📏]"

Monitorando o Tamanho Dinâmico do Campo e Compatibilidade entre Navegadores

Certifique-se de que sua solução funcione corretamente em diferentes navegadores e dispositivos. Teste-a sob várias condições antes de implementá-la em produção.

Notas Especiais para Casos Específicos

  • Adapte o tamanho do campo para texto inserido da direita para a esquerda (RTL) e considere interações com Editores de Método de Entrada (IME).
  • Se a largura do placeholder exceder a largura do texto inserido, o campo de entrada deve responder de acordo.

Design Responsivo

Para criar um design responsivo, os campos de entrada devem ajustar suas larguras dentro do contêiner, dependendo dos parâmetros da tag <span> oculta.

Transformando Campos de Entrada com jQuery

Se você prefere jQuery, suas capacidades de manipulação de eventos e DOM podem ajudar a definir o tamanho do campo de entrada:

$('input[type="text"]').on('input', function() {
  resizeInput($(this));
});

Atenção às Demonstrações e Usabilidade

Ao criar demonstrações e projetos públicos, considere a usabilidade e acessibilidade dos campos de entrada. As soluções aplicadas devem ser intuitivas e universais.

Recursos Úteis

  1. MDN Web Docs - <input>: Elemento de Entrada de Dados de Formulário — descrição detalhada do elemento de entrada.
  2. W3Schools - Como Criar um Campo de Entrada que se Expande Automaticamente — um guia para criar um campo de entrada dinâmico.
  3. Discussão no Stack Overflow - Expansão Automática da Largura dos Campos de Entrada com Base no Conteúdo — visão geral de opiniões e experiências.
  4. Artigo do Medium - A Arte de Construir Formulários Responsivos — recomendações úteis para a criação de formulários implantáveis.
  5. Web Design Tuts+ - Dica Rápida: Usando o Web Inspector para Depurar o Safari Mobile — um guia para depurar formulários em dispositivos móveis.
  6. Tutorial DigitalOcean - Ajuste Automático da Largura de Entrada com Base no Conteúdo — material educacional sobre a criação de um campo de entrada com largura dinâmica.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!