Skip to content
50 changes: 4 additions & 46 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,50 +1,8 @@
# 🐼 판다마켓 프로젝트
# 스프린트 미션 1~2

> _이 저장소는 판다마켓 프로젝트의 프론트엔드 코드를 관리하는 곳입니다. 프로젝트를 클론하여 개발 환경을 설정하고, 각 브랜치에서 해당 스프린트 미션을 수행해 주세요!_ 🛠️
> 스프린트 미션 1~2 작업물입니다.

## 소개

안녕하세요! 판다마켓 프로젝트에 오신 것을 환영합니다! 🥳
판다마켓은 따뜻한 중고거래를 위한 커뮤니티 플랫폼이에요. 여러분은 이곳에서 상품을 등록하고, 다른 사용자들과 소통하며, 자유롭게 이야기를 나눌 수 있어요. 매주 스프린트 미션을 통해 기능을 하나씩 만들어 가며 성장해 나가는 여정을 함께해요. 🚀

![PandaMarket](https://github.com/user-attachments/assets/3784b99f-73c9-4349-a9a9-92b2a7563574)
_위 이미지는 판다마켓의 대표 이미지입니다._ 📸

## 스프린트 미션이란? 🤔

스프린트 미션은 **하나의 개인 프로젝트를 길게 진행하면서, 그 과정에서 주기적으로 피드백을 받을 수 있는 시스템**이에요. 각 스프린트마다 배운 이론을 적용해 보고, **멘토님께 코드 리뷰를 받아가며 실력을 쑥쑥 키워갈 수 있는 중요한 개인 과제**랍니다. 💪

## 주요 기능 ✨

1. **상품 등록**: 내가 가진 물건을 올리고, 사진과 설명을 추가해 직접 판매할 수 있어요!
2. **문의 댓글**: 상품에 대한 궁금한 점이나 의견을 자유롭게 남길 수 있답니다. 📝
3. **자유게시판**: 다양한 주제로 친구들과 이야기를 나누고, 정보를 공유할 수 있는 공간이에요! 🗣️

## 프로젝트 브랜치 구조 🏗️

프로젝트는 단계별로 나뉘어 있고, 각 스프린트 미션에 맞는 브랜치가 있어요. 각 브랜치를 통해 체계적으로 개발하며 학습할 수 있어요. 🎯

### 브랜치 설명

1. **basic (part1): 스프린트 미션 1 ~ 3 FE 요구사항**

- 기본적인 웹 애플리케이션 기능 구현을 위한 초기 브랜치입니다. HTML, CSS, JavaScript 등을 사용해 기본을 다집니다.
- **스프린트 미션 1부터 4까지**의 프론트엔드 내용을 포함하고 있어요.

2. **react (part2): 스프린트 미션 5 ~ 6 FE 요구사항**

- React 라이브러리를 사용해 프론트엔드 기능을 구현하는 브랜치입니다. 컴포넌트 기반 아키텍처와 상태 관리를 배웁니다.
- **스프린트 미션 5부터 6까지, 그 이후**의 프론트엔드 내용을 포함하고 있어요.
- 만약 스프린트 미션 9부터 프론트엔드 코드를 Next가 아닌 React로 구현하고 싶다면 react 브랜치를 사용해요.

3. **next (part3,4): 스프린트 미션 7 FE 요구사항~**

- Next.js를 사용해 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG) 등 고급 기능을 구현합니다.
- **스프린트 미션 7부터** 시작하는 프론트엔드 내용을 포함하고 있어요.
- 만약 스프린트 미션 8부터 프론트엔드 코드를 React가 아닌 Next로 구현하고 싶다면 next 브랜치를 사용해요.

> _스프린트 미션 내 백엔드 요구사항은 [백엔드 레포지토리](https://github.com/codeit-sprint-fullstack/11-sprint-mission-be)의 브랜치에서 관리해주세요_

---

본 프로젝트는 [코드잇](https://www.codeit.kr)의 소유이며, 교육 목적으로만 사용됩니다. © 2026 Codeit. All rights reserved.
랜딩페이지와 로그인 회원가입 페이지까지 작성되어있습니다.
작업한 페이지 주소 : https://mission-panda-page.netlify.app
214 changes: 214 additions & 0 deletions css/auth.css
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

전반적으로 엘리먼트의 크기를 고정값으로 설정하고 있는데, 반응형으로 작업해두는게 좋습니다.

예를들어 아래와 같이 폼 input을 고정크기인

.form-input {
  width: 40rem;
}

위와 같이 처리하고 있는데, 이렇게 고정값을 주면 작은 화면에서 깨집니다. 유연하게 아래와 같이 처리하면 더 좋습니다.

.form-input {
  max-width: 40rem;
  width: 100%;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
/*로그인/회원가입 페이지 CSS*/
:root {
--brand-blue: #3692ff;
--Brand-blue: #3182f6;

--Cool-Gray-50: #f9fafb;
--Cool-Gray-100: #f3f4f6;
--Cool-Gray-400: #9ca3af;
--Cool-Gray-600: #4b5563;
--Cool-Gray-800: #1f2937;

--Primary-100: #3692ff;

--Secondary-400: #9ca3af;
--Secondary-800: #1f2937;
}
Comment on lines +2 to +16
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

같은 이름인데 대소문자가 다르고 값도 다릅니다(#3692ff vs #3182f6).
CSS 변수도 일관된 컨벤션(모두 소문자 kebab-case)으로 처리하는게 좋을것 같습니다.


* {
box-sizing: border-box;
text-decoration: none;
}
input:focus {
border: 1px solid #3692ff;
}
.auth-page {
max-width: 40rem;
display: flex;
margin: 14.4rem auto 17.8rem;
justify-content: center;
align-items: center;
flex-direction: column;
gap: 2.5rem;
flex-shrink: 0;
}

/*#region header 부분 스타일*/
.brand-logo {
display: inline-flex;
justify-content: center;
align-items: flex-end;
gap: 1.39rem;
width: 24.75rem;
height: 8.25rem;
}
.brand-logo img {
width: 6.47056rem;
height: 6.4925rem;

margin: 0.81rem 0 0.95rem 0;
}
.brand-name {
color: var(--brand-blue);
font-family: "ROKAF Sans";
font-size: 4.1465rem;
font-style: normal;
font-weight: 700;
line-height: normal;

padding: 1.5em 0.26rem 1.13rem;
}
/*#endregion*/

/*#region 이메일,비밀번호 입력 부분 스타일*/
.auth-form-container {
display: flex;
flex-direction: column;
gap: 1.5rem;
}

.form-group {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 1rem;
}

.form-label {
color: var(--Secondary-800);

/* pretendard/2lg-18px-bold */
font-family: Pretendard;
font-size: 1.125rem;
font-style: normal;
font-weight: 700;
line-height: 1.625rem; /* 144.444% */
}
.form-input {
width: 40rem;
height: 3.5rem;
padding: 1rem 1.5rem;
gap: 0.625rem;

color: var(--Secondary-400);

/* pretendard/lg-16px-regular */
font-family: Pretendard;
font-size: 1rem;
font-style: normal;
font-weight: 400;
line-height: 1.625rem; /* 162.5% */

flex: 1 0 0;

border-radius: 0.75rem;
background: var(--Cool-Gray-100);
border: none;
outline: none;
}
.form-input-pwd {
padding-right: 3.5rem;
}
.password-wrapper {
position: relative;
top: 0;
left: 0;
}
.password-wrapper img {
position: absolute;
right: 3%;
top: 30%;
}
/*#endregion*/

/*#region 로그인버튼 스타일*/
.login-submit {
display: flex;
width: 40rem;
height: 3.5rem;
padding: 1rem 7.75rem;
justify-content: center;
align-items: center;
gap: 0.625rem;

border: none;
cursor: pointer;
border-radius: 2.5rem;
background: var(--Secondary-400);

color: var(--Cool-Gray-100);
text-align: center;

/* pretendard/xl-20px-semibold */
font-family: Pretendard;
font-size: 1.25rem;
font-style: normal;
font-weight: 600;
line-height: 2rem; /* 160% */
}
/*#endregion*/

/*#region 간편로그인 부분 스타일*/
.social-login {
display: flex;
width: 40rem;
height: 4.625rem;
padding: 1rem 1.4375rem;
justify-content: space-between;
align-items: center;
gap: 0.625rem;

border-radius: 0.5rem;
background: #e6f2ff;

color: var(--Secondary-800);

/* pretendard/lg-16px-medium */
font-family: Pretendard;
font-size: 1rem;
font-style: normal;
font-weight: 500;
line-height: 1.625rem; /* 162.5% */
}

.social-link {
display: flex;
align-items: flex-start;
gap: 1rem;
}

.social-link img {
width: 2.625rem;
height: 2.625rem;
}
/*#endregion*/

/*#region 하단 로그인/가입 링크로 연결 부분*/
.auth-helper-link {
text-align: center;
color: var(--Secondary-800);

/* pretendard/md-14px-medium */
font-family: Pretendard;
font-size: 0.875rem;
font-style: normal;
font-weight: 500;
line-height: 1.5rem; /* 171.429% */
}
.auth-helper-link a {
text-decoration: underline;

color: var(--Primary-100);
font-family: Pretendard;
font-size: 0.875rem;
font-style: normal;
font-weight: 500;
line-height: normal;
text-decoration-line: underline;
text-decoration-style: solid;
text-decoration-skip-ink: none;
text-decoration-thickness: auto;
text-underline-offset: auto;
text-underline-position: from-font;
}
/*#endregion */
129 changes: 129 additions & 0 deletions css/reset.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/

html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
body {
line-height: 1;
}
ol,
ul {
list-style: none;
}
blockquote,
q {
quotes: none;
}
blockquote:before,
blockquote:after,
q:before,
q:after {
content: "";
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
Loading