9 de febrero de 2023

Cómo crear una calculadora con JavaScript, HTML y CSS (tutorial paso a paso)

Foto de Marco Orta Marco Orta | 2 min de lectura
Compartir
Calculadora hecha con HTML, CSS y JavaScript mostrando el resultado de una operación
Tabla de Contenidos

    Que tal, el día de hoy realizaremos una calculadora básica utilizando solo Html, Css y un poco de JavaScript desde cero, te iré mostrando el código junto con la explicación de la lógica de este.

    La calculadora que realizaremos en esta ocasión te permitirá ejecutar las cuatro operaciones básicas las cuales son sumar, restar, multiplicar y dividir, adicionalmente colocaremos la funcionalidad de borrar un digito o bien toda la información almacenada para realizar una nueva operación.

    Código Html

    Dentro de nuestro HTML vamos a crear la estructura principal de nuestra calculadora, utilizando un contenedor para colocar todos nuestros botones y el display.

    <!-- index.html -->
    
    <html> 
    <head> 
      <meta charset="UTF-8"> 
      <title>Calculadora con JavaScript</title> 
      <link type="text/css" href="style.css" rel="stylesheet"> 
    </head>
    <body> 
      <div id="calculator"> 
        <input type="text" id="display" disabled> <br /> 
        <button id="ac" class="operator">AC</button> 
        <button id="de" class="operator">DE</button> 
        <button id="." class="operator">.</button> 
        <button id="/" class="operator">/</button> <br /> 
        <button id="7">7</button> 
        <button id="8">8</button> 
        <button id="9">9</button> 
        <button id="*" class="operator">*</button> <br /> 
        <button id="4">4</button> 
        <button id="5">5</button> 
        <button id="6">6</button> 
        <button id="-" class="operator">-</button> <br /> 
        <button id="1">1</button> 
        <button id="2">2</button> 
        <button id="3">3</button> 
        <button id="+" class="operator">+</button> <br /> 
        <button id="00">00</button> 
        <button id="0">0</button> 
        <button id="=" class="equal operator">=</button> <br /> 
      </div> 
    <script src="script.js"></script>
    </body>
    </html>
    

    Código CSS

    En el código CSS vamos a centrar la calculadora en el centro de nuestra pantalla, ajustaremos los tamaños de los botones y organizaremos todo el contenido utilizando las propiedades de Flex.

    /* style.css */
    body { 
      text-align: center; 
      margin: 0; 
      background: #8877eb; 
      display: flex; 
      align-items: center; 
      justify-content: center; 
      height: 100vh;
    }
    #calculator { 
      max-width: 360px; 
      background-color: #0d1b2a; 
      border-radius: 10px; 
      padding: 20px; 
      box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 0px 0px rgba(0, 0, 0, 0.23);
    }
    #display { 
      width: 100%; 
      height: 50px; 
      font-size: 20px; 
      text-align: right; 
      margin-bottom: 10px; 
      padding: 20px; 
      border-radius: 5px; 
      color: #e0e1dd; 
      background-color: rgba(13, 27, 42, 0.3); 
      border: none; 
      box-sizing: border-box;
    }
    .operator { 
      color: #8877eb;
    }
    #ac { 
      color: #bf4d5d;
    }
    .equal { 
      width: calc(50% - 10px);
    }
    button { 
      width: calc(25% - 10px); 
      height: 50px; 
      font-size: 20px; 
      margin: 10px 5px; 
      border: none; 
      border-radius: 5px; 
      float: left; 
      background-color: rgba(13, 27, 42); 
      color: #e0e1dd; 
      -webkit-box-shadow: -1px 1px 30px -5px rgba(0, 0, 0, 0.2); 
      -moz-box-shadow: -1px 1px 30px -5px rgba(0, 0, 0, 0.2); 
      box-shadow: -1px 1px 30px -5px rgba(0, 0, 0, 0.2);
    }
    

    Código JavaScript

    En el siguiente código te iré explicando paso a paso cada una de las funciones con las que procedemos a realizar nuestras operaciones de una forma rápida y con pocas líneas.

    // script.js
    // Este será el contenedor que incluira la información a ser procesada
    const display = document.querySelector('#display');
    // Aquí recogemos todos los botones disponibles
    const buttons = document.querySelectorAll('button');
    // Realizamos un loop de todos los botones disponibles
    buttons.forEach((btn) => { // Escucharemos la acción del click en cada uno de los botones 
      btn.addEventListener("click", () => { 
      if(btn.id === '=') { 
        /* Si el botón seleccionado es nuestro '=' procederemos a utilizar eval para resolver el resultado de la operación en pantalla. Más info: 
        https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/eval */ 
        display.value = eval(display.value); 
      } else if (btn.id === 'ac') { 
        // Si el botón es 'ac' procederá a borrar toda la info en pantalla. 
        display.value = ''; 
      } else if (btn.id === 'de') {
        // Si el botón es 'de' procederá a eliminar el último digito en pantalla. 
        display.value = display.value.slice(0, -1); 
      } else { 
        // Cualquier otro botón se añadira normalmente a la pantalla 
        display.value += btn.id; 
      }});
    })
    

    Así concluimos con la creación de nuestra calculadora, como puedes observar, crear la función de JavaScript es muy sencillo y fácil de aplicar.

    Nota de seguridad: cuidado con eval

    Este tutorial usa eval() por simplicidad pedagógica, pero no lo uses tal cual en producción. eval ejecuta cualquier código JavaScript que reciba como string, lo que abre la puerta a XSS si la entrada llega del usuario. En un proyecto real:

    • Para evaluar expresiones aritméticas simples, usa el constructor Function (también dinámico, pero más fácil de aislar):
    function safeEval(expr) {
      if (!/^[\d+\-*/().\s]+$/.test(expr)) {
        throw new Error("Expresión no permitida");
      }
      return Function(`"use strict"; return (${expr});`)();
    }
    
    • Para algo robusto, usa una librería de parsing como mathjs (npm install mathjs), que evalúa expresiones sin eval y soporta variables, funciones y números arbitrariamente grandes.

    Si te ha funcionado este tutorial, no olvides compartirlo con tus amigos. ¡Saludos!

    Compartir

    Buscar

    Etiquetas

    Laravel PHP Tutorial Desarrollo Web IA JavaScript Buenas Prácticas Laravel 13 Seguridad Herramientas Claude SEO Expresiones Regulares Manipulación de Texto Frontend