Projeto Calculadora - Parte 3: Estilizando a Interface com CSS

Tutorial com passos estruturados

Projeto Calculadora - Parte 3: Estilizando a Interface com CSS

Série “Projeto Calculadora” — 4 partes, do planejamento ao código funcionando: 1. Requisitos e funcionalidades · 2. Estrutura HTML · 3. Estilização com CSS (você está aqui) · 4. Lógica com JavaScript

Introdução

Com o HTML da parte 2 pronto, vamos estilizar a calculadora com CSS: alinhá-la no centro da página, estilizar o display e os botões, e garantir uma boa experiência de usuário com transições e efeitos de hover.

Passo 1: Estilizando o Body

Vamos começar estilizando o body da nossa página:

body {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    background-color: #f0f0f0;
    font-family: 'Arial', sans-serif;
    margin: 0;
}

Aqui, usamos flex para centralizar a calculadora vertical e horizontalmente na tela. Também definimos uma altura de 100vh (viewport height) e um fundo cinza claro, além de remover as margens padrão.

Passo 2: Estilizando o Contêiner da Calculadora

Agora, vamos estilizar o contêiner da calculadora:

.calculator {
    background-color: #aa4444;
    border-radius: 10px;
    box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
    width: 300px;
    padding: 20px;
    border: 1px solid red;
}

A calculadora tem um fundo vermelho, bordas arredondadas, uma sombra suave e uma largura de 300px.

Atenção a um erro comum: é fácil escrever margin: 1px red solid; esperando o mesmo efeito de uma borda — mas a propriedade margin só aceita valores de tamanho (px, em, %, auto); ela não tem sintaxe para cor ou estilo de linha. Um navegador simplesmente ignora a declaração inteira quando encontra um valor inválido como esse, e o contêiner fica sem nenhuma borda visível. Quem quer uma linha colorida ao redor de um elemento deve usar a propriedade border (como fizemos acima), reservando margin apenas para espaçamento externo.

Passo 3: Estilizando o Display

Em seguida, estilizamos o display da calculadora:

.display {
    background-color: #131212;
    max-width: 91%;
    color: #fff;
    font-size: 2em;
    padding: 10px;
    border-radius: 5px;
    text-align: right;
    margin-bottom: 20px;
}

O display tem um fundo preto, texto branco, fonte grande, padding e bordas arredondadas. O texto está alinhado à direita e há uma margem inferior para separar dos botões.

Como na parte 2 o display é uma <div role="status"> (e não um <input>), vale adicionar também overflow-x: auto e white-space: nowrap ao .display, para que expressões longas rolem horizontalmente em vez de quebrar em várias linhas dentro de uma div de bloco:

.display {
    /* ...propriedades acima... */
    overflow-x: auto;
    white-space: nowrap;
}

Passo 4: Estilizando os Botões

Vamos estilizar os botões da calculadora:

.buttons {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
}

button {
    background-color: #e0e0e0;
    border: none;
    border-radius: 5px;
    padding: 20px;
    font-size: 1.2em;
    cursor: pointer;
    transition: background-color 0.3s;
}

button:hover {
    background-color: #d0d0d0;
}

button:active {
    background-color: #c0c0c0;
}

Os botões são organizados em um grid com 4 colunas. Cada botão tem um fundo cinza claro, bordas arredondadas, padding, e um cursor de ponteiro ao passar o mouse. Também adicionamos transições para efeitos de hover e active.

Acessibilidade do foco por teclado: os estados :hover e :active cobrem mouse e toque, mas quem navega só com Tab depende do estado :focus-visible. Sem ele, o botão selecionado fica visualmente indistinguível dos demais. Adicione:

button:focus-visible {
    outline: 3px solid #0d6efd;
    outline-offset: 2px;
}

Passo 5: Estilizando Botões Específicos

Finalmente, vamos aplicar estilos específicos para os operadores e o botão de igual:

button.operator {
    background-color: #ff9500;
    color: #fff;
}
button.operator:hover {
    background-color: #e08900;
}
button.operator:active {
    background-color: #cc7a00;
}
button.equal {
    background-color: #34c759;
    color: #fff;
    grid-column: span 2;
}
button.equal:hover {
    background-color: #2dbb4f;
}
button.equal:active {
    background-color: #27a645;
}

Os botões de operadores têm um fundo laranja e o botão de igual é verde. Eles também têm estilos para os estados de hover e active. O botão de igual ocupa duas colunas no grid — isso funciona porque já demos as classes operator aos botões + - * / e equal ao botão = no HTML da parte 2.

Passo 6: Responsividade

A calculadora tem uma largura fixa de 300px, o que funciona bem em desktop mas pode estourar a tela em celulares muito pequenos (largura menor que 320px). Uma media query resolve isso:

@media (max-width: 360px) {
    .calculator {
        width: 90vw;
        padding: 4vw;
    }

    .display {
        font-size: 1.5em;
    }
}

Conclusão

Com este tutorial, estilizamos uma calculadora funcional em CSS, aprimorando não apenas a aparência, mas também a usabilidade da aplicação. A centralização com flexbox assegura que a calculadora esteja sempre visível e acessível, enquanto o uso de grids facilita a disposição dos botões de forma ordenada e consistente. Os efeitos de transição, o foco visível por teclado e a media query de responsividade cobrem cenários que vão além do visual — cenários que fazem a diferença entre um projeto de portfólio e um projeto realmente usável.

Falta só uma peça: fazer os botões funcionarem de verdade. Vamos implementar a lógica em JavaScript na parte 4.

Comentários

Não foi possível carregar os comentários no momento.

Deixe seu comentário