SWCore
SWCore / Componentes / Tooltip

Tooltip Componentes

Balãozinho com uma explicação curta que aparece ao passar o mouse (ou focar com o teclado) em um botão, ícone ou palavra. <button sw-tooltip='Copiar link'>.

O que é

Sabe quando você passa o mouse num ícone e aparece um balão dizendo o que ele faz? É o tooltip. Você escreve o texto dentro do atributo sw-tooltip de qualquer elemento — botão, ícone, link, palavra — e pronto. Com outros atributos você escolhe o lado em que o balão abre, a cor, a demora para aparecer, se ele segue o mouse e se aceita negrito e quebra de linha.

O JavaScript do núcleo usa um único balão para a página toda e o posiciona perto do elemento quando o mouse entra (ou quando o elemento recebe foco pelo Tab). Se não couber do lado pedido (perto da borda da tela), ele abre do lado oposto sozinho. Sem cor escolhida, o balão acompanha o tema: escuro no tema claro, claro no tema escuro. Ele lê o texto na hora de aparecer, então se você trocar o valor de sw-tooltip por JavaScript, o balão já mostra o novo.

Quando usar

  • Botões só com ícone (editar, excluir, copiar): o balão diz o que o ícone faz.
  • Explicar um termo num formulário ou tabela: "CNPJ", "Frete grátis acima de R$ 199".
  • Mostrar o valor completo de algo cortado com reticências.
  • Não use para informação essencial: no celular não existe "passar o mouse". Coloque o que é importante no texto da página.

Comece aqui

  1. 1

    Coloque o SWCore na página: CSS no <head> e JS no fim do <body>. O tooltip 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. 2

    Coloque o texto em sw-tooltip. Passe o mouse no botão.

    <button type="button" sw-btn="out" sw-tooltip="Enviamos para todo o Brasil">Frete</button>

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. Lado em que abre

sw-tooltip-pos escolhe o lado. Padrão: em cima. Aceita a forma curta (top, bot, lft, rgt), a curtíssima (t, b, l, r) ou em inglês (bottom, left, right). auto escolhe o primeiro lado com espaço.

Padrão — em cima (top) <button type="button" sw-btn="out" sw-tooltip="Abre em cima">Em cima</button>
bot — embaixo <button type="button" sw-btn="out" sw-tooltip="Abre embaixo" sw-tooltip-pos="bot">Embaixo</button>
lft — à esquerda <button type="button" sw-btn="out" sw-tooltip="Abre à esquerda" sw-tooltip-pos="lft">Esquerda</button>
rgt — à direita <button type="button" sw-btn="out" sw-tooltip="Abre à direita" sw-tooltip-pos="rgt">Direita</button>
auto — onde couber <button type="button" sw-btn="out" sw-tooltip="Escolhi o lado sozinho" sw-tooltip-pos="auto">Automático</button>

2. Cores

Sem cor, o balão acompanha o tema da página. sw-tooltip-clr aceita as cores do SWCore (pri sec suc ale err inf) ou qualquer cor sua (#7c3aed, rgb(…), var(--minha-cor)) — a cor sua vem com texto branco.

Padrão — acompanha o tema <button type="button" sw-btn sw-tooltip="Cor do tema">Padrão</button>
pri — primária <button type="button" sw-btn sw-tooltip="Cor primária" sw-tooltip-clr="pri">pri</button>
sec — secundária <button type="button" sw-btn sw-tooltip="Cor secundária" sw-tooltip-clr="sec">sec</button>
suc — verde <button type="button" sw-btn sw-tooltip="Pagamento aprovado" sw-tooltip-clr="suc">suc</button>
ale — amarelo <button type="button" sw-btn sw-tooltip="Estoque baixo" sw-tooltip-clr="ale">ale</button>
err — vermelho <button type="button" sw-btn sw-tooltip="Não dá para desfazer" sw-tooltip-clr="err">err</button>
inf — azul <button type="button" sw-btn sw-tooltip="Atualizado há 5 min" sw-tooltip-clr="inf">inf</button>
Cor sua — "#7c3aed" <button type="button" sw-btn sw-tooltip="Roxo da marca" sw-tooltip-clr="#7c3aed">#7c3aed</button>

3. Sempre claro ou sempre escuro

sw-tooltip-thm fixa o balão claro ou escuro, não importa o tema da página. Claro: dia (ou claro, light, lgt). Escuro: noite (ou escuro, dark, drk).

sw-tooltip-thm="dia" — sempre claro <button type="button" sw-btn sw-tooltip="Sempre claro" sw-tooltip-thm="dia">Claro</button>
sw-tooltip-thm="noite" — sempre escuro <button type="button" sw-btn sw-tooltip="Sempre escuro" sw-tooltip-thm="noite">Escuro</button>

4. Comportamento

sw-tooltip-delay é a espera antes de aparecer, em milissegundos (padrão 250). sw-tooltip-follow="true" faz o balão andar junto com o mouse. sw-tooltip-html="true" aceita HTML no texto (negrito, quebra de linha).

Rápido — sw-tooltip-delay="0" <button type="button" sw-btn sw-tooltip="Apareci na hora" sw-tooltip-delay="0">Na hora</button>
Demorado — sw-tooltip-delay="900" <button type="button" sw-btn sw-tooltip="Esperei quase 1 segundo" sw-tooltip-delay="900">Com calma</button>
Segue o mouse — sw-tooltip-follow="true" <button type="button" sw-btn="p" sw-tooltip="Estou te seguindo" sw-tooltip-follow="true">Mexa o mouse aqui dentro</button>
Com HTML — sw-tooltip-html="true" <button type="button" sw-btn sw-tooltip="<b> Plano Pro </b> <br> R$ 49/mês" sw-tooltip-html="true">Plano Pro </button>

5. Em qualquer elemento

Não precisa ser botão: ícone, link, palavra no meio do texto, imagem. Se o elemento não recebe foco sozinho (ícone, <span>), acrescente tabindex="0" para quem navega pelo teclado.

Botão só com ícone <button type="button" sw-btn="ghost rnd" sw-tooltip="Copiar link" aria-label="Copiar link"> <i class="swi-copy"></i> </button>
CNPJ
Ícone de ajuda num campo <span>CNPJ <i class="swi-info-circle" tabindex="0" sw-tooltip="Só números, 14 dígitos"></i></span>

Envio expresso para BH.

Palavra no meio do texto <p>Envio <abbr sw-tooltip="Pedidos até 14h saem no mesmo dia" tabindex="0">expresso</abbr> para BH.</p>
Link <a href="#" sw-tooltip="Abre o WhatsApp" sw-tooltip-pos="bot">(31) 99999-0000</a>

Tabela de opções

PalavraO que fazExemplo
Texto
sw-tooltipO texto do balão. É ele que liga o componente.sw-tooltip="Copiar link"
sw-tooltip-htmltrue: o texto é lido como HTML (<b>, <br>…).sw-tooltip-html="true"
Lado — sw-tooltip-pos
top / tEm cima. Padrão.sw-tooltip-pos="top"
bot / b / bottomEmbaixo.sw-tooltip-pos="bot"
lft / l / leftÀ esquerda.sw-tooltip-pos="lft"
rgt / r / rightÀ direita.sw-tooltip-pos="rgt"
autoO primeiro lado com espaço (em cima, embaixo, direita, esquerda).sw-tooltip-pos="auto"
Cor — sw-tooltip-clr
(nenhuma)Acompanha o tema (escuro no dia, claro à noite).
pri sec suc ale err infCores do SWCore.sw-tooltip-clr="suc"
qualquer corHex, rgb ou variável CSS; texto branco.sw-tooltip-clr="#7c3aed"
Tema fixo — sw-tooltip-thm
dia / claro / light / lgtSempre claro.sw-tooltip-thm="dia"
noite / escuro / dark / drkSempre escuro.sw-tooltip-thm="noite"
Comportamento
sw-tooltip-delayEspera antes de aparecer, em ms. Padrão 250. 0 = aparece na hora.sw-tooltip-delay="600"
sw-tooltip-followtrue: o balão segue o mouse.sw-tooltip-follow="true"

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Barra de ações de uma tabela (painel admin) Ao vivo
<button type="button" sw-btn="ghost rnd" sw-tooltip="Editar pedido" aria-label="Editar pedido"><i class="swi-edit"></i></button>
<button type="button" sw-btn="ghost rnd" sw-tooltip="Enviar por WhatsApp" aria-label="Enviar por WhatsApp"><i class="swil-whatsapp"></i></button>
<button type="button" sw-btn="ghost err rnd" sw-tooltip="Cancelar pedido" sw-tooltip-clr="err" aria-label="Cancelar pedido"><i class="swi-trash"></i></button>
Ajuda ao lado do campo do formulário Ao vivo
<div sw-fld>
  <label for="pix">
    Chave Pix
    <i class="swi-info-circle" tabindex="0" sw-tooltip="Pode ser CPF, e-mail, telefone ou chave aleatória" sw-tooltip-pos="rgt"></i>
  </label>
  <input sw-inp id="pix" name="pix">
</div>
Texto que muda: botão "copiar" que vira "copiado!" Ao vivo
<button type="button" sw-btn="out" id="cupom" sw-tooltip="Copiar cupom" sw-tooltip-delay="1">VOLTA10</button>

<script>
  const cupom = document.getElementById('cupom');
  cupom.addEventListener('click', () => {
    navigator.clipboard.writeText('VOLTA10');
    cupom.setAttribute('sw-tooltip', 'Copiado!');       // o balão lê o texto novo
    setTimeout(() => cupom.setAttribute('sw-tooltip', 'Copiar cupom'), 1500);
  });
</script>
Criar por JavaScript (elemento que nasceu depois) Referência
const icone = document.querySelector('#status');
SW.Tooltip.create(icone, { text: 'Loja aberta', pos: 'bot', color: 'suc', delay: 100 });

API (JavaScript)

SW.Tooltip.create(el, { text, pos, color, html, delay })
Coloca um tooltip num elemento pelo código (escreve os atributos e liga). Se o elemento já tinha tooltip, ele é refeito com as opções novas (sem duplicar).
SW.Tooltip.update(el, texto)
Troca o texto. Na prática, basta mudar o atributo: el.setAttribute("sw-tooltip", "novo") — o balão lê o texto na hora de aparecer.
SW.Tooltip.destroy(el)
Desliga o tooltip de verdade: tira o atributo sw-tooltip, fecha o balão se estiver aberto e para de reagir ao mouse/foco. Para ligar de novo, use SW.Tooltip.create.
SW.Tooltip.initAll(raiz)
Liga os [sw-tooltip] dentro de raiz. O núcleo já faz sozinho.

Precisa de quê

  • swcore.min.css + swcore.min.js.
  • swcore.compl.min.css — só se usar ícones swi-*.

Cuidados — erros comuns

  • Usar title="…" junto com sw-tooltip: aparecem dois balões (o do navegador e o do SWCore). Use só sw-tooltip.
  • Botão só com ícone: o tooltip ajuda quem vê, mas quem usa leitor de tela precisa de aria-label também.
  • Com sw-tooltip-html="true", nunca coloque texto digitado por visitantes (nome, comentário): o HTML é mostrado como está. Use HTML só em texto seu.
  • Tooltip em <button disabled> não aparece (botão desativado não recebe o mouse). Envolva o botão num <span sw-tooltip>.
  • Texto comprido: o balão tem no máximo 240 px de largura e quebra linha. Para textos longos, use um Popover.

O que ele não faz

  • Só aparece com mouse ou foco de teclado — em toque de celular não é garantido.
  • Um balão por vez na página (o último que recebeu o mouse).
  • Não tem clique para fixar aberto, nem botão de fechar.