SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
17.11.2024

Ajuste Automático de Altura para Textareas e Remoção de Scrollbars em HTML/CSS

Resposta Rápida

A altura de uma textarea pode ser ajustada dinamicamente utilizando JavaScript. Primeiro, defina o valor de style.height como '5px', e em seguida, ajuste-o para o seu scrollHeight. A solução abaixo funciona perfeitamente:

function autoGrow(el) {
  el.style.height = '5px';
  el.style.height = el.scrollHeight + 'px';
}

// Vincule esta função ao evento 'input'
document.getElementById('textarea').addEventListener('input', function() {
  autoGrow(this);
});

Com esse código, seu elemento <textarea> aumentará suavemente de altura à medida que você digita, evitando que a barra de rolagem apareça.

Por Trás das Cenas

Para entender melhor como o ajuste automático de tamanho funciona, precisamos considerar o conceito de scrollHeight. Este é um valor que representa a altura total do conteúdo de um elemento, incluindo sua parte invisível.

Definir style.height como '5px' permite que scrollHeight calcule a altura necessária para todo o conteúdo, removendo efetivamente a barra de rolagem. Os usuários apreciam esta abordagem pela sua conveniência.

Tratando Casos Especiais

Embora o script básico seja bastante efetivo, há várias considerações adicionais a serem abordadas:

Versatilidade

Usar JavaScript puro garante compatibilidade entre navegadores e comportamento estável do sistema, sem a necessidade de incluir bibliotecas externas.

Tratando Eventos de Carregamento da Página e Redimensionamento da Janela

É aconselhável aprimorar a função autoGrow para que ela seja acionada tanto no carregamento da página quanto ao redimensionar a janela:

// Executar a função no carregamento da página
window.addEventListener('load', function() {
  autoGrow(document.getElementById('textarea'));
});
// E ao redimensionar a janela
window.addEventListener('resize', function() {
  autoGrow(document.getElementById('textarea'));
});

Integração com Frameworks

Em projetos baseados em jQuery, usar o plugin AutoSize é conveniente. Ao trabalhar com AngularJS, pode-se criar uma diretiva utilizando $timeout para levar em conta as mudanças no scrollHeight após interações no DOM.

Controle de Tamanho

Para manter os tamanhos das textareas dentro de um intervalo específico, defina restrições em CSS, como min-height: 50px; e max-height: 200px;.

Para Entusiastas de Bibliotecas

Se o seu projeto se beneficiaria do uso de um script ou biblioteca adicional, como o Autosize.js de Jack Moore, optar por esse método seria justificado. Prefere usar o jQuery? Então considere utilizar o AutoSize.

Usando Autosize.js:

// Redimensione automaticamente todas as textareas sem complicações!
autosize(document.querySelectorAll('textarea'));

Usando jQuery AutoSize:

// Ajuste todas as textareas com um único comando!
$('textarea').autosize();

Visualização

Um exemplo de uma textarea que ajusta automaticamente sua altura pode ser visualizado como um copo que muda suas proporções com base na quantidade de líquido que contém.

| Quantidade de Texto | Altura Correspondente do Campo |
| -------------------- | ------------------------------ |
| Pequeno              | 🥃 (copo baixo)               |
| Médio                | 🍹 (copo médio)               |
| Grande               | 🍸 (copo alto)                |

Assim como um copo, a textarea se adapta para acomodar todo o conteúdo, evitando a barra de rolagem.

Solução de Problemas e Respostas

Scrollbars Intermitentes

Se você encontrar flickering na barra de rolagem durante o redimensionamento, certifique-se de definir a propriedade CSS overflow: hidden;. Isso ajudará a evitar a aparição inesperada de uma barra de rolagem.

Tamanho Inicial Incorreto

O problema pode ser causado por estilos CSS que interferem na função autoGrow. Preste atenção em propriedades como box-sizing e padding que podem afetar as dimensões.

Preocupações de Desempenho

Com o uso extensivo de textareas ou redimensionamentos frequentes, o desempenho pode diminuir. Otimizar o tratamento de eventos é crucial ao redimensionar a janela.

Recursos Úteis

  1. Entradas e Textareas que Crescem Automaticamente | CSS-Tricks — Uma visão detalhada do mecanismo para redimensionar automaticamente campos de texto usando CSS e JavaScript.
  2. Criando uma textarea com auto-redimensionamento - Stack Overflow — Discussões e várias soluções para o problema de redimensionamento automático de áreas de texto.
  3. GitHub - jackmoore/autosize — Um script simples para redimensionamento automático de textareas.
  4. Apenas um momento... - CodePen — Um exemplo interativo de redimensionamento automático de textarea.
  5. Autosize — Um plugin jQuery leve para redimensionamento instantâneo de textareas.

Video

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

Thank you for voting!