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
Coloque o SWCore no
<head>da página (uma vez só). O segundo arquivo traz os íconesswi-*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
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
Quer mais? Acrescente um título (
sw-alert-ttl) e um × que fecha de verdade.AtençãoSua 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.
<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>
<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>
<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>
<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>
<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.
<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>
<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>
<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>
<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>
<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
| Palavra | O que faz | Exemplo |
|---|---|---|
| Cor (valor de sw-alert) | ||
(nenhuma) | Neutro: caixa com borda cinza, sem faixa colorida. | <div sw-alert> |
suc | Verde — sucesso, confirmação. | <div sw-alert="suc"> |
err | Vermelho — erro, algo deu errado. | <div sw-alert="err"> |
ale | Amarelo — atenção, algo a conferir. | <div sw-alert="ale"> |
inf | Azul — informação, dica, novidade. | <div sw-alert="inf"> |
| Peças (classes dentro da caixa) | ||
sw-alert-ico | O í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-body | Caixa do texto. Título e mensagem vão dentro dela. | <div class="sw-alert-body"> |
sw-alert-ttl | Título: pequeno, em maiúsculas, na cor do alerta. | <div class="sw-alert-ttl">Atenção</div> |
sw-alert-msg | A mensagem, em cinza. | <div class="sw-alert-msg">Texto…</div> |
sw-alert-cls | O × 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-bar | Barrinha 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-circle | Para suc. | <i class="sw-alert-ico swi-check-circle"></i> |
swi-x-circle | Para err. | <i class="sw-alert-ico swi-x-circle"></i> |
swi-error | Para ale. | <i class="sw-alert-ico swi-error"></i> |
swi-info-circle | Para 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.
<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>
<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>
<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>
<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 íconesswi-*do alerta.
Cuidados — erros comuns
- O × (
sw-alert-cls) sozinho não fecha nada. Coloqueonclick="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ó oswi-…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 íconesswi-*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.

