본문 바로가기
프로젝트/web

HTML, CSS, JS를 이용한 웹 계산기 만들기 1 - 소개 및 디자인 구현

by 미니상미니 2023. 6. 5.
반응형

도입

안녕하세요! 이번에는 간단한 사칙연산이 가능한 웹에서 동작하는 계산기를 만들려고 합니다

HTML, CSS, JS를 이용하여 만들었고 동작 방식은 Mac용 계산기를 참고하여 만들었습니다!

소수점을 포함한 간단한 사칙연산이 가능하고 초기화, 끝 자리 지우기 기능이 있습니다!

아래는 최종 형태 작동 영상이며,

이번 포스트에서는 HTML, CSS을 이용한 디자인만 다루고, 다음 편에서 JS를 이용한 기능을 다루도록 하겠습니다.

 

완성된 형태

 


 

HTML

<div class="wrapper">
    <div class="calculator">
      <div class="display">
        <input type="text" id="display" value="0" disabled="true">
      </div>
      <div>
        <input type="button" value="AC">
        <input type="button" value="DE">
        <input type="button" value=".">
        <input type="button" id="operator" value="/">
      </div>
      <div>
        <input type="button" value="7">
        <input type="button" value="8">
        <input type="button" value="9">
        <input type="button" id="operator" value="*">
      </div>
      <div>
        <input type="button" value="4">
        <input type="button" value="5">
        <input type="button" value="6">
        <input type="button" id="operator" value="-">
      </div>
      <div>
        <input type="button" value="3">
        <input type="button" value="2">
        <input type="button" value="1">
        <input type="button" id="operator" value="+">
      </div>
      <div>
        <input type="button" value="00">
        <input type="button" value="0">
        <input type="button" id="operator" value="=" class="equal">
      </div>
    </div>
  </div>

HTML 구조입니다.

 

<input type="text" id="display" value="0" disabled="true">

해당 input은식이나 결괏값을 보여주는 용도이므로 사용자가 입력할 필요 없요가 없습니다.
그러므로 disabled="true"속성을 적용하여 비활성화시켰습니다.

 

div.wrapper: 화면 전체를 감싸는 배경

div.calculator: 계산기를 감싸는 박스

div.display: 결괏값을 보여주는 박스

 

id="operator"를 적용시킨 input은 js 단계에서 설명하겠습니다.

 


 

CSS

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  user-select: none;
}

먼저 전체 선택자 *를 이용하여 모든 요소의 margin, padding을 없애고 시작하였습니다.

box-sizing: border-box를 주어 테두리를 기준으로 박스의 크기를 계산하겠습니다.

user-select: none을 주어 텍스트를 드래그나 더블클릭으로 지정할 수 없도록 하였습니다.

 

 

.wrapper {
  width: 100vw;
  height: 100vh;
  background-color: #6a718d;
  display: flex;
  align-items: center;
  justify-content: center;
}

width: 100vw, height: 100vh로 설정하여 현재 브라우저 창에 맞춰 요소의 크기를 100%로 설정하였습니다.

background-color: #6a718d를 주어 구현 영상에서 보인 남색 계열로 배경색을 지정하였습니다.

display: flex를 주고 align-items(세로): center, justify-content(가로): center로 계산기를 중앙에 배치시켰습니다.

 

 

.calculator {
  background-color: #374259;
  padding: 20px;
  border-radius: 10px;
}

background-color: #374259를 주어 계산기와 배경을 구분하였습니다.

padding, border-radius 속성으로 계산기 박스를 디자인하였습니다.

 

 

.calculator input {
  border: 0;
  outline: 0;
  width: 60px;
  height: 60px;
  border-radius: 10px;
  box-shadow: -8px -8px 20px rgba(255, 255, 255, 0.1), 5px 5px 10px rgba(255, 255, 255, 0.2);
  background: transparent;
  font-size: 20px;
  cursor: pointer;
  margin: 10px;
  color: white;
}

border: 0, outline: 0으로 테두리를 없앴습니다.

width: 60px, height: 60px로 버튼을 적당한 크기로 설정하였습니다.

border-radius, box-shadow, background, font-size, color 속성으로 버튼을 디자인하였습니다.

    background: transaprenr는 배경을 투명하게 설정하는 속성입니다.

cursor: pointer는 마우스를 올릴 시 커서를 pointer 모양으로 바뀌도록 하였습니다.

margin으로 버튼마다 적당한 간격을 두었습니다

 

 

.calculator input:active {
  background-color: #4f5664;;
}

~:active는 활성화된 요소를 가리킵니다. `활성`이란 보통 마우스 버튼을 누르는 순간부터 떼는 순간까지를 말합니다.

.calculator input 즉 버튼을 눌렸을 때에 다른 색의 background-color를 주어 클릭 효과를 주었습니다.

 

 

.calculator .display {
  display: flex;
  margin: 20px 0;
}

display: flex를 주었고

margin: 20px 0으로 위, 아래에 20px만큼 간격을 두었습니다.

 

 

.calculator .display input {
  text-align: right;
  flex: 1;
  font-size: 45px;
  box-shadow: none;
  color: rgba(255, 255, 255, 0.8);
}

text-algin: right으로 input내의 value를 오른쪽으로 정렬시켰습니다.

flex: 1로 input이 가질 수 있는 크기를 모두 가지도록 하였습니다.
box-shadow, color로 위에서 정의한 input의 디자인을 재정의 하여 디자인하였습니다.

 

 

.calculator input.equal {
  width: 140px;
}

구현 영상처럼 `=` 버튼은 버튼 2개만큼의 너비를 가져야 하므로
60 + 60 + 10(버튼 사이마진) x 2 = 160px만큼의 너비를 지정해주었습니다.

 

 

.calculator input.active {
  box-shadow: 0px 0px 10px black;
}

구현 영상에서 볼 수 있듯이 사칙연산 기호를 활성화시킬 때 검은색 그림자가 생깁니다.

이에 해당하는 css이며, 현재는 쓰지 않고 JS 단계에서 쓸 것입니다.

 

전체 css 코드

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  user-select: none;
}

.wrapper {
  width: 100vw;
  height: 100vh;
  background-color: #6a718d;
  display: flex;
  align-items: center;
  justify-content: center;
}

.calculator {
  background-color: #374259;
  padding: 20px;
  border-radius: 10px;
}
.calculator input {
  border: 0;
  outline: 0;
  width: 60px;
  height: 60px;
  border-radius: 10px;
  box-shadow: -8px -8px 20px rgba(255, 255, 255, 0.1), 5px 5px 10px rgba(255, 255, 255, 0.2);
  background: transparent;
  font-size: 20px;
  cursor: pointer;
  margin: 10px;
  color: white;
}
.calculator input:active {
  background-color: #4f5664;;
}

.calculator .display {
  display: flex;
  margin: 20px 0;
}
.calculator .display input {
  text-align: right;
  flex: 1;
  font-size: 45px;
  box-shadow: none;
  color: rgba(255, 255, 255, 0.8);
}

.calculator input.equal {
  width: 140px;
}

.calculator input.active {
  box-shadow: 0px 0px 10px black;
}

완성된 모습


마침

지금까지 계산기의 디자인을 완성시켜 보았습니다.

오늘 한 것을 토대로 취향대로 계산기 디자인을 꾸며보면 실력에 많은 도움이 될 겁니다 !

다음 포스트에서는 JS로 계산기의 기능을 완성시키겠습니다.

 

글에 오타나 잘못된 부분이 있다면 언제든 댓글로 알려주세요!
또한 궁금한 점이 있거나 추가로 궁금한 내용이 있다면 언제든 질문해주세요 !_!
반응형

댓글