
Github 저장소 : 여기를 클릭해주세요
HTML, CSS, SCSSHTML과 CSS에 대한 기본적인 내용을 간단하게 Test 해보기 위함으로 기본적인 HTML, CSS만 사용하였습니다.
1-1-1 HTML 전체 코드)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Overwatch 캐릭터 선택 페이지</title>
<link
href="https://cdn.jsdelivr.net/npm/reset-css@5.0.2/reset.min.css"
rel=" stylesheet"
/>
<link href="/css/overwatch.css" rel="stylesheet" />
</head>
<body>
<div class="container">
<div class="heroes">
<!--캐릭터 리스트가 32개라 코드 가독성이 떨어져 한개로 대체합니다.-->
<div class="hero">
<div class="images"></div>
</div>
...생략...
</div>
...생략...
</div>
</body>
</html>
1-1-2 캐릭터 코드 - HTML)
<div class="container">
<div class="heroes">
<!--캐릭터 리스트가 32개라 코드 가독성이 떨어져 한개로 대체합니다.-->
<div class="hero">
<div class="images"></div>
</div>
...생략...
</div>
...생략...
</div>
1-1-3 React 전체 코드)
import React from 'react';
import './overwatch.scss';
const OverwatchCharacterSelection = () => {
return (
<div className="container">
<div className="heroes">
{[...Array(30)].map((_, index) => (
<div className="hero" key={index}>
<div className="images"></div>
</div>
))}
</div>
<div className="logo">
<img
src="https://raw.githubusercontent.com/ParkYoungWoong/overwatch-hero-selector-vanilla/master/images/logo_overwatch.png"
alt="오버워치 로고"
/>
</div>
</div>
);
}
export default OverwatchCharacterSelection;
1-1-4 캐릭터 코드 - React)
...생략...
<div className="heroes">
{[...Array(30)].map((_, index) => (
<div className="hero" key={index}>
<div className="images"></div>
</div>
))}
</div>
1-1-5 SCSS 전체 코드)
.container {
height: 100vh;
padding: 50px 0;
background-image: url("https://raw.githubusercontent.com/ParkYoungWoong/overwatch-hero-selector-vanilla/master/images/bg.jpg");
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
.heroes {
display: flex;
justify-content: center;
flex-wrap: wrap;
max-width: 700px;
margin: 0 auto;
padding: 40px 20px;
.hero {
width: 80px;
height: 84px;
margin: 4px;
background-color: #555;
border: 3px solid white;
border-radius: 10px;
transform: skewX(-14deg);
overflow: hidden;
transition: transform 0.1s, background-color 0.6s;
box-sizing: border-box;
.images {
width: 140%;
height: 100%;
transform: skewX(14deg) translateX(-14px);
background-position: center;
background-repeat: no-repeat;
background-size: 90px;
}
&:hover {
background-color: #ff9c00;
transform: skewX(-14deg) scale(1.3);
z-index: 1;
cursor: pointer;
}
@for $i from 1 through 32 {
&:nth-child(#{$i}) {
.images {
background-image: url("https://raw.githubusercontent.com/ParkYoungWoong/overwatch-hero-selector-vanilla/master/images/hero#{$i}.png");
}
}
}
}
}
.logo {
max-width: 300px;
margin: 0 auto;
img {
width: 100%;
}
}
}
영상 강의를 참조해서 공부하고 만들어 보는것도 좋았지만, CSS가 아직까지 어려웠던 점이 있었던거 같아요 이번 강의를 통해, 모르고 넘어갔던 부분이던지, 아예 몰랐던 부분도 있었기에 확실히 CSS를 공부하면서 프로젝트를 만드는데 큰 도움이 되었던거 같습니다. 특히 여기서 한가지 더 좋았던 점이 있었다면? React로 프로젝트를 하다보니 CSS를 쓰지않고 SCSS 위주로만 썼는데 일반 HTML에서도 SCSS를 CSS에 덮어씌워서 사용해봤는데, 확실히 SCSS의 필요성이 대두되는 거 같아서 좋았습니다:)
아쉬웠던 점도 있었다면 React가 아닌 HTML로 작업하다보니 코드의 가독성이 떨어지고 CSS 내에서도 32개의 아이템 이미지도 반복적으로 처리할 수 있는 반복문 로직이 없어 스타일링을 수정하거나 nth:child로 일일이 모두 추가해줘야하는 불편함이 있었다는 점이 개발자로서 너무 아쉬웠습니다.
어쩌면 아쉬웠던 점이 장점이 될수도 있겠다는 생각이 들었습니다. 이전에 멘토님에게 받았던 코드리뷰중에 nth:child가 왜 유지보수에 안좋은지를 다시한번 느낄 수 있었고 개인 플젝 뿐만 아니라 현업에서도 코드리뷰 문화를 지향하는지 마음에 상기 시킬 수 있어서 감사하다는 생각이 들었습니다.