diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a841f1e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,45 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+# Dependencies
+node_modules/
+
+# Build output
+dist
+dist-ssr
+build
+
+# React / Vite cache
+.vite
+.turbo
+
+# Env files
+.env
+.env.*
+!.env.example
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+# Testing
+coverage
+
+# TypeScript
+*.tsbuildinfo
+
+# Others
+*.local
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..ac10312
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,7 @@
+{
+ "semi": true,
+ "singleQuote": true,
+ "printWidth": 80,
+ "tabWidth": 2,
+ "trailingComma": "all"
+}
diff --git a/README.md b/README.md
index 70fa983..eb075c6 100644
--- a/README.md
+++ b/README.md
@@ -2,49 +2,17 @@
> Netlify ์ฃผ์ - https://ys-sprint-pandamarket.netlify.app/ ๐ ๏ธ
-## ์๊ฐ
-
-์๋
ํ์ธ์! ํ๋ค๋ง์ผ ํ๋ก์ ํธ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค! ๐ฅณ
-ํ๋ค๋ง์ผ์ ๋ฐ๋ปํ ์ค๊ณ ๊ฑฐ๋๋ฅผ ์ํ ์ปค๋ฎค๋ํฐ ํ๋ซํผ์ด์์. ์ฌ๋ฌ๋ถ์ ์ด๊ณณ์์ ์ํ์ ๋ฑ๋กํ๊ณ , ๋ค๋ฅธ ์ฌ์ฉ์๋ค๊ณผ ์ํตํ๋ฉฐ, ์์ ๋กญ๊ฒ ์ด์ผ๊ธฐ๋ฅผ ๋๋ ์ ์์ด์. ๋งค์ฃผ ์คํ๋ฆฐํธ ๋ฏธ์
์ ํตํด ๊ธฐ๋ฅ์ ํ๋์ฉ ๋ง๋ค์ด ๊ฐ๋ฉฐ ์ฑ์ฅํด ๋๊ฐ๋ ์ฌ์ ์ ํจ๊ปํด์. ๐
-
-
-_์ ์ด๋ฏธ์ง๋ ํ๋ค๋ง์ผ์ ๋ํ ์ด๋ฏธ์ง์
๋๋ค._ ๐ธ
-
-## ์คํ๋ฆฐํธ ๋ฏธ์
์ด๋? ๐ค
-
-์คํ๋ฆฐํธ ๋ฏธ์
์ **ํ๋์ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ๊ธธ๊ฒ ์งํํ๋ฉด์, ๊ทธ ๊ณผ์ ์์ ์ฃผ๊ธฐ์ ์ผ๋ก ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์๋ ์์คํ
**์ด์์. ๊ฐ ์คํ๋ฆฐํธ๋ง๋ค ๋ฐฐ์ด ์ด๋ก ์ ์ ์ฉํด ๋ณด๊ณ , **๋ฉํ ๋๊ป ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์๊ฐ๋ฉฐ ์ค๋ ฅ์ ์ฅ์ฅ ํค์๊ฐ ์ ์๋ ์ค์ํ ๊ฐ์ธ ๊ณผ์ **๋๋๋ค. ๐ช
-
-## ์ฃผ์ ๊ธฐ๋ฅ โจ
-
-1. **์ํ ๋ฑ๋ก**: ๋ด๊ฐ ๊ฐ์ง ๋ฌผ๊ฑด์ ์ฌ๋ฆฌ๊ณ , ์ฌ์ง๊ณผ ์ค๋ช
์ ์ถ๊ฐํด ์ง์ ํ๋งคํ ์ ์์ด์!
-2. **๋ฌธ์ ๋๊ธ**: ์ํ์ ๋ํ ๊ถ๊ธํ ์ ์ด๋ ์๊ฒฌ์ ์์ ๋กญ๊ฒ ๋จ๊ธธ ์ ์๋ต๋๋ค. ๐
-3. **์์ ๊ฒ์ํ**: ๋ค์ํ ์ฃผ์ ๋ก ์น๊ตฌ๋ค๊ณผ ์ด์ผ๊ธฐ๋ฅผ ๋๋๊ณ , ์ ๋ณด๋ฅผ ๊ณต์ ํ ์ ์๋ ๊ณต๊ฐ์ด์์! ๐ฃ๏ธ
-
-## ํ๋ก์ ํธ ๋ธ๋์น ๊ตฌ์กฐ ๐๏ธ
-
-ํ๋ก์ ํธ๋ ๋จ๊ณ๋ณ๋ก ๋๋์ด ์๊ณ , ๊ฐ ์คํ๋ฆฐํธ ๋ฏธ์
์ ๋ง๋ ๋ธ๋์น๊ฐ ์์ด์. ๊ฐ ๋ธ๋์น๋ฅผ ํตํด ์ฒด๊ณ์ ์ผ๋ก ๊ฐ๋ฐํ๋ฉฐ ํ์ตํ ์ ์์ด์. ๐ฏ
-
-### ๋ธ๋์น ์ค๋ช
-
-1. **basic (part1): ์คํ๋ฆฐํธ ๋ฏธ์
1 ~ 4 FE ์๊ตฌ์ฌํญ**
-
- - ๊ธฐ๋ณธ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ธฐ๋ฅ ๊ตฌํ์ ์ํ ์ด๊ธฐ ๋ธ๋์น์
๋๋ค. HTML, CSS, JavaScript ๋ฑ์ ์ฌ์ฉํด ๊ธฐ๋ณธ์ ๋ค์ง๋๋ค.
- - **์คํ๋ฆฐํธ ๋ฏธ์
1๋ถํฐ 4๊น์ง**์ ํ๋ก ํธ์๋ ๋ด์ฉ์ ํฌํจํ๊ณ ์์ด์.
-
-2. **react (part2): ์คํ๋ฆฐํธ ๋ฏธ์
5 ~ 7 FE ์๊ตฌ์ฌํญ**
-
- - React ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ํ๋ก ํธ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ธ๋์น์
๋๋ค. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ์ ์ํ ๊ด๋ฆฌ๋ฅผ ๋ฐฐ์๋๋ค.
- - **์คํ๋ฆฐํธ ๋ฏธ์
5๋ถํฐ 7๊น์ง, ๊ทธ ์ดํ**์ ํ๋ก ํธ์๋ ๋ด์ฉ์ ํฌํจํ๊ณ ์์ด์.
- - ๋ง์ฝ ์คํ๋ฆฐํธ ๋ฏธ์
9๋ถํฐ ํ๋ก ํธ์๋ ์ฝ๋๋ฅผ Next๊ฐ ์๋ React๋ก ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด react ๋ธ๋์น๋ฅผ ์ฌ์ฉํด์.
-
-3. **next (part3,4): ์คํ๋ฆฐํธ ๋ฏธ์
8 FE ์๊ตฌ์ฌํญ~**
-
- - Next.js๋ฅผ ์ฌ์ฉํด ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)๊ณผ ์ ์ ์ฌ์ดํธ ์์ฑ(SSG) ๋ฑ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
- - **์คํ๋ฆฐํธ ๋ฏธ์
8๋ถํฐ** ์์ํ๋ ํ๋ก ํธ์๋ ๋ด์ฉ์ ํฌํจํ๊ณ ์์ด์.
- - ๋ง์ฝ ์คํ๋ฆฐํธ ๋ฏธ์
9๋ถํฐ ํ๋ก ํธ์๋ ์ฝ๋๋ฅผ React๊ฐ ์๋ Next๋ก ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด next ๋ธ๋์น๋ฅผ ์ฌ์ฉํด์.
-
-> _์คํ๋ฆฐํธ ๋ฏธ์
๋ด ๋ฐฑ์๋ ์๊ตฌ์ฌํญ์ [๋ฐฑ์๋ ๋ ํฌ์งํ ๋ฆฌ](https://github.com/codeit-sprint-fullstack/11-sprint-mission-be)์ ๋ธ๋์น์์ ๊ด๋ฆฌํด์ฃผ์ธ์_
-
----
+## ๋ค์ด๋ฐ ๊ท์น
+
+- ์นด๋ฉ ์ผ์ด์ค(camelCase) JS/TS
+- ํ์ค์นผ ์ผ์ด์ค(PascalCase) React ์ปดํฌ๋ํธ/ํด๋์ค
+- ์ค๋ค์ดํฌ ์ผ์ด์ค(snake_case) ํ๊ฒฝ ๋ณ์
+- ์ผ๋ฐฅ ์ผ์ด์ค(kebab-case) CSS, id, ํด๋ ๋ฐ ์ผ๋ฐ ํ์ผ
+
+## ๋ธ๋ผ์ฐ์ ๋ฐ์ํ ์ฌ์ด์ฆ
+- PC: 1200px ์ด์
+- Tablet: 744px ์ด์ ~ 1199px ์ดํ
+- Mobile: 375px ์ด์ ~ 743px ์ดํ
+- 375px ๋ฏธ๋ง ์ฌ์ด์ฆ์ ๋์์ธ์ ๊ณ ๋ คํ์ง ์์ต๋๋ค.
๋ณธ ํ๋ก์ ํธ๋ [์ฝ๋์](https://www.codeit.kr)์ ์์ ์ด๋ฉฐ, ๊ต์ก ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉ๋ฉ๋๋ค. ยฉ 2025 Codeit. All rights reserved.
diff --git a/css/header.css b/css/header.css
index d35ae4c..e729bf3 100644
--- a/css/header.css
+++ b/css/header.css
@@ -38,3 +38,18 @@ header .login {
font-weight: 600;
line-height: 26px; /* 162.5% */
}
+
+@media (max-width: 1199px) {
+ /* tablet ์ฌ์ด์ฆ */
+
+ header {
+ padding: 12px 24px;
+ }
+}
+
+@media screen and (max-width: 743px) {
+ /* mobile ์ฌ์ด์ฆ */
+ header {
+ padding: 12px 16px;
+ }
+}
\ No newline at end of file
diff --git a/css/home.css b/css/home.css
index bb42c54..c7ae134 100644
--- a/css/home.css
+++ b/css/home.css
@@ -16,6 +16,7 @@ main .contents article {
}
main .contents article h1 {
+ width: 295px;
color: var(--Secondary-700);
font-family: Pretendard;
font-size: var(--pTr-40);
@@ -39,8 +40,7 @@ main .contents article a {
line-height: 32px; /* 160% */
}
main .contents img {
- width: 60%;
- max-width: 746px;
+ width: 746px;
height: initial;
}
@@ -131,10 +131,11 @@ footer {
justify-content: space-between;
align-items: flex-start;
gap: 10px;
+ position: relative;
}
footer p,
-footer .footer-center li {
+footer .center li {
color: var(--Secondary-400);
text-align: center;
font-family: Pretendard;
@@ -143,16 +144,16 @@ footer .footer-center li {
font-weight: 400;
line-height: normal;
}
-footer ul.footer-center {
+footer ul.center {
display: flex;
gap: 30px;
}
-footer ul.footer-center li a {
+footer ul.center li a {
color: var(--Secondary-200);
}
-footer ul.footer-icons {
+footer ul.icons {
display: flex;
gap: 12px;
flex-shrink: 0;
@@ -160,7 +161,7 @@ footer ul.footer-icons {
align-items: flex-end;
}
-footer ul.footer-icons li a {
+footer ul.icons li a {
width: 20px;
height: 20px;
display: inline-block;
@@ -185,15 +186,129 @@ li.icon-instargram a {
background: url(/img/sns/ic_instagram.svg);
}
-@media all and (max-width: 1200px) {
- main .contents article,
- main .contents img {
- width: 50%;
+@media (max-width: 1199px) {
+ /* tablet ์ฌ์ด์ฆ */
+ main section.contents {
+ height: fit-content;
+ flex-direction: column;
+ justify-self: center;
+ align-items: center;
+ padding: 84px 0 0 0;
+ gap: 211px;
+ text-align: center;
+ }
+
+ main section.contents img {
+ width: 744px;
+ }
+
+ main section.contents article {
+ gap: 24px;
+ bottom: 0;
+ align-items: center;
+ }
+
+ main section.contents article h1 {
+ width: 100%;
+ }
+
+ section.home {
+ padding: 24px;
+ }
+
+ section.home article {
+ flex-direction: column;
+ gap: 24px;
+ background: none;
+ }
+
+ section.home.search article {
+ flex-direction: column-reverse;
+ }
+
+ section.home article img {
+ width: 100%;
+ height: fit-content;
+ }
+
+ section.home .capter {
+ width: 100%;
+ }
+
+ section.home .capter h2 {
+ font-size: var(--pTr-32);
+ margin: 16px 0 24px 0;
+ }
+
+ section.home .capter p {
+ font-size: var(--pTr-18);
+ }
+
+ main .contents bottom {
+ padding: 201px 0 0 0;
+ gap: 217px;
+ }
+
+ footer {
+ padding: 32px 24px;
+ }
+
+ .br-style {
+ display: none;
+ }
+}
+
+@media screen and (max-width: 743px) {
+ /* mobile ์ฌ์ด์ฆ */
+ main section.contents {
+ padding: 48px 0 0 0;
+ gap: 132px;
+ }
+
+ main section.contents article h1 {
+ width: 240px;
+ font-size: var(--pTr-32);
+ }
+
+ main section.contents article a {
+ width: 240px;
+ padding: 11px;
+ }
+
+ section.home .capter h2 {
+ margin: 8px 0 16px 0;
+ font-size: var(--ptr-24);
+ }
+
+ section.home .capter h4,
+ section.home .capter p {
+ font-size: var(--ptr-16);
+ }
+
+ section .home {
+ padding: 52px 16px;
+ }
+
+ .no-box {
+ background: #fff;
+ height: 59px;
+ }
+
+ main .contents.bottom {
+ padding: 121px 0 0 0;
+ gap: 71px;
+ }
+
+ main section.contents img {
+ width: calc(100% - 32px);
+ }
+
+ footer {
+ padding: 32px 16px;
}
- .home article img {
- width: 50%;
- max-width: 588px;
- height: initial;
+ footer p {
+ position: absolute;
+ bottom: 65px;
}
}
diff --git a/css/login.css b/css/login.css
index 01026b2..b13cea8 100644
--- a/css/login.css
+++ b/css/login.css
@@ -2,12 +2,12 @@ body {
background: #fff;
}
-#wrap.login_wrapper {
+.wrap.login-wrapper {
max-width: 640px;
- margin: 231px auto 284px auto;
+ margin: 60px auto 284px auto;
}
-#wrap.login_wrapper .login_logo {
+.wrap.login-wrapper .login-logo {
width: 100%;
display: flex;
align-items: center;
@@ -15,16 +15,20 @@ body {
margin: 0 0 40px 0;
}
-#wrap.login_wrapper .login_logo img {
+.wrap.login-wrapper .login-logo img {
width: 100%;
max-width: 396px;
}
-.login_wrapper form {
+.login-wrapper form {
display: flex;
flex-direction: column;
}
+form .box {
+ margin: 0 0 24px 0;
+}
+
form label {
color: var(--Secondary-800);
font-family: Pretendard;
@@ -38,11 +42,11 @@ form label {
form input {
width: 640px;
height: 56px;
+ margin: 16px 0 0 0;
padding: 16px 24px;
border-radius: 12px;
background: var(--Secondary-100);
border: 1px solid var(--Secondary-100);
- margin: 0 0 24px 0;
color: var(--Secondary-400);
font-family: Pretendard;
font-size: 1rem;
@@ -58,6 +62,22 @@ form input:focus {
border: 1px solid #3692ff;
}
+form input.input-out:not(:focus) {
+ border: 1px solid var(--error-red);
+}
+
+form .error-text {
+ width: 100%;
+ padding: 8px 16px 0 16px;
+ display: none;
+}
+
+form .error-text.active {
+ width: 100%;
+ padding: 8px 16px 0 16px;
+ display: inline-block;
+}
+
form button {
display: flex;
width: 640px;
@@ -78,35 +98,53 @@ form button {
line-height: 32px;
}
-form button:hover {
+form button.active {
background: var(--Primary-100);
border: 1px solid var(--Primary-100);
}
-form .password_input {
+form button:hover {
+ opacity: 0.9;
+}
+
+form .error-text {
+ color: var(--error-red);
+ font-family: Pretendard;
+ font-size: 15px;
+ font-style: normal;
+ font-weight: 600;
+ line-height: normal;
+}
+
+form .pw-box {
position: relative;
}
-form .password_input .eyes {
+form .pw-box .eyes {
position: absolute;
top: 18px;
right: 24px;
z-index: 1;
}
-form .password_input .eyes:hover {
+form .pw-box .eyes:hover {
cursor: pointer;
}
-form .password_input .eyes .eyes_on {
+form .pw-box .eyes .eyes-icon {
width: 24px;
height: 24px;
display: inline-block;
+ background: url(/img/login/btn_visibility_off.svg) no-repeat;
+ background-size: 100% auto;
+}
+
+form .pw-box .eyes.active .eyes-icon {
background: url(/img/login/btn_visibility_on.svg) no-repeat;
background-size: 100% auto;
}
-.sns_login {
+.sns-login {
display: flex;
justify-content: space-between;
width: 640px;
@@ -120,7 +158,7 @@ form .password_input .eyes .eyes_on {
margin: 24px 0;
}
-.sns_login p {
+.sns-login p {
color: var(--Secondary-800);
font-family: Pretendard;
font-size: 1rem;
@@ -129,13 +167,13 @@ form .password_input .eyes .eyes_on {
line-height: 26px;
}
-.sns_login ul {
+.sns-login ul {
display: flex;
gap: 16px;
}
-.sns_login ul li,
-.sns_login ul li a {
+.sns-login ul li,
+.sns-login ul li a {
width: 42px;
height: 42px;
}
@@ -154,3 +192,34 @@ form .password_input .eyes .eyes_on {
color: var(--Primary-100);
text-decoration: underline;
}
+
+@media (max-width: 1199px) {
+ /* tablet ์ฌ์ด์ฆ */
+ .wrap.login-wrapper {
+ margin: 48px auto 48px auto;
+ }
+}
+
+@media screen and (max-width: 743px) {
+ /* mobile ์ฌ์ด์ฆ */
+ .wrap.login-wrapper {
+ max-width: 343px;
+ margin: 24px auto;
+ }
+
+ .wrap.login-wrapper .login-logo img {
+ max-width: 198px;
+ }
+
+ form input,
+ form button,
+ .sns-login {
+ width: 100%;
+ }
+}
+
+@media screen and (max-width: 375px) {
+ .wrap.login-wrapper {
+ margin: 24px 16px;
+ }
+}
diff --git a/css/reset.css b/css/reset.css
index 1168332..89070ed 100644
--- a/css/reset.css
+++ b/css/reset.css
@@ -13,7 +13,7 @@ body {
background: #f8f8f8;
}
-#wrap {
+.wrap {
width: 100%;
max-width: 1920px;
height: 100%;
@@ -146,8 +146,59 @@ button:hover {
/* px To rem */
--pTr-40: 2.5rem; /* 40px */
+ --pTr-32: 2rem; /* 32px */
--pTr-24: 1.5rem; /* 24px */
--pTr-20: 1.25rem; /* 20px; */
--pTr-18: 1.125rem; /* 18px; */
+ --ptr-16: 1rem; /* 16px */
--pTr-14: 0.875rem; /* 14px */
}
+
+.swal2-container.swal2-backdrop-show {
+ background: rgba(0, 0, 0, 0.7);
+}
+
+.swal2-container .swal2-popup.swal2-modal.swal2-show {
+ width: 100%;
+ max-width: 540px;
+ margin: 0;
+ padding: 108px 28px 28px 28px;
+}
+
+.swal2-container .swal2-content .swal2-html-container {
+ color: var(--Cool-Gray-800, #1f2937);
+ text-align: center;
+ font-family: Pretendard;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: 500;
+ line-height: normal;
+}
+
+.swal2-container .swal2-actions {
+ margin: 47px 0 0 0;
+ justify-content: flex-end;
+}
+
+.swal2-container .swal2-actions .swal2-styled.swal2-confirm {
+ width: 120px;
+ height: 48px;
+ margin: 0;
+ padding: 12px 23px;
+ border-radius: 8px;
+ background: var(--brand-blue, #3692ff);
+ line-height: 24px;
+}
+
+@media screen and (max-width: 743px) {
+ /* mobile ์ฌ์ด์ฆ */
+ .swal2-container .swal2-popup.swal2-modal.swal2-show {
+ max-width: 327px;
+ padding: 81px 23px 23px 23px;
+ }
+
+ .swal2-container .swal2-actions {
+ margin: 49px 0 0 0;
+ justify-content: center;
+ }
+}
diff --git a/img/.DS_Store b/img/.DS_Store
index c611d44..999350c 100644
Binary files a/img/.DS_Store and b/img/.DS_Store differ
diff --git a/img/login/btn_visibility_off.svg b/img/login/btn_visibility_off.svg
new file mode 100644
index 0000000..4b4526d
--- /dev/null
+++ b/img/login/btn_visibility_off.svg
@@ -0,0 +1,10 @@
+
diff --git a/img/login/btn_visibility_on.svg b/img/login/btn_visibility_on.svg
index 4b4526d..35a7530 100644
--- a/img/login/btn_visibility_on.svg
+++ b/img/login/btn_visibility_on.svg
@@ -1,10 +1,3 @@
diff --git a/img/logo/logo_mobile.svg b/img/logo/logo_mobile.svg
new file mode 100644
index 0000000..55a63ef
--- /dev/null
+++ b/img/logo/logo_mobile.svg
@@ -0,0 +1,3 @@
+
diff --git a/index.html b/index.html
index c3b9ac1..58bf043 100644
--- a/index.html
+++ b/index.html
@@ -8,44 +8,65 @@
+
+
+
+
-
+
-
+
-
- ์ผ์์ ๋ชจ๋ ๋ฌผ๊ฑด์
-
- ๊ฑฐ๋ํด ๋ณด์ธ์
-
+ ์ผ์์ ๋ชจ๋ ๋ฌผ๊ฑด์ ๊ฑฐ๋ํด ๋ณด์ธ์
๊ตฌ๊ฒฝํ๋ฌ ๊ฐ๊ธฐ
-
+
-
+
Hot item
์ธ๊ธฐ ์ํ์
-
+
ํ์ธํด ๋ณด์ธ์
@@ -62,7 +83,7 @@
Search
๊ตฌ๋งค๋ฅผ ์ํ๋
-
+
์ํ์ ๊ฒ์ํ์ธ์
@@ -79,7 +100,11 @@
Register
-
ํ๋งค๋ฅผ ์ํ๋
์ํ์ ๋ฑ๋กํ์ธ์
+
+ ํ๋งค๋ฅผ ์ํ๋
+
+ ์ํ์ ๋ฑ๋กํ์ธ์
+
์ด๋ค ๋ฌผ๊ฑด์ด๋ ํ๋งคํ๊ณ ์ถ์ ์ํ์
@@ -97,17 +122,17 @@
ํ๋ค๋ง์ผ ์ค๊ณ ๊ฑฐ๋
-

+