Como criar uma calculadora de gorjetas simples com HTML, CSS e Vanilla JavaScript

Neste tutorial, abordaremos como criar uma calculadora de gorjetas simples com HTML, CSS e JavaScript.

A calculadora de gorjetas permitirá que você insira um valor, escolha uma porcentagem de gorjeta e escolha o número de pessoas que compartilham a conta. Em seguida, ele calculará a contribuição da gorjeta por pessoa.

Estrutura HTML

A estrutura contará com uma interface simples composta pelos seguintes elementos:

  • Um entrada elemento para inserir o valor
  • Quatro opções de dicas para escolher
  • Um entrada elemento para um valor numérico
  • A calcular botão para cálculo quando clicado
  • Um elemento para exibir o saída.
  • Todos esses elementos de entrada serão agrupados dentro de um forma
1
 class="container">
2
  

Tip Calculator

3
   action="">
4
     class="total-bill">
5
      

Total bill amount

6
       type="numbrt" placeholder="0.00" id="amount" value="" required />
7
    
8
     class="select-tip">
9
      

Choose Tip

10
       class="radio-group">
11
         type="radio" id="5" name="percentage" value="5" />
12
         for="5">
13
           5%
14
        
15
         type="radio" id="10" name="percentage" value="10" checked />
16
         for="10">
17
           10%
18
        
19
         type="radio" id="15" name="percentage" value="15" />
20
         for="15">
21
          15%
22
        
23
         type="radio" id="20" name="percentage" value="20" />
24
         for="20">
25
          20%
26
        
27
      
28
    
29
     class="people">
30
      

Number of People sharing

31
       type="number" placeholder="1" value="2" id="people" required />
32
    
33
     class="submit-form">
34
       class="calculate-btn">Calculate
35
       class="final-bill">
36
         id="tip">Tip Per Person: $0

37
    
38
  
39

Estilos CSS

O primeiro passo é definir nossos estilos globais.

1
@import url('https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap');
2

3
:root {
4
  --black: #2c2626;
5
  --darkgrey: #6a5959;
6
  --white: #ffffff;
7
  --green: #80ed99;
8
  --darkgreen: #24532f;
9
  --grey: #f0f0f0;
10
  --radius: 8px;
11
}

A seguir, adicione os seguintes estilos ao corpo da página.

1
body {
2
  background: var(--grey);
3
  color: var(--black);
4
  display: flex;
5
  justify-content: center;
6
  min-height: 100vh;
7
  font-family: "DM Mono", monospace;
8
  text-align: center;
9
}

Defina uma largura e algum preenchimento para o elemento contêiner envolvente e os elementos da seção.

1
.container {
2
  width: 400px;
3
  padding: 20px 0 50px 0;
4
}
5
section {
6
  margin: 20px 0 50px;
7
}
8

Vamos dar a ambas as entradas os mesmos estilos para garantir consistência.

1
input {
2
  width: 90%;
3
  height: 2em;
4
  font-size: 2em;
5
  box-sizing: border-box;
6
  text-align: end;
7
  outline: none;
8
  background: var(--white);
9
  padding: 5px;
10
  border-radius: var(--radius);
11
  border: 2px solid var(--darkgrey);
12
}

Em vez de usar um botão de opção padrão, vamos criar botões de opção personalizados para selecionar porcentagens de gorjeta. Queremos que nossos botões sejam quadrados e com raio de borda. Também queremos que o texto da dica percentual seja exibido no centro do botão quadrado.

Primeiro, vamos ocultar o design redondo padrão dos botões de opção:

1
.radio-group input[type="radio"] {
2
  display: none;
3
}

Vamos criar nossos botões de opção com estilo personalizado, que terão os seguintes estilos:

1
.radio-group {
2
  display: flex;
3
  justify-content: space-around;
4
  align-items: center;
5
  width: 100%;
6
}
7

8
.radio-group label::before {
9
  text-align: center;
10
  content: "";
11
  display: inline-block;
12
  width: 60px;
13
  height: 50px;
14
  border: 2px solid var(--darkgrey);
15
  border-radius: var(--radius);
16
  left: 10%;
17
  top: 50%;
18
  transform: translateY(-50%);
19
}

Usamos o Flexbox para garantir que os botões estejam alinhados horizontalmente e espaçados igualmente. Use o posicionamento absoluto para garantir que os rótulos estejam centralizados nos botões personalizados e adicione uma cor de fundo quando um botão for selecionado.

1
.radio-group label {
2
  display: inline-block;
3
  position: relative;
4
  cursor: pointer;
5
} 
6

7
.radio-group label span {
8
  position: absolute;
9
  left: 20px;
10
  top: -10px;
11
} 
12

13
.radio-group input[type="radio"]:checked + label::before {
14
  background-color: var(--green);
15
}

O botão calcular terá os seguintes estilos

1
.calculate-btn {
2
  background: var(--darkgreen);
3
  color: #fff;
4
  border: none;
5
  border-radius: var(--radius);
6
  padding: 15px 30px;
7
  font-size: 2em;
8
}

Adicione os seguintes estilos aos elementos embutidos para a limpeza final.

1
h1 {
2
  font-size: 3em;
3
  margin: 50px 0;
4
}
5

6
h2 {
7
  margin: 0 0 20px;
8
}
9

10
section {
11
  margin: 20px 0 50px;
12
}
13
.final-bill p {
14
  font-size: 1.5em;
15
}

Fazendo funcionar com JavaScript

Vamos adicionar a funcionalidade JavaScript para fazer com que nossa calculadora de gorjetas funcione conforme o esperado. Faremos o seguinte.

  1. Adicione um ouvinte de evento ao botão calcular.
  2. Quando o botão é clicado, ele invoca uma função chamada calculateTip()
  3. O calculateTip() A função obterá os valores de todos os elementos de entrada, realizará o cálculo e exibirá a gorjeta por pessoa na parte inferior da página.

O código final fica assim:

1
const calculateBtn = document.querySelector(".calculate-btn");
2

3
function CalculateTip(e) {
4
  event.preventDefault();
5
  const tipMessage = document.getElementById("tip");
6
  const amount = document.getElementById("amount").value;
7
  const tipPercentage = document.querySelector('[name="percentage"]:checked')
8
    .value;
9
  if (amount === "") {
10
    alert("Please enter the amount.");
11
    return;
12
  }
13

14
  const people = document.getElementById("people").value;
15
  const tip = (amount * (tipPercentage / 100)) / people;
16
  
17
  tipMessage.innerHTML = `The Tip per person is $${parseFloat(tip).toFixed(2)}`;
18
}
19

20
calculateBtn.addEventListener("click", CalculateTip);

Aqui está o resultado final!

Conclusão

Este tutorial abordou como criar uma calculadora de gorjetas totalmente funcional, que será útil na próxima vez que você sair com seus amigos!

Deixe uma resposta