계산기 만들기

HTML/CSS 구현

<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>Simple Calculator</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link rel='stylesheet' type='text/css' media='screen' href='main.css'>
    <script src='main.js'></script>
</head>
.btn {
    width: 48px;
    height: 48px;
    background-color: #2699fb;
    color: white;
    border-radius: 4px;
    outline: none;
    border: none;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: bold;
}

.btn:active {
    background-color: #007feb;
}
<div class="row">
        <input class="inp" disabled id="top-inp">
    </div>
    <div class="row">
        <div class="btn" onclick="inputNum(7)">7</div>
        <div class="btn" onclick="inputNum(8)">8</div>
        <div class="btn" onclick="inputNum(9)">9</div>
        <div class="btn" onclick="inputEqual()">=</div>
    </div>
    <div class="row">
        <div class="btn" onclick="inputNum(4)">4</div>
        <div class="btn" onclick="inputNum(5)">5</div>
        <div class="btn" onclick="inputNum(6)">6</div>
        <div class="btn" onclick="inputOper('+')">+</div>
    </div>
    <div class="row">
        <div class="btn" onclick="inputNum(1)">1</div>
        <div class="btn" onclick="inputNum(2)">2</div>
        <div class="btn" onclick="inputNum(3)">3</div>
        <div class="btn" onclick="inputOper('-')">-</div>
    </div>
    <div class="row">
        <div class="btn btn-lg" onclick="inputNum(0)">0</div>
        <div class="btn" onclick="inputOper('/')">/</div>
        <div class="btn" onclick="inputOper('*')">*</div>
    </div>
.row {
    display: flex;
    gap: 4px;
    margin-bottom: 4px;
}
.inp {
    width: 204px;
    height: 48px;
    box-sizing: border-box;
    outline: none;
    color: #bce0fd;
    padding: 0 20px;
}
 
.inp:disabled {
    background-color: white;
    border: solid 1px #bce0fd;
    font-size: 14px;
}

main.js 구현

클릭 이벤트를 통한 숫자 입력 함수
function inputNum(num) {
    if (oper === null) {
        if (left === null) {
            left = `${num}`
        } else {
            if (num === 0 && parseInt(left) === 0)  return;
            left += `${num}`
        }
    } else {        
        if (right === null) {
            right = `${num}`
        } else {
            right += `${num}`
        }
    }
    console.log(left);
    save();
}
operator를 받는 함수
function inputOper(op) {
    if (left === null && op === "-") {
        left = '-';
        save();
        return;
    }
    if (left === "-" && op === "-")   return;
    if (op === "-" && oper !== null && right === null) {
        right = "-";
        save();
        return;
    }
    
    oper = op;
    save();
}
equal를 받는 함수
function inputEqual() {
    if (res) {
        left = res;
        right = null;
        res = null;
        oper = null;
        equal = false;
    }
    equal = true;
    save(); 
}
save 함수
function save() {
    const inp = document.getElementById("top-inp");
    let value = "";
    
    if (left === null)  return;
    value += left + " ";
    inp.value = value;
    if (oper === null)  return;
    value += oper + " ";
    inp.value = value;
    if (right === null)  return;
    value += right + " ";
    inp.value = value;

    if (equal) {
        switch (oper) {
            case "+":
                res = parseInt(left) + parseInt(right);
                break;
            case "-":
                res = parseInt(left) - parseInt(right);
                break;
            case "*":
                res = parseInt(left) * parseInt(right);
                break;
            case "/":
                res = parseInt(left) / parseInt(right);
                break;
        }
        value += "= " + res;
        inp.value = value;
    }
}

완성본 보러가기

끝!