SWCore
SWCore / CSS / Alerta (inline)

Alerta (inline) CSS

Caixa de aviso que fica parada na página — sucesso, erro, atenção ou informação, com ícone, título e texto.

O que é

É o aviso que aparece dentro da página e fica lá: "Sua assinatura vence em 3 dias", "Não foi possível salvar, confira os campos", "Frete grátis acima de R$ 199". Você coloca sw-alert numa <div> e escolhe a cor pela palavra dentro do atributo: suc (verde), err (vermelho), ale (amarelo) ou inf (azul). Dentro vão as peças que você quiser: ícone, título, mensagem, um × para fechar e uma barrinha embaixo.

É só CSS — não precisa de JavaScript para aparecer. A cor escolhida pinta a faixa da esquerda, o ícone e o título. O × de fechar é só o desenho: para ele fechar de verdade, você coloca um clique nele (uma linha, mostrada abaixo). Não confunda com o aviso que flutua no canto e some sozinho — esse é o Toast (SW.Alert).

Quando usar

  • Erro vindo do servidor no topo de um formulário: "Não foi possível salvar" — sw-alert="err".
  • Situação que continua valendo: "Sua assinatura vence em 3 dias" — sw-alert="ale".
  • Confirmação que precisa ficar visível numa página de retorno: "Pedido recebido!" — sw-alert="suc".
  • Dica ou novidade no painel: "Agora dá para exportar em PDF" — sw-alert="inf".
  • Para confirmar uma ação rápida ("Salvo!") que não precisa ficar na tela, use o Toast, que some sozinho.

Comece aqui

  1. 1

    Coloque o SWCore no <head> da página (uma vez só). O segundo arquivo traz os ícones swi-* usados no alerta.

    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css">
    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.compl.min.css">
  2. 2

    Escreva a caixa com a cor, o ícone e a mensagem.

    Seus dados foram salvos.
    <div sw-alert="suc">
      <i class="sw-alert-ico swi-check-circle"></i>
      <div class="sw-alert-body">
        <div class="sw-alert-msg">Seus dados foram salvos.</div>
      </div>
    </div>
  3. 3

    Quer mais? Acrescente um título (sw-alert-ttl) e um × que fecha de verdade.

    Atenção
    Sua assinatura vence em 3 dias.
    <div sw-alert="ale">
      <i class="sw-alert-ico swi-error"></i>
      <div class="sw-alert-body">
        <div class="sw-alert-ttl">Atenção</div>
        <div class="sw-alert-msg">Sua assinatura vence em 3 dias.</div>
      </div>
      <button type="button" class="sw-alert-cls" aria-label="Fechar" onclick="this.closest('[sw-alert]').remove()">×</button>
    </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. Cores

Quatro cores com nome de função, mais o neutro (sem palavra). A cor pinta a faixa da esquerda, o ícone e o título; a mensagem fica em cinza para ler bem.

Pedido recebido
Você vai receber a confirmação por e-mail.
suc — sucesso (verde)
<div sw-alert="suc">
  <i class="sw-alert-ico swi-check-circle"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-ttl">Pedido recebido</div>
    <div class="sw-alert-msg">Você vai receber a confirmação por e-mail.</div>
  </div>
</div>
Não foi possível salvar
Confira o e-mail informado e tente de novo.
err — erro (vermelho)
<div sw-alert="err">
  <i class="sw-alert-ico swi-x-circle"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-ttl">Não foi possível salvar</div>
    <div class="sw-alert-msg">Confira o e-mail informado e tente de novo.</div>
  </div>
</div>
Atenção
Sua assinatura vence em 3 dias.
ale — atenção (amarelo)
<div sw-alert="ale">
  <i class="sw-alert-ico swi-error"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-ttl">Atenção</div>
    <div class="sw-alert-msg">Sua assinatura vence em 3 dias.</div>
  </div>
</div>
Novidade
Agora os relatórios podem ser baixados em PDF.
inf — informação (azul)
<div sw-alert="inf">
  <i class="sw-alert-ico swi-info-circle"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-ttl">Novidade</div>
    <div class="sw-alert-msg">Agora os relatórios podem ser baixados em PDF.</div>
  </div>
</div>
Lembrete
A loja fecha mais cedo na sexta-feira.
Neutro — sem palavra (sem faixa colorida)
<div sw-alert>
  <i class="sw-alert-ico swi-bell"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-ttl">Lembrete</div>
    <div class="sw-alert-msg">A loja fecha mais cedo na sexta-feira.</div>
  </div>
</div>

2. Peças

Todas as peças são opcionais — use só o que o aviso pede. Um aviso curto fica melhor sem título.

O relatório deste mês já está disponível.
Só a mensagem
<div sw-alert="inf">
  <div class="sw-alert-body">
    <div class="sw-alert-msg">O relatório deste mês já está disponível.</div>
  </div>
</div>
O relatório deste mês já está disponível.
Ícone + mensagem
<div sw-alert="inf">
  <i class="sw-alert-ico swi-info-circle"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-msg">O relatório deste mês já está disponível.</div>
  </div>
</div>
Relatório pronto
O relatório deste mês já está disponível.
Ícone + título + mensagem
<div sw-alert="inf">
  <i class="sw-alert-ico swi-info-circle"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-ttl">Relatório pronto</div>
    <div class="sw-alert-msg">O relatório deste mês já está disponível.</div>
  </div>
</div>
Relatório pronto
Clique no × e este aviso some.
+ sw-alert-cls — × de fechar (clique nele)
<div sw-alert="inf">
  <i class="sw-alert-ico swi-info-circle"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-ttl">Relatório pronto</div>
    <div class="sw-alert-msg">Clique no × e este aviso some.</div>
  </div>
  <button type="button" class="sw-alert-cls" aria-label="Fechar" onclick="this.closest('[sw-alert]').remove()">×</button>
</div>
Relatório pronto
A barrinha embaixo esvazia em 6 segundos.
+ sw-alert-bar — barrinha que esvazia uma vez (6 s)
<div sw-alert="inf">
  <i class="sw-alert-ico swi-info-circle"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-ttl">Relatório pronto</div>
    <div class="sw-alert-msg">A barrinha embaixo esvazia em 6 segundos.</div>
  </div>
  <div class="sw-alert-bar"></div>
</div>

Tabela de opções

PalavraO que fazExemplo
Cor (valor de sw-alert)
(nenhuma)Neutro: caixa com borda cinza, sem faixa colorida.<div sw-alert>
sucVerde — sucesso, confirmação.<div sw-alert="suc">
errVermelho — erro, algo deu errado.<div sw-alert="err">
aleAmarelo — atenção, algo a conferir.<div sw-alert="ale">
infAzul — informação, dica, novidade.<div sw-alert="inf">
Peças (classes dentro da caixa)
sw-alert-icoO ícone, na tag <i> junto do nome do ícone. Grande (30 px), na cor do alerta.<i class="sw-alert-ico swi-check-circle"></i>
sw-alert-bodyCaixa do texto. Título e mensagem vão dentro dela.<div class="sw-alert-body">
sw-alert-ttlTítulo: pequeno, em maiúsculas, na cor do alerta.<div class="sw-alert-ttl">Atenção</div>
sw-alert-msgA mensagem, em cinza.<div class="sw-alert-msg">Texto…</div>
sw-alert-clsO × no canto direito. Faça com <button type="button">: recebe foco no Tab e fecha com Enter. Só o desenho: o clique para fechar é você que coloca.<button type="button" class="sw-alert-cls" aria-label="Fechar" onclick="this.closest('[sw-alert]').remove()">×</button>
sw-alert-barBarrinha na cor do alerta, embaixo, que esvazia uma vez em 6 segundos (enfeite; não fecha o alerta).<div class="sw-alert-bar"></div>
Ícones que combinam com cada cor
swi-check-circlePara suc.<i class="sw-alert-ico swi-check-circle"></i>
swi-x-circlePara err.<i class="sw-alert-ico swi-x-circle"></i>
swi-errorPara ale.<i class="sw-alert-ico swi-error"></i>
swi-info-circlePara inf.<i class="sw-alert-ico swi-info-circle"></i>

Receitas prontas — usos reais

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

Erro do servidor no topo do formulário Ao vivo
Não foi possível entrar
E-mail ou senha incorretos.
<form action="/entrar" method="post">
  <!-- aparece só quando o servidor devolve erro -->
  <div sw-alert="err">
    <i class="sw-alert-ico swi-x-circle"></i>
    <div class="sw-alert-body">
      <div class="sw-alert-ttl">Não foi possível entrar</div>
      <div class="sw-alert-msg">E-mail ou senha incorretos.</div>
    </div>
  </div>

  <div sw-fld>
    <label for="email">E-mail</label>
    <input sw-inp id="email" name="email" type="email">
  </div>
  <div sw-frm-act><button sw-btn="pri" type="submit">Entrar</button></div>
</form>
Aviso de assinatura com botão de ação Ao vivo
Assinatura vencendo
Seu plano vence em 3 dias. Renovar agora
<div sw-alert="ale">
  <i class="sw-alert-ico swi-time"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-ttl">Assinatura vencendo</div>
    <div class="sw-alert-msg">Seu plano vence em 3 dias. <a href="/renovar">Renovar agora</a></div>
  </div>
  <button type="button" class="sw-alert-cls" aria-label="Fechar" onclick="this.closest('[sw-alert]').remove()">×</button>
</div>
Faixa de novidade na loja (frete grátis) Ao vivo
Frete grátis para compras acima de R$ 199 em todo o Nordeste.
<div sw-alert="suc">
  <i class="sw-alert-ico swi-package"></i>
  <div class="sw-alert-body">
    <div class="sw-alert-msg"><strong>Frete grátis</strong> para compras acima de R$ 199 em todo o Nordeste.</div>
  </div>
</div>
Mostrar o alerta pelo JavaScript (depois de um envio por AJAX) Ao vivo
<button sw-btn="pri" id="enviar">Enviar mensagem</button>
<div id="aviso"></div>

<script>
  document.getElementById('enviar').addEventListener('click', async () => {
    await fetch('/contato', { method: 'POST' });
    const alerta = document.createElement('div');
    alerta.setAttribute('sw-alert', 'suc');
    alerta.innerHTML = `
      <i class="sw-alert-ico swi-check-circle"></i>
      <div class="sw-alert-body">
        <div class="sw-alert-msg">Mensagem enviada. Respondemos em até 1 dia útil.</div>
      </div>`;
    document.getElementById('aviso').replaceChildren(alerta);
  });
</script>

Precisa de quê

  • swcore.min.css — o alerta.
  • swcore.compl.min.css — os ícones swi-* do alerta.

Cuidados — erros comuns

  • O × (sw-alert-cls) sozinho não fecha nada. Coloque onclick="this.closest('[sw-alert]').remove()" nele.
  • Faça o × com <button type="button">, não com <span>: o botão recebe foco pelo Tab e fecha com Enter (o <span> antigo tem o mesmo visual, mas não funciona no teclado).
  • O ícone precisa das duas classes na mesma tag: class="sw-alert-ico swi-…". Só o swi-… fica pequeno e sem cor.
  • Título e mensagem ficam dentro de <div class="sw-alert-body">. Soltos na caixa, eles ficam lado a lado com o ícone e desalinhados.
  • Sem o arquivo swcore.compl.min.css, os ícones swi-* não aparecem.
  • Não use alerta para tudo: se a página tem três alertas vermelhos, ninguém lê nenhum. Um por assunto, perto do que ele explica.

O que ele não faz

  • Não some sozinho nem empilha mensagens no canto — para isso existe o Toast (SW.Alert).
  • A barrinha (sw-alert-bar) é só enfeite: esvazia uma vez e não fecha o alerta.