'How to make user input contained with in the screen like a calculator should?

I am new to javascript and still learning, I am working on a calculator project and trying this without looking up code, but I am stuck at the moment.

I have the inputs appear on the screen, however, it does not function the same way as a normal calculator function.

what it's currently doing is, that the user input goes out of bounds of the screen when the digits become too much.

/*********************
Setting up varlaibles*
**********************/

let result;
let calculation;
let num1;
let num2;

/*****************************************
Function for numbers to display on screen*
******************************************/

function buttonPress(numbers) {

  result = document.querySelector('.answer');
  result.innerHTML += numbers


}
body {
  margin: auto 15rem;
  box-sizing: border-box;
  font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
}

.base {
  margin-top: 2rem;
  background-color: #0C1021;
  width: 19.8rem;
  height: 40rem;
  border-radius: 1.5rem;
}

.header {
  display: flex;
  flex-direction: row;
}

.time {
  font-size: 10px;
  color: white;
  margin-top: 1rem;
  margin-left: 2rem;
}

.icons {
  margin-left: 11.3rem;
  margin-top: 0.2rem;
}

.icons img {
  width: 13px;
  margin-top: 10px;
  padding-left: 5px;
}

.battery {
  filter: brightness(0) invert(1);
}

span {
  display: block;
  width: 6%;
  border-top: 3px solid white;
  margin-left: 1rem;
  margin-top: 2rem;
}

.hl {
  margin-top: 3px;
}

.hl2 {
  cursor: pointer;
  margin-top: 2px;
}

.calc-header {
  display: flex;
  flex-direction: row;
}

.calc-header h2 {
  position: absolute;
  margin-left: 6rem;
  color: white;
  margin-top: -23px;
}

.screen {
  margin-left: 16rem;
  margin-top: 149px;
}

.calc {
  width: 5px;
  color: white;
}

.answer {
  color: red;
  font-size: 32px;
}

button {
  border: none;
  cursor: pointer;
}

.row {
  margin-top: -359px;
  position: absolute;
}

.col {
  padding: 1px;
}

.col-op,
.col-op-end,
.col-num {
  width: 75.3px;
  height: 70px;
}

.col-eq-end {
  width: 155px;
  height: 68px;
}

.col-op,
.col-op-end {
  background-color: #093A52;
  color: #01A6CB;
}

.col-num {
  background-color: #0B1A2C;
  color: white;
}

#border-left {
  border-radius: 0px 0px 0px 23px;
}

.col-eq-end {
  background-color: #01A6CB;
  color: white;
}

#border-right {
  border-radius: 0px 0px 23px 0px;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" href="css/main.css" />
  <script src="js/main.js" defer></script>
  <script src="js/time.js" defer></script>
  <title>Calculator</title>
</head>

<body>

  <header>
    <div class="base">
      <div class="header">
        <div class="time"></div>
      </div>
      <div class="dummy-nav">
        <span></span>
        <span class="hl"></span>
        <span class="hl2"></span>
      </div>
      <div class="calc-header">
        <h2>Calculator</h2>
      </div>

      <div class="screen">
        <div class="calc"></div>
        <div class="answer"></div>
      </div>
  </header>

  <main>
    <div class="row">

      <div class="col">
        <button class="col-op clear" onclick="buttonPress('c')">C</button>
        <button class="col-op" onclick="buttonPress('()')">()</button>
        <button class="col-op" onclick="buttonPress('%')">%</button>
        <button class="col-op" onclick="buttonPress('/')">/</button>
      </div>

      <div class="col">
        <button class="col-num" onclick="buttonPress(1)">1</button>
        <button class="col-num" onclick="buttonPress(2)">2</button>
        <button class="col-num" onclick="buttonPress(3)">3</button>
        <button class="col-op-end" onclick="buttonPress('x')">x</button>
      </div>

      <div class="col">
        <button class="col-num" onclick="buttonPress(4)">4</button>
        <button class="col-num" onclick="buttonPress(5)">5</button>
        <button class="col-num" onclick="buttonPress(6)">6</button>
        <button class="col-op-end" onclick="buttonPress('+')">+</button>
      </div>

      <div class="col">
        <button class="col-num" onclick="buttonPress(7)">7</button>
        <button class="col-num" onclick="buttonPress(8)">8</button>
        <button class="col-num" onclick="buttonPress(9)">9</button>
        <button class="col-op-end" onclick="buttonPress('-')">-</button>
      </div>

      <div class="col">
        <button class="col-num" id="border-left" onclick="buttonPress(0)">0</button>
        <button class="col-num" onclick="buttonPress('.')">.</button>
        <button class="col-eq-end" id="border-right" onclick="buttonPress('=')">=</button>
      </div>

    </div>

  </main>
</body>

</html>


Solution 1:[1]

The large left-margin on the screen class pushed the answer div to the right unnecessarily. Fixing that, plus adding right-alignment on the answer produces what I think you're looking for (see the two fixes in CSS, commented)...

/*********************
Setting up varlaibles*
**********************/

let result;
let calculation;
let num1;
let num2;

/*****************************************
Function for numbers to display on screen*
******************************************/

function buttonPress(numbers) {

  result = document.querySelector('.answer');
  result.innerHTML += numbers


}
body {
  margin: auto 15rem;
  box-sizing: border-box;
  font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
}

.base {
  margin-top: 2rem;
  background-color: #0C1021;
  width: 19.8rem;
  height: 40rem;
  border-radius: 1.5rem;
}

.header {
  display: flex;
  flex-direction: row;
}

.time {
  font-size: 10px;
  color: white;
  margin-top: 1rem;
  margin-left: 2rem;
}

.icons {
  margin-left: 11.3rem;
  margin-top: 0.2rem;
}

.icons img {
  width: 13px;
  margin-top: 10px;
  padding-left: 5px;
}

.battery {
  filter: brightness(0) invert(1);
}

span {
  display: block;
  width: 6%;
  border-top: 3px solid white;
  margin-left: 1rem;
  margin-top: 2rem;
}

.hl {
  margin-top: 3px;
}

.hl2 {
  cursor: pointer;
  margin-top: 2px;
}

.calc-header {
  display: flex;
  flex-direction: row;
}

.calc-header h2 {
  position: absolute;
  margin-left: 6rem;
  color: white;
  margin-top: -23px;
}

.screen {
  margin-left: 0rem;  /* changed */
  margin-top: 149px;
}

.calc {
  width: 5px;
  color: white;
}

.answer {
  color: red;
  font-size: 32px;
  text-align: right; /* added */
}

button {
  border: none;
  cursor: pointer;
}

.row {
  margin-top: -359px;
  position: absolute;
}

.col {
  padding: 1px;
}

.col-op,
.col-op-end,
.col-num {
  width: 75.3px;
  height: 70px;
}

.col-eq-end {
  width: 155px;
  height: 68px;
}

.col-op,
.col-op-end {
  background-color: #093A52;
  color: #01A6CB;
}

.col-num {
  background-color: #0B1A2C;
  color: white;
}

#border-left {
  border-radius: 0px 0px 0px 23px;
}

.col-eq-end {
  background-color: #01A6CB;
  color: white;
}

#border-right {
  border-radius: 0px 0px 23px 0px;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" href="css/main.css" />
  <script src="js/main.js" defer></script>
  <script src="js/time.js" defer></script>
  <title>Calculator</title>
</head>

<body>

  <header>
    <div class="base">
      <div class="header">
        <div class="time"></div>
      </div>
      <div class="dummy-nav">
        <span></span>
        <span class="hl"></span>
        <span class="hl2"></span>
      </div>
      <div class="calc-header">
        <h2>Calculator</h2>
      </div>

      <div class="screen">
        <div class="calc"></div>
        <div class="answer"></div>
      </div>
  </header>

  <main>
    <div class="row">

      <div class="col">
        <button class="col-op clear" onclick="buttonPress('c')">C</button>
        <button class="col-op" onclick="buttonPress('()')">()</button>
        <button class="col-op" onclick="buttonPress('%')">%</button>
        <button class="col-op" onclick="buttonPress('/')">/</button>
      </div>

      <div class="col">
        <button class="col-num" onclick="buttonPress(1)">1</button>
        <button class="col-num" onclick="buttonPress(2)">2</button>
        <button class="col-num" onclick="buttonPress(3)">3</button>
        <button class="col-op-end" onclick="buttonPress('x')">x</button>
      </div>

      <div class="col">
        <button class="col-num" onclick="buttonPress(4)">4</button>
        <button class="col-num" onclick="buttonPress(5)">5</button>
        <button class="col-num" onclick="buttonPress(6)">6</button>
        <button class="col-op-end" onclick="buttonPress('+')">+</button>
      </div>

      <div class="col">
        <button class="col-num" onclick="buttonPress(7)">7</button>
        <button class="col-num" onclick="buttonPress(8)">8</button>
        <button class="col-num" onclick="buttonPress(9)">9</button>
        <button class="col-op-end" onclick="buttonPress('-')">-</button>
      </div>

      <div class="col">
        <button class="col-num" id="border-left" onclick="buttonPress(0)">0</button>
        <button class="col-num" onclick="buttonPress('.')">.</button>
        <button class="col-eq-end" id="border-right" onclick="buttonPress('=')">=</button>
      </div>

    </div>

  </main>
</body>

</html>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 danh