DesignJavascript

Como criar Rating Component

Rating Component
Rating Component

 

 

 

Introdução

Neste tutorial,  vou mostrar como criar um Rating Component utilizando apenas html, css e Javascritp. 

O Tutorial será breve e de forma rápida não será necessário o uso de nenhum tipo de biblioteca externa, será apenas html e css .

Com este componente você pode criar um sistema de votação de forma fácil e implementar uma funcionalidade onde o usuário pode clicar nas estrelas para avaliar e  processar o valor da avaliação 

 

 

Primeiro passo você deverá criar a estrutura da página, para isso crie um arquivo html contendo  o código que mostro abaixo:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> Rating Component</title>
</head>
<body>
</body>
</html>

 

Logo após crio um componente Rating :

 

<div class="rating">
        <div class="title">
            <span>★</span>
            <span class="label">Rating Component</span>
        </div>
        <div class="star-container">
            <span class="star" data-value="1">★</span>
            <span class="star" data-value="2">★</span>
            <span class="star" data-value="3">★</span>
            <span class="star" data-value="4">★</span>
            <span class="star" data-value="5">★</span>
        </div>
        <span id="ratingScore" class="score-label">Score: 0 star(s)</span>
    </div>

 

 

Uma breve explicação do código acima,  para definir as estrelas adicionei elas ao componente  <span> com a classe star e o atributo data-value para identificar o valor de cada estrela.

 

 

Depois adiciono o css responsável pela estilização da página :

    <style>
        body {
            width: 100vw;
            min-height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: #111111;
        }
        .rating {
            display: flex;
            flex-direction: column;
            justify-content: center;
            gap: 0.5rem;
            padding: 1rem 2rem;
            border-radius: 0.5rem;
            border: 1px solid #b6b7f6;
            background-color: #141920;
            color: #b6b7f6;
        }
        .star-container {
            display: flex;
            justify-content: center;
            gap: 0.8rem;
        }
        .title {
            display: flex;
            justify-content: center;
            align-items: baseline;
            gap: 0.5rem;
            align-self: flex-start;
            margin-bottom: 0.5rem;
        }
        .title span {
            font-size: 2.25rem;
            line-height: 2.25rem;
            color: #82be0f;
        }
        .title .label {
            font-weight: 900;
            font-size: 1.5rem;
            line-height: 1.5rem;
            text-align: end;
        }
        .star {
            padding: 1rem;
            font-size: 2rem;
            line-height: 2rem;
            cursor: pointer;
            color: #b6b7f6;
            transition: color 0.2s, background-color 0.2s;
            border: 1px solid #b6b7f6;
            border-radius: 0.5rem;
            box-sizing: border-box;
        }
        .star:hover,
        .star.hover {
            background-color: #82be0f;
            color: white;
            border-color: #82be0f;
        }
        .star.selected {
            background-color: #82be0f;
            color: white;
            border-color: #82be0f;
        }
        .score-label {
            text-align: center;
            margin-top: 10px;
            font-size: 20px;
        }
    </style>

 

No código acima, utilizei a tag <style> para adicionar o CSS diretamente no arquivo HTML.  Abaixo deixo uma breve explicação das principais partes do CSS:

  • body: Nesta tag adicionei as propriedades para centralizar o conteúdo na tela e definir o fundo e o alinhamento dos componentes.

 

Por ultimo adiciono o script responsável por adicionar a animação ao Rating Component:

 

const stars = document.querySelectorAll(".star");
let ratingValue = 0;
const ratingScore = document.getElementById("ratingScore");
function highlightStars(value) {
  stars.forEach((star) => {
    if (star.dataset.value <= value) {
      star.classList.add("selected");
    } else {
      star.classList.remove("selected");
    }
  });
}
stars.forEach((star) => {
  star.addEventListener("click", () => {
    ratingValue = star.dataset.value;
    highlightStars(ratingValue);
    ratingScore.textContent = `Score: ${ratingValue} star(s)`;
  });
  star.addEventListener("mouseover", () => {
    highlightStars(star.dataset.value);
  });
  star.addEventListener("mouseout", () => {
    highlightStars(ratingValue);
  });
});

 

No código acima, usei o JavaScript  para capturar o clique do usuário  e exibir as estrelas que o usuário selecionou e eventualmente armazenei o valor da seleção do usuário para uma variável, para depois exibir a informação na label.
  • : Defino as variáveis que vão armazenar as tags que contém as estrelas e a label onde vou inserir a informação do total da votação.
  • : Adiciono os eventos (click) , (mouseover) , (mouseout) para capturar os eventos  que usuário aciona ao interagir com as tags de votação .

 

Deixo aqui um vídeo curto do processo e de como ficou o Rating Component:

 

 

 

Conclusão

Com esses simples  passos, você consegue de forma rápida criar um Rating Component usando apenas HTML e CSS.  Caso necessite você pode personalizar a animação e a estilização conforme a sua necessidade.

 

Código fonte do tutorial  do Rating Component:

Código Fonte

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *