Contador de caracteres Componentes
Um contador embaixo do campo que mostra quanto já foi escrito — fica amarelo perto do limite e vermelho se passar. <textarea sw-textlimit sw-textlimit-max='160'>.
O que é
Sabe o campo de "Mensagem" ou "Descrição do produto" que só aceita um tanto de letras? O contador mostra, enquanto a pessoa digita, quantos caracteres ela já usou e quantos ainda cabem — "42/160" ou "Faltam 118 caracteres". Você só coloca sw-textlimit no campo e diz o limite em sw-textlimit-max.
Um JavaScript pequeno do núcleo cria um <span class="sw-textlimit-cnt"> logo depois do campo e atualiza o texto a cada tecla. Ele também coloca o maxlength no campo com o mesmo número, então o navegador não deixa digitar além do limite. A cor muda sozinha: normal → amarelo quando faltam 20% ou menos → vermelho se o texto já veio maior que o limite. Funciona em <textarea> e em <input>, no tema claro e no escuro.
Quando usar
- Mensagem de contato ou pedido de orçamento com tamanho máximo — a pessoa vê quanto ainda pode escrever.
- Título e descrição para Google/redes (título até 60, descrição até 160): o contador evita texto cortado.
- Bio de perfil, recado, depoimento — qualquer texto curto com limite.
- Painel admin: resumo de produto, chamada de banner, texto de SMS/WhatsApp.
Comece aqui
-
1
Coloque o SWCore na página (uma vez só, vale para todos os componentes): o CSS no
<head>e o JS no fim do<body>. O contador precisa dos dois.<link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css"> <!-- fim do <body> --> <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script> -
2
Coloque
sw-textlimitno campo e o limite emsw-textlimit-max. Digite no campo abaixo e olhe o contador.<div sw-fld> <label for="mensagem">Sua mensagem</label> <textarea sw-inp id="mensagem" sw-textlimit sw-textlimit-max="160"></textarea> </div> -
3
Quer outro texto no contador? Use
sw-textlimit-txtcom as palavras-chave{count},{max}e{remaining}.<div sw-fld> <label for="descricao">Descrição para o Google</label> <input sw-inp id="descricao" sw-textlimit sw-textlimit-max="160" sw-textlimit-txt="Faltam {remaining} caracteres"> </div>
Todas as variações
Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.
1. Texto do contador
O texto é um molde: você escreve a frase e coloca as palavras-chave entre chaves. {count} = quantos já foram digitados, {max} = o limite, {remaining} = quantos ainda cabem. Sem sw-textlimit-txt ele mostra {count}/{max}.
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="140" placeholder="Digite aqui…"></textarea>
</div>
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="140" sw-textlimit-txt="Faltam {remaining} caracteres" placeholder="Digite aqui…"></textarea>
</div>
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="140" sw-textlimit-txt="{count} de {max} usados" placeholder="Digite aqui…"></textarea>
</div>
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="140" sw-textlimit-txt="{remaining}" placeholder="Digite aqui…"></textarea>
</div>
2. Posição do contador
Por padrão o contador fica à direita, embaixo do campo. sw-textlimit-align aceita left, center e right. O atalho sw-textlimit-center (sem valor) centraliza o contador e também o texto digitado dentro do campo.
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="120" placeholder="Contador à direita"></textarea>
</div>
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="120" sw-textlimit-align="left" placeholder="Contador à esquerda"></textarea>
</div>
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="120" sw-textlimit-align="center" placeholder="Contador no meio"></textarea>
</div>
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="120" sw-textlimit-center placeholder="Tudo centralizado"></textarea>
</div>
3. Cores automáticas
Você não configura nada: a cor muda sozinha conforme o texto. Os quadros abaixo já nascem com texto dentro para mostrar cada cor.
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="200">Corte + barba com hora marcada. Atendimento até as 20h.</textarea>
</div>
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="60">Corte + barba com hora marcada. Atendimento até as 20h.</textarea>
</div>
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="70">Promoção de inauguração: 20% de desconto em todos os serviços da casa nesta semana!</textarea>
</div>
4. Tipos de campo
Funciona em caixa de texto grande (<textarea>) e em campo de uma linha (<input>). Se o campo já tiver maxlength, pode deixar sem sw-textlimit-max: ele usa o maxlength. Sem nenhum dos dois, o limite é 150.
<div sw-fld>
<textarea sw-inp="p" sw-textlimit sw-textlimit-max="300" placeholder="Depoimento do cliente"></textarea>
</div>
<div sw-fld><input sw-inp sw-textlimit sw-textlimit-max="60" placeholder="Título da página"></div>
<div sw-fld><input sw-inp maxlength="30" sw-textlimit placeholder="Nome de exibição"></div>
<div sw-fld><textarea sw-inp="p" sw-textlimit placeholder="Recado"></textarea></div>
5. Dentro de um campo com rótulo
Combine com o campo do SWCore (sw-fld) para ter rótulo em cima e contador embaixo, alinhado com o formulário.
<div sw-fld>
<label for="bio">Bio do perfil</label>
<textarea sw-inp id="bio" sw-textlimit sw-textlimit-max="150"
sw-textlimit-txt="{count}/{max} — cabe no Instagram"></textarea>
</div>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Ligar | ||
sw-textlimit | Liga o contador no campo. Não leva valor. | <textarea sw-textlimit> |
| Limite | ||
sw-textlimit-max | Quantos caracteres cabem. Também vira o maxlength do campo. Se faltar, usa o maxlength do campo; se faltar os dois, 150. | sw-textlimit-max="160" |
| Texto do contador | ||
sw-textlimit-txt | A frase do contador. Padrão: {count}/{max}. | sw-textlimit-txt="Faltam {remaining}" |
{count} | Vira o número de caracteres já digitados. | {count}/{max} |
{max} | Vira o limite. | {count} de {max} |
{remaining} | Vira quantos ainda cabem. | Faltam {remaining} |
| Posição | ||
(nenhum) | Contador à direita, embaixo do campo. | |
sw-textlimit-align | left, center ou right. | sw-textlimit-align="center" |
sw-textlimit-center | Atalho sem valor: centraliza o contador e o texto dentro do campo. | <textarea sw-textlimit sw-textlimit-center> |
| Cor (automática) | ||
is-ale | Classe que o JS coloca no contador quando faltam 20% ou menos: fica amarelo. | |
is-err | Classe que o JS coloca quando o texto passou do limite: fica vermelho. | |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
<form sw-frm action="/contato" method="post">
<div sw-fld>
<label for="nome">Seu nome</label>
<input sw-inp id="nome" name="nome">
</div>
<div sw-fld>
<label for="msg">Mensagem</label>
<textarea sw-inp id="msg" name="msg" sw-textlimit sw-textlimit-max="500"
sw-textlimit-txt="Faltam {remaining} caracteres"></textarea>
</div>
<button type="submit" sw-btn="pri">Enviar mensagem</button>
</form>
<div sw-fld>
<label for="seo-titulo">Título da página</label>
<input sw-inp id="seo-titulo" name="seo_titulo" sw-textlimit sw-textlimit-max="60">
</div>
<div sw-fld>
<label for="seo-desc">Descrição</label>
<textarea sw-inp="p" id="seo-desc" name="seo_desc" sw-textlimit sw-textlimit-max="160"></textarea>
</div>
<div sw-fld>
<label for="cartao">Mensagem do cartão</label>
<textarea sw-inp id="cartao" sw-textlimit sw-textlimit-max="90"
sw-textlimit-center sw-textlimit-txt="{count} de {max}"></textarea>
</div>
// O SWCore percebe sozinho HTML novo na página e liga o contador.
// Se você trocou o conteúdo de uma área inteira com innerHTML e o
// contador não apareceu, peça para ele olhar aquela área de novo:
area.innerHTML = '<textarea sw-textlimit sw-textlimit-max="200"></textarea>';
SW.reinit(area);
API (JavaScript)
SW.Textlimit.initAll(raiz)[sw-textlimit] dentro de raiz que ainda não tenha. Normalmente você não precisa chamar: o núcleo faz sozinho.SW.reinit(raiz)innerHTML.Precisa de quê
swcore.min.css— o visual do contador.swcore.min.js— cria e atualiza o contador.
Cuidados — erros comuns
- Esquecer o
swcore.min.js: sem o JS o campo funciona, mas o contador não aparece. - Escrever as palavras-chave com outra grafia (
{total},{restante}) — elas aparecem escritas do jeito que estão. As únicas que funcionam são{count},{max}e{remaining}. - Usar a mesma palavra-chave duas vezes na frase: só a primeira é trocada pelo número.
- Trocar o texto do campo por JavaScript (
campo.value = "…") não atualiza o contador sozinho. Depois de mudar, dispare o evento:campo.dispatchEvent(new Event("input")). - O
sw-textlimit-centercentraliza também o texto digitado. Se quiser só o contador no meio, usesw-textlimit-align="center".
O que ele não faz
- Ele conta caracteres, não palavras.
- O limite do navegador (
maxlength) só impede a digitação. Texto que já veio preenchido no HTML ou foi colocado por JavaScript pode passar do limite — o contador fica vermelho, mas não corta. Confira o tamanho também no servidor. - Mudar
sw-textlimit-maxdepois que a página abriu não tem efeito: o limite é lido uma vez, quando o contador é criado.

