이 포스트는 Udemy에 올라온
Brad Traversy의 20 Web Projects With Vanila JavaScript 강의를 보고 정리하는 내용입니다!
https://www.udemy.com/course/web-projects-with-vanilla-javascript/
1. body
body {
background-color: #34495e;
color: #fff;
display: flex;
flex-direction: column;
align-items: center;
height: 80vh;
overflow: hidden;
margin: 0;
}
배경색, 글자색 넣어주고
display:flex, flex-direction:column, align-items:center을 해서 elements 수직 정렬, 화면 중앙
height을 80vh로 쓰고 (나중에 notification 위해)
스크롤바 생기지 않게 overflow:hidden
기본 margin은 다 없애줬다.
- body의 height을 80vh으로 설정해서 밑에 다른 div들이 튀어나가있음 ㅎㅎ
2. game-container
.game-container {
width: 450px;
height: 350px;
padding: 20px 30px;
position: relative;
}
game-container의 너비는 450px, 높이는 350px
padding 위아래 20px 좌우 30px
position:relative인 이유는
game-container 속 다른 아이템들에 position:absolute;를 줘서
game-container를 기준으로 위치를 정할 것이기 때문
(body 높이를 80vh로 한데다 flow:hidden했기 때문에 다른 부분은 다 짤려서 안나옴..ㅎㅎㅎ)
3. figure-container
.figure-container {
fill: transparent;
stroke: #fff;
stroke-width: 4px;
stroke-linecap: round;
}
(저번 시간에도 했지만) svg로 그린 행맨 파트
원을 그렸을 때, 원을 채울 색은 transparent (투명? 그냥 테두리만 생기고 뒤 배경색과 같아질 것)
stoke line 속성은 라인 그렸을 때 색깔
stroke-width은 line 두께
stroke-linecap은 line 시작점, 끝점 모양 어떻게 할지. round로 하면 끝이 둥글어짐
4. wrong-letters-container
.wrong-letters-container {
position: absolute;
top: 20px;
right: 20px;
display: flex;
flex-direction: column;
text-align: right;
}
game-container 속 wrong-letters-container는
position:absolute를 해서
game-container을 기준으로 top:20px right:20px 떨어진 곳에 위치
wrong-letters-container 속 <div> 정렬을 위해
display:flex, flex-direction:column
text-align:right으로 해서 왼쪽으로 배치된 "wrong"이라는 단어를 오른쪽 끝에 붙였다.
.wrong-letters-container p {
margin: 0 0 5px;
}
wrong-letters-container에서 "wrong"이 들어가는 <p>
위, 좌우 margin은 0이고 아래에만 margin 5px을 줬다.
.wrong-letters-container span {
font-size: 24px;
}
이미 입력한 (틀린) 단어들이 들어가는 span
font를 키웠다.
5. word
.word {
display: flex;
position: absolute;
bottom: 10px;
left: 50%;
transform: translateX(-50%);
}
display:flex를 줘서 세로로 배치되어있던 div들을 한 줄로
position:absolute를 해서 game-container를 기준으로 배치할 수 있게.
game-container 기준으로 bottom에서 10px 위로
left:50%갔는데
hello라는 단어에서 시작인 h가 왼쪽에서 50% 간 곳에 위치하기 때문에
사용자가 보기에는 정중앙에 위치하지 않는다.
그래서
transform:translateX(-50%)를 준다.
그러면 정중앙에 hello가 배치된다.
6. letter
.letter {
font-size: 30px;
height: 50px;
width: 20px;
border-bottom: 3px solid #2980b9;
margin: 0 3px;
display: flex;
align-items: center;
justify-content: center;
}
각 글자 크기를 30px로 키워준다
height:50px width:20px
그리고 각 글자들 아래 border-bottom.
이때 width를 안주면, 원래 글자의 길이에 따라 div의 크기가 달라지고,
그래서 아래 border-bottom 선 길이가 달라진다.
(가령, l은 width가 짧고 n은 width가 넓어서 라인 길이가 일정하지 않고 어떤 건 길고 어떤 건 짧게 나온다. )
그래서 그 길이를 맞춰주기 위해 width:20px로 통일.
margin을 줘서 각 글자들이 띄워지게 만들었다.
display:flex, align-items:center, justify-content:center을 해서
hello라는 글자가 붕- 떠있거나 한 쪽으로 치우치지 않고 중앙에 잘 배치되도록.
7. pop-up container
.popup-container {
background-color: rgba(0, 0, 0, 0.3);
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
display: flex;
align-items: center;
justify-content: center;
}
배경색 검정색이지만 opacity:0.3으로
position:fixed, top:0, bottom:0, left:0, right:0으로 하면
화면 전체 뒤 덮음
그리고 display:flex, align-items:center, justify-content:center을 줘서
popup-container 속 진짜 popup창이 화면 중앙에 위치하도록
popup창 스타일까지 끝나면 popup container는 display:none으로 바꿔줘야한다!
8. popup
.popup {
background: #2980b9;
box-shadow: 0 15px 10px 3px rgba(0, 0, 0, 0.1);
padding: 20px;
border-radius: 5px;
text-align: center;
}
배경색, 박스 쉐도우 넣어주고
padding 넣어서 box 크게 만들고
border-radius로 모서리를 약간 둥글게
text-align:center해서 버튼도 중앙에 배치
9. popup button
.popup button {
cursor: pointer;
background: #fff;
color: #2980b9;
margin-top: 20px;
padding: 12px 20px;
border: 0;
font-size: 16px;
}
.popup button:active {
transform: scale(0.98);
}
.popup button:focus {
outline: 0;
}
사용자가 버튼을 누르는 순간 작아졌다가 다시 커지는 효과주고 싶을 때는
:active라는 pseudo selector를 써서
transform:scale(0.98)을 주면 된다.
그러면 버튼을 누르는 순간 작아지는데 그 상태가 유지되는게 아니라 다시 커짐
(그래서 실제 버튼 누른 것 같은 느낌적 느낌적 느낌을 주는)
그리고 버튼을 누르면 button이 focused된 상태 아니겠음?
(마치 input이나 textarea 같은 곳에 키보드로 입력하려고 focus한 것처럼)
그때 못생긴 outline이 버튼에도 생긴다(이미지 참고)
focus된 상태에서 저 검정색 테두리 없애고 싶다면 당연히
:focus peudo selector 이용해서 outline:0을 주면 된다.
이제 pop창 다 꾸몄으니
popup-container를 display:none으로 바꿔서
일단 사라지게 만들고.
이미 입력한 단어를 다시 입력하는 경우 화면 아래에서 등장할
notification을 꾸며본다!
10. notification-container
.notification-container {
background-color: rgba(0, 0, 0, 0.3);
padding: 15px 20px;
position: absolute;
bottom: -50px;
transition: transform 0.3s ease-in-out;
}
.notification-container p {
margin: 0;
}
아예 화면 아래로 사라지게
.notification-container.show {
transform: translateY(-50px);
}
javascript에 의해 동적으로 show라는 클래스가 추가되면 화면에 나타나게
(근데 부드럽게 나타나게 하려고 위해 transition 효과를 줬다.)
'Mini Projects' 카테고리의 다른 글
Hangman (5) - displayWord() (0) | 2020.07.20 |
---|---|
Hangman (4) - keydown event listener (0) | 2020.07.20 |
Hangman (2) - html (0) | 2020.07.19 |
Hangman (1) - Draw Hangman with SVG (0) | 2020.07.19 |
Modal 복습 (0) | 2020.07.18 |