SWCore
SWCore / Componentes / Rating (estrelas)

Rating (estrelas) Componentes

Estrelas de avaliação: mostrar a nota de um produto (aceita meia estrela) ou deixar a pessoa clicar para dar a nota dela — inclusive dentro de formulário.

O que é

É o "★★★★☆ (127 avaliações)" da loja e o "Como foi seu atendimento?" do formulário. Tem dois modos, escolhidos pelo valor de sw-rating: com um número (sw-rating="4.5") ele só mostra a nota; sem número (sw-rating="int" ou vazio) ele vira campo, e a pessoa clica numa estrela para avaliar. Tamanho e cor são palavras no mesmo atributo.

Precisa do JavaScript do SWCore, que desenha as estrelas dentro da <div> (você não escreve as estrelas). No modo campo, passar o mouse acende as estrelas até ali, clicar grava a nota, clicar de novo na mesma estrela zera, e funciona pelo teclado (Tab até a estrela, Enter ou Espaço). Se houver um <input type="hidden"> dentro, a nota vai para ele — é assim que ela chega ao servidor junto com o formulário.

Quando usar

  • Nota média de produto, serviço ou lugar: só leitura — sw-rating="4.5" + a contagem ao lado.
  • Pedir avaliação (atendimento, pedido, curso): modo campo dentro do formulário — sw-rating="int" com <input type="hidden">.
  • Escala diferente de 5 (de 0 a 10): sw-rating-max="10".

Comece aqui

  1. 1

    Coloque o SWCore na página.

    <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

    Para mostrar uma nota: o número no atributo. A contagem ao lado é um <span sw-rating-cnt> fora da div.

    (127 avaliações)
    <div sw-rating="4.5" aria-label="Nota 4,5 de 5"></div>
    <span sw-rating-cnt>(127 avaliações)</span>
  3. 3

    Para a pessoa dar a nota: int, com um campo escondido dentro para enviar no formulário.

    <div sw-rating="int">
      <input type="hidden" name="nota" value="0">
    </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. Só mostrar a nota

Com um número, as estrelas não respondem ao clique. A nota pode ser quebrada: de ,5 para cima aparece meia estrela (4,5 e 4,7 mostram 4 e meia; 4,3 mostra 4).

sw-rating="5" <div sw-rating="5"></div>
sw-rating="4.5" — meia estrela <div sw-rating="4.5"></div>
sw-rating="3" <div sw-rating="3"></div>
sw-rating="0.5" <div sw-rating="0.5"></div>
(1.204)
Com a contagem ao lado (sw-rating-cnt) <div sw-rating="4.8"></div> <span sw-rating-cnt>(1.204)</span>

2. A pessoa dá a nota

Sem número no atributo, vira campo. Passe o mouse, clique para dar a nota, clique de novo na mesma estrela para zerar. sw-rating-val diz a nota que já vem marcada.

sw-rating="int" — começa vazio <div sw-rating="int"></div>
sw-rating="" — vazio também vira campo <div sw-rating=""></div>
sw-rating-val="3" — já vem com 3 <div sw-rating="int" sw-rating-val="3"></div>
Com campo escondido (vai no formulário) <div sw-rating="int" sw-rating-val="4"> <input type="hidden" name="nota" value="4"> </div>

3. Tamanhos

Sem palavra, as estrelas têm 2,2rem. Vale para os dois modos.

sm — pequenas <div sw-rating="4 sm"></div>
Padrão <div sw-rating="4"></div>
lg — grandes <div sw-rating="4 lg"></div>
int lg — campo grande (bom no celular) <div sw-rating="int lg"></div>

4. Cores

Sem cor, as estrelas acesas são amarelas (a cor de alerta do tema). As apagadas usam a cor de borda, e acompanham o tema claro/escuro.

Padrão — amarelo <div sw-rating="4"></div>
pri — cor primária do site <div sw-rating="4 pri"></div>
suc — verde <div sw-rating="4 suc"></div>
err — vermelho <div sw-rating="4 err"></div>

5. Outra quantidade de estrelas

sw-rating-max muda o total (padrão 5). Serve para escalas de 0 a 10, ou 3 níveis.

sw-rating-max="10" — só leitura <div sw-rating="7 sm" sw-rating-max="10"></div>
sw-rating-max="10" — campo <div sw-rating="int sm" sw-rating-max="10" sw-rating-val="8"></div>
sw-rating-max="3" <div sw-rating="int lg" sw-rating-max="3"></div>

Tabela de opções

PalavraO que fazExemplo
Modo (o valor de sw-rating)
númeroSó mostra a nota. Aceita quebrado: 4.5 (com ponto).sw-rating="4.5"
intCampo: a pessoa clica para avaliar.sw-rating="int"
(vazio)Também é campo.sw-rating=""
Tamanho (junto no mesmo atributo)
(nenhum)Estrelas de 2,2rem.
smPequenas, 1,6rem.sw-rating="4 sm"
lgGrandes, 3rem.sw-rating="int lg"
Cor das estrelas acesas
(nenhuma)Amarelo (cor de alerta do tema).
priCor primária do site.sw-rating="4 pri"
sucVerde.sw-rating="int suc"
errVermelho.sw-rating="4 err"
Outros atributos
sw-rating-maxQuantas estrelas ao todo. Padrão: 5.sw-rating-max="10"
sw-rating-valNo modo campo: a nota que já vem marcada. Padrão: 0.sw-rating-val="3"
<input type="hidden">Dentro da div, no modo campo: recebe a nota escolhida para ir no formulário.<input type="hidden" name="nota" value="0">
sw-rating-cntNum <span> ao lado (fora da div): texto de contagem, em cinza e menor.<span sw-rating-cnt>(127)</span>
Criados pelo script (não escreva)
sw-rating-strCada estrela. No modo campo, são botões focáveis com "Nota N".
.is-on / .is-halfEstrela acesa / meia estrela.

Receitas prontas — usos reais

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

Cartão de produto na loja Ao vivo
Café especial 500g
(127 avaliações)
R$ 39,90
<div class="bg-sur bd r-m p-3 flx f-cl gap-2">
  <strong>Café especial 500g</strong>
  <div class="flx alc"><div sw-rating="4.5 sm" aria-label="Nota 4,5 de 5"></div><span sw-rating-cnt>(127 avaliações)</span></div>
  <span class="t-g">R$ 39,90</span>
  <button sw-btn="suc"><i class="swi-cart-add"></i> Comprar</button>
</div>
Formulário "Como foi seu atendimento?" Ao vivo
Como foi seu atendimento?
<form action="/avaliar" method="post">
  <label>Como foi seu atendimento?</label>
  <div sw-rating="int lg suc">
    <input type="hidden" name="nota" value="0">
  </div>
  <button sw-btn="pri" type="submit">Enviar avaliação</button>
</form>
<!-- o servidor recebe "nota" = 0 a 5 -->
Reagir na hora em que a pessoa escolhe Ao vivo

Escolha uma nota.

<div sw-rating="int lg" id="nota-pedido"></div>
<p id="resposta"></p>

<script>
  document.getElementById('nota-pedido').addEventListener('sw:rating:change', (e) => {
    const n = e.detail.value;             // 0 a 5 (0 = a pessoa zerou)
    document.getElementById('resposta').textContent =
      n <= 2 ? 'Poxa! Conte o que deu errado.' : 'Obrigado pela nota ' + n + '!';
  });
</script>

Eventos

sw:rating:change
No modo campo, quando a pessoa escolhe ou zera a nota. Traz e.detail.value (0 = zerou). Chega uma vez por clique.

API (JavaScript)

SW.Rating.initAll(raiz)
Desenha as estrelas das divs [sw-rating] dentro de raiz. Normalmente não precisa: o SWCore liga sozinho, até as inseridas depois.

Precisa de quê

  • swcore.min.css e swcore.min.js (sem o JS, a div fica vazia).

Cuidados — erros comuns

  • Nota com vírgula (sw-rating="4,5"): ele lê só o 4. Use ponto: "4.5".
  • Esquecer o <input type="hidden"> dentro da div no formulário: a nota não vai para o servidor.
  • Escrever as estrelas dentro da div: o script apaga tudo e desenha de novo (só o input escondido é mantido).
  • Colocar o <span sw-rating-cnt> dentro da div: ele é apagado. Deixe ao lado, fora.
  • Estrelas só de leitura não são lidas pelo leitor de tela. Coloque aria-label="Nota 4,5 de 5" na div.

O que ele não faz

  • No modo campo não aceita meia estrela: a pessoa escolhe notas inteiras.
  • Não há função para ler ou mudar a nota por código: leia pelo input escondido ou pelo evento.
  • Trocar o atributo depois que a página carregou não redesenha as estrelas.