Projeto Calculadora - Parte 2: Estrutura HTML e Definição da Interface

Série “Projeto Calculadora” — 4 partes, do planejamento ao código funcionando: 1. Requisitos e funcionalidades · 2. Estrutura HTML (você está aqui) · 3. Estilização com CSS · 4. Lógica com JavaScript
Introdução
Na primeira parte desta série definimos os requisitos da calculadora. Agora vamos transformá-los em marcação HTML: o display para exibir números e resultados, e os botões para os dígitos e operadores. Cada elemento será explicado detalhadamente, incluindo decisões de acessibilidade que passam despercebidas na maioria dos tutoriais de calculadora.
Estrutura HTML da Calculadora
Vamos criar a estrutura HTML da nossa calculadora. Aqui está o código completo:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Minha calculadora</title>
<link rel="stylesheet" href="/calculadora/style.css">
</head>
<body>
<div>
<form id="calculator" class="calculator">
<div class="display" id="display" role="status" aria-live="polite">0</div>
<div class="buttons">
<button type="button" onclick="appendNumber('1')">1</button>
<button type="button" onclick="appendNumber('2')">2</button>
<button type="button" onclick="appendNumber('3')">3</button>
<button type="button" class="operator" onclick="appendOperator('+')">+</button>
<button type="button" onclick="appendNumber('4')">4</button>
<button type="button" onclick="appendNumber('5')">5</button>
<button type="button" onclick="appendNumber('6')">6</button>
<button type="button" class="operator" onclick="appendOperator('-')">-</button>
<button type="button" onclick="appendNumber('7')">7</button>
<button type="button" onclick="appendNumber('8')">8</button>
<button type="button" onclick="appendNumber('9')">9</button>
<button type="button" class="operator" onclick="appendOperator('*')">*</button>
<button type="button" onclick="appendNumber('0')">0</button>
<button type="button" onclick="clearDisplay()">C</button>
<button type="button" class="equal" aria-label="Calcular resultado" onclick="calculateResult()">=</button>
<button type="button" class="operator" onclick="appendOperator('/')">/</button>
</div>
</form>
</div>
<script src="/calculadora/script.js"></script>
</body>
</html>
Já incluímos aqui as classes operator e equal e o display acessível (role="status" + aria-live) que vamos detalhar a seguir — assim o código desta parte já bate exatamente com o que a parte 3 estiliza e a parte 4 manipula via JavaScript.
Explicação dos Campos e Elementos
1. Doctype e Elementos de Cabeçalho (<head>)
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Minha calculadora</title>
<link rel="stylesheet" href="/calculadora/style.css">
</head>
<!DOCTYPE html>: Define o tipo de documento como HTML5.<html lang="pt-br">: Inicia o documento HTML e define o idioma da página como português do Brasil — importante para leitores de tela pronunciarem o conteúdo corretamente.<meta charset="UTF-8">: Especifica a codificação de caracteres como UTF-8, garantindo que todos os caracteres sejam exibidos corretamente.<meta name="viewport" content="width=device-width, initial-scale=1.0">: Configura a viewport para tornar o layout responsivo em dispositivos móveis.<title>Minha calculadora</title>: Define o título da página, que aparecerá na aba do navegador.<link rel="stylesheet" href="/calculadora/style.css">: Vincula o arquivo de estilo CSS externo que vamos escrever na parte 3.
2. Corpo do Documento (<body>)
<body>
<div>
<form id="calculator" class="calculator">
<div class="display" id="display" role="status" aria-live="polite">0</div>
<div class="buttons">
<body>: Inicia o corpo do documento HTML onde todo o conteúdo visível da página estará presente.<div>: Cria uma divisão (div) para agrupar os elementos da calculadora.<form id="calculator" class="calculator">: Define um formulário com IDcalculatore classecalculatorque contém todos os elementos da calculadora. Usar formulário permite futuras melhorias, como envio de dados; como não há nenhum campo que exige submissão de fato, também seria válido usar uma simples<section>— a escolha aqui é uma questão de gosto.
3. Campo de Exibição
Um erro comum em tutoriais de calculadora é usar <input type="text" disabled> para o display. Isso funciona visualmente, mas o atributo disabled remove o elemento da árvore de acessibilidade — leitores de tela como NVDA e VoiceOver simplesmente o ignoram, então quem depende de leitor de tela não fica sabendo qual é o resultado atual.
Por isso, usamos uma <div> semântica no lugar do <input>:
<div class="display" id="display" role="status" aria-live="polite">0</div>
role="status"earia-live="polite": anunciam automaticamente para leitores de tela sempre que o conteúdo da div muda — exatamente o que precisamos quando um número é digitado ou um resultado é calculado.- Como o display só exibe texto e nunca recebe digitação direta do teclado, uma
<div>é mais simples que um<input>e já resolve o problema sem atributos extras de formulário. Ajustaremos a função JavaScript correspondente na parte 4, usandotextContentem vez de.value.
4. Botões (<button>)
<div class="buttons">
<button type="button" onclick="appendNumber('1')">1</button>
<button type="button" onclick="appendNumber('2')">2</button>
<button type="button" onclick="appendNumber('3')">3</button>
<button type="button" class="operator" onclick="appendOperator('+')">+</button>
<button type="button" onclick="appendNumber('4')">4</button>
<button type="button" onclick="appendNumber('5')">5</button>
<button type="button" onclick="appendNumber('6')">6</button>
<button type="button" class="operator" onclick="appendOperator('-')">-</button>
<button type="button" onclick="appendNumber('7')">7</button>
<button type="button" onclick="appendNumber('8')">8</button>
<button type="button" onclick="appendNumber('9')">9</button>
<button type="button" class="operator" onclick="appendOperator('*')">*</button>
<button type="button" onclick="appendNumber('0')">0</button>
<button type="button" onclick="clearDisplay()">C</button>
<button type="button" class="equal" aria-label="Calcular resultado" onclick="calculateResult()">=</button>
<button type="button" class="operator" onclick="appendOperator('/')">/</button>
</div>
<div class="buttons">: Agrupa todos os botões dentro de um contêiner com a classebuttons.<button type="button" onclick="function()">texto</button>: Cria botões do tipobutton. Usartype="button"(em vez do padrãosubmit) é importante aqui: como os botões estão dentro de um<form>, sem essa declaração explícita cada clique tentaria enviar o formulário e recarregar a página.- Cada botão chama uma função JavaScript específica ao ser clicado (
appendNumber,appendOperator,clearDisplay,calculateResult). class="operator"eclass="equal": identificam os botões de operação e o botão de igual para que a parte 3 possa estilizá-los com cores diferentes dos botões numéricos.aria-label="Calcular resultado"no botão de igual: reforça a intenção da ação para leitores de tela, já que o símbolo=sozinho pode ser ambíguo fora de contexto.
Por que os atributos * e / como texto, e não × e ÷? Usar os símbolos matemáticos × (multiplicação) e ÷ (divisão) deixa a interface mais legível para o usuário, mesmo mantendo * e / internamente na lógica JavaScript. Vale a pena aplicar esse ajuste visual na parte de estilização.
5. Inclusão do JavaScript
<script src="/calculadora/script.js"></script>
</body>
</html>
<script src="/calculadora/script.js"></script>: Inclui o arquivo JavaScript externo que conterá a lógica da nossa calculadora. Colocar o<script>no final do<body>garante que os botões já existam no DOM antes do JavaScript tentar manipulá-los.
Tabela-resumo dos elementos
| Elemento | Papel na calculadora |
|---|---|
<form id="calculator"> | Contêiner principal, agrupa toda a interface |
<div id="display" role="status"> | Mostra o valor digitado e o resultado, de forma acessível |
<div class="buttons"> | Agrupa os 16 botões em um grid |
<button onclick="appendNumber(...)"> | Adiciona um dígito ao display |
<button onclick="appendOperator(...)"> | Adiciona um operador (+, -, *, /) |
<button onclick="clearDisplay()"> | Reseta o display e o estado interno |
<button onclick="calculateResult()"> | Calcula e exibe o resultado |
Conclusão
Nesta segunda parte, construímos a estrutura HTML da nossa calculadora e cobrimos um ponto que a maioria dos tutoriais pula: acessibilidade do display e dos botões. Explicamos o papel de cada elemento, desde os cabeçalhos até os botões de interação, e já preparamos o terreno para os atributos que a parte 4 vai manipular via JavaScript.
No próximo passo, vamos estilizar a calculadora com CSS para torná-la visualmente atraente e, em seguida, implementar a lógica em JavaScript para torná-la funcional.
Comentários
Não foi possível carregar os comentários no momento.
Deixe seu comentário