diff --git a/README.md b/README.md
new file mode 100644
index 00000000..df14cfd4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,45 @@
+# sprint 1 미션
+## 내용
+랜딩 페이지 구현
+[Sprint 1 미션 PR](https://github.com/codeit-bootcamp-frontend/13-Sprint-Mission/pull/23)
+
+## 요구사항
+### 기본
+- 랜딩 페이지의 url path는 루트('/')로 설정합니다.
+- title은 “판다마켓”으로 설정해 주세요.
+- 화면의 너비가 1920px 이상이면 하늘색 배경색은 너비를 꽉 채우도록 채워지고, 내부 요소들의 위치는 고정되고, 여백만 커지도록 해주세요.
+- 화면의 너비가 1920px 보다 작아질 때, “판다마켓” 로고의 왼쪽 여백 200px“로그인" 버튼의 오른쪽 여백 200px이 유지되고, 화면의 너비가 작아질수록 두 요소간 거리가 가까워지도록 해주세요.
+- 클릭으로 기능이 동작해야 하는 경우, 사용자가 클릭할 수 있는 요소임을 알 수 있도록 cursor: pointer를 설정해 주세요.
+- "판다마켓" 클릭 시 루트 페이지(‘/’)로 이동시켜주세요.
+- "구경하러 가기" 클릭 시 (“/items”)페이지로 이동시켜주세요.(빈 페이지)
+- "Privacy Policy", "FAQ"는 클릭 시 각각 Privacy 페이지('/privacy'), FAQ 페이지('/faq')로 이동합니다.(모두 빈 페이지)
+- 페이스북, 트위터, 유튜브, 인스타그램 아이콘을 클릭 시 각각의 홈페이지로 새로운 창이 열리면서 이동합니다.
+
+### 심화
+- [ ] 사용자의 브라우저가 크고 작아짐에 따라 페이지의 요소간 간격, 요소의 크기, font-size 등 모든 크기와 관련된 값이 크고 작아지도록 설정해 보세요.(설정값은 자유입니다)
+
+## 구현 내용
+https://github.com/user-attachments/assets/d220c08b-83d8-4d2e-a589-b85a3a8590fc
+
+화면 녹화 특성 상 cursor: pointer;는 안 보임!
+
+# sprint 2 미션
+## 내용
+로그인 및 회원가입 페이지 구현
+[Sprint 2 미션 PR](https://github.com/codeit-bootcamp-frontend/13-Sprint-Mission/pull/38)
+
+### 요구사항
+### 기본
+- "판다마켓" 로고 클릭 시 루트 페이지(“/”)로 이동합니다.
+- 로그인 페이지, 회원가입 페이지 모두 로고 위 상단 여백이 동일합니다.
+- input 요소에 focus in 일 때, 테두리 색상은 #3692FF입니다.
+- input 요소에 focus out 일 때, 테두리는 없습니다.
+- SNS 아이콘들은 클릭시 각각 실제 서비스 홈페이지로 이동합니다.
+- "회원가입”버튼 클릭 시 “/signup” 페이지로 이동합니다.
+- 로그인”버튼 클릭 시 “/login” 페이지로 이동합니다.
+
+### 심화
+- 비밀번호 input 요소 위에 비밀번호를 확인할 수 있는 아이콘을 추가해 주세요.
+
+### 구현 내용
+https://github.com/user-attachments/assets/7027bb8a-4f37-4a0d-af8a-0e532979d1fb
diff --git a/index.html b/index.html
index f964a822..0ce30ebb 100644
--- a/index.html
+++ b/index.html
@@ -47,10 +47,10 @@
Hot item
-
+
인기 상품을
확인해 보세요
-
+
가장 HOT한 중고거래 물품을
판다 마켓에서 확인해 보세요
@@ -64,10 +64,10 @@
Search
-
+
구매를 원하는
상품을 검색하세요
-
+
구매하고 싶은 물품은 검색해서
쉽게 찾아보세요
@@ -87,10 +87,10 @@
Register
-
+
판매를 원하는
상품을 등록하세요
-
+
어떤 물건이든 판매하고 싶은 상품을
쉽게 등록하세요
diff --git a/src/assets/icons/google_icon.png b/src/assets/icons/google_icon.png
deleted file mode 100644
index 63a81231..00000000
Binary files a/src/assets/icons/google_icon.png and /dev/null differ
diff --git a/src/assets/icons/google_icon.svg b/src/assets/icons/google_icon.svg
new file mode 100644
index 00000000..337f73e4
--- /dev/null
+++ b/src/assets/icons/google_icon.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/icons/kakaotalk_icon.png b/src/assets/icons/kakaotalk_icon.png
deleted file mode 100644
index 8c25d9f9..00000000
Binary files a/src/assets/icons/kakaotalk_icon.png and /dev/null differ
diff --git a/src/assets/icons/kakaotalk_icon.svg b/src/assets/icons/kakaotalk_icon.svg
new file mode 100644
index 00000000..46853fcf
--- /dev/null
+++ b/src/assets/icons/kakaotalk_icon.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/assets/icons/temp b/src/assets/icons/temp
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/pages/login.html b/src/pages/login.html
index 7dbaf68f..9d658c7e 100644
--- a/src/pages/login.html
+++ b/src/pages/login.html
@@ -32,10 +32,10 @@
간편 로그인하기
diff --git a/src/pages/signup.html b/src/pages/signup.html
index 289c1d37..77933252 100644
--- a/src/pages/signup.html
+++ b/src/pages/signup.html
@@ -43,10 +43,10 @@
간편 로그인하기
diff --git a/src/scripts/formUtils.js b/src/scripts/formUtils.js
new file mode 100644
index 00000000..24f2ba24
--- /dev/null
+++ b/src/scripts/formUtils.js
@@ -0,0 +1,56 @@
+const visibilityConfig = {
+ password: {
+ type: "text",
+ src: "/src/assets/icons/visibility_off_btn.svg",
+ alt: "비밀번호 숨기기",
+ },
+ text: {
+ type: "password",
+ src: "/src/assets/icons/visibility_on_btn.svg",
+ alt: "비밀번호 보기",
+ },
+};
+
+export function setVisibilityToggle(inputWrapperSelector) {
+ const inputWrappers = document.querySelectorAll(inputWrapperSelector);
+
+ inputWrappers.forEach((wrapper) => {
+ wrapper.addEventListener("click", (event) => {
+ const clickedElement = event.target;
+
+ if (clickedElement.classList.contains("input-icon")) {
+ const passwordInput = wrapper.querySelector("input");
+ const toggleButton = clickedElement;
+
+ const nextState = passwordInput.type === "password" ? visibilityConfig["password"] : visibilityConfig["text"];
+
+ passwordInput.type = nextState.type;
+ toggleButton.src = nextState.src;
+ toggleButton.alt = nextState.alt;
+ }
+ });
+ });
+}
+
+export function setButtonDisable(parent, buttonClass) {
+ const button = parent.querySelector(buttonClass);
+
+ // 초기 상태 및 입력값 검증 함수
+ function validateInputs() {
+ const inputs = parent.querySelectorAll("input");
+ const allFilled = Array.from(inputs).every(input => input.value.trim() !== "");
+ button.disabled = !allFilled;
+ }
+
+ /*
+ 초기 상태에 button을 disabled로 설정하였으나
+ 안전성과 일관성을 위해 호출
+ */
+ validateInputs();
+
+ parent.addEventListener("input", (event) => {
+ if (event.target.tagName === "INPUT") {
+ validateInputs();
+ }
+ });
+ }
\ No newline at end of file
diff --git a/src/scripts/global.js b/src/scripts/global.js
deleted file mode 100644
index 4c2c195d..00000000
--- a/src/scripts/global.js
+++ /dev/null
@@ -1,49 +0,0 @@
-export function setVisibilityToggle(inputWrapperSelector) {
- const inputWrapperList = document.querySelectorAll(inputWrapperSelector);
-
- inputWrapperList.forEach((wrapper) => {
- wrapper.addEventListener("click", event => {
- const target = event.target;
- if(target.classList.contains("input-icon")) {
- const input = wrapper.querySelector("input");
- const icon = target;
-
- if (input.type === "password")
- {
- input.type = "text";
- icon.src = "/src/assets/icons/visibility_off_btn.svg";
- icon.alt = "비밀번호 숨기기";
- }
- else
- {
- input.type = "password";
- icon.src = "/src/assets/icons/visibility_on_btn.svg";
- icon.alt = "비밀번호 보기";
- }
- }
- })
- })
-}
-
-export function setButtonDisable(parent, buttonClass) {
- const button = parent.querySelector(buttonClass);
-
- // 초기 상태 및 입력값 검증 함수
- function validateInputs() {
- const inputs = parent.querySelectorAll("input");
- const allFilled = Array.from(inputs).every(input => input.value.trim() !== "");
- button.disabled = !allFilled;
- }
-
- /*
- 초기 상태에 button을 disabled로 설정하였으나
- 안전성과 일관성을 위해 호출
- */
- validateInputs();
-
- parent.addEventListener("input", (event) => {
- if (event.target.tagName === "INPUT") {
- validateInputs();
- }
- });
- }
\ No newline at end of file
diff --git a/src/scripts/pages/login.js b/src/scripts/pages/login.js
index c66515e7..c8d99cfc 100644
--- a/src/scripts/pages/login.js
+++ b/src/scripts/pages/login.js
@@ -1,4 +1,4 @@
-import { setVisibilityToggle, setButtonDisable } from "/src/scripts/global.js";
+import { setVisibilityToggle, setButtonDisable } from "/src/scripts/formUtils.js";
setVisibilityToggle(".input-wrapper");
diff --git a/src/scripts/pages/signup.js b/src/scripts/pages/signup.js
index c66515e7..c8d99cfc 100644
--- a/src/scripts/pages/signup.js
+++ b/src/scripts/pages/signup.js
@@ -1,4 +1,4 @@
-import { setVisibilityToggle, setButtonDisable } from "/src/scripts/global.js";
+import { setVisibilityToggle, setButtonDisable } from "/src/scripts/formUtils.js";
setVisibilityToggle(".input-wrapper");
diff --git a/src/styles/index.css b/src/styles/index.css
index c679753d..34efeb3f 100644
--- a/src/styles/index.css
+++ b/src/styles/index.css
@@ -41,7 +41,6 @@ header {
display: flex;
flex-direction: column;
gap: 32px;
- width: 357px;
height: 260px;
}
@@ -76,7 +75,6 @@ header {
align-items: center;
padding: 0 24px;
gap: 64px;
- height: 444px;
border-radius: 12px;
background-color: #FCFCFC;
}
@@ -92,19 +90,19 @@ header {
.main-content-right-text {
display: flex;
flex-direction: column;
- width: 350px;
gap: 12px;
align-items: flex-start;
text-align: left;
+ padding-right: 72px;
}
.main-content-left-text {
display: flex;
flex-direction: column;
- width: 350px;
gap: 12px;
align-items: flex-end;
text-align: right;
+ padding-left: 72px;
}
.main-content-text-header {
@@ -166,7 +164,9 @@ footer {
.footer-content {
display: flex;
align-items: center;
+ flex-wrap: wrap-reverse;
width: 1120px;
+ gap: 60px;
justify-content: space-between;
}
@@ -193,7 +193,207 @@ footer {
gap: 12px;
}
-.social-network-icons li {
+.social-network-icons img {
width: 20px;
- height: 20px;
+}
+
+@media (max-width: 1199px) {
+ .header-content {
+ margin: 0 24px;
+ }
+
+ .main-title {
+ height: auto;
+ padding-top: 84px;
+ }
+
+ .main-title-content {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ align-items: center;
+ }
+
+ .main-title-content-left {
+ align-items: center;
+ gap: 24px;
+ }
+
+ .main-title-h1 {
+ text-align: center;
+ width: auto;
+ }
+
+ .main-title-h1 br {
+ display: none;
+ }
+
+ .main-block {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: auto;
+ padding: 24px 24px;
+ }
+
+ .main-block:nth-of-type(2n) .main-content {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 24px;
+ height: auto;
+ padding: 0px 0px;
+ background-color: white;
+ }
+
+ .main-block:nth-of-type(2n + 1) .main-content {
+ display: flex;
+ flex-direction: column-reverse;
+ align-items: flex-end;
+ gap: 24px;
+ height: auto;
+ padding: 0px 0px;
+ background-color: white;
+ }
+
+ .main-content-picture {
+ width: auto;
+ height: auto;
+ }
+
+ .main-content-picture img {
+ border-radius: 14px;
+ }
+
+ .main-content-text-title {
+ font-size: 32px;
+ font-weight: 700;
+ line-height: 42px;
+ }
+
+ .main-content-text-title br {
+ display: none;
+ }
+
+ .main-bottom {
+ height: auto;
+ padding-top: 200px;
+ }
+
+ .main-bottom-content {
+ display: flex;
+ flex-direction: column;
+ gap: 200px;
+ align-items: center;
+ }
+
+ .main-bottom-content-left {
+ text-align: center;
+ }
+
+ .main-bottom-content-right {
+ width: auto;
+ height: auto;
+ }
+
+ .footer-content {
+ width: 536px;
+ }
+}
+
+@media (max-width: 767px) {
+ .header-content {
+ margin: 0 16px;
+ }
+
+ .main-title {
+ height: auto;
+ padding-top: 48px;
+ }
+
+ .main-title-content {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ }
+
+ .main-title-content-left {
+ gap: 18px;
+ }
+
+ .main-title-h1 {
+ font-size: 32px;
+ line-height: 44px;
+ }
+
+ .main-title-h1 br {
+ display: block;
+ }
+
+ .visit-button {
+ padding: 12px 72px;
+ font-size: 18px;
+ line-height: 26px;
+ }
+
+ .main-block {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 20px 15px;
+ height: auto;
+ }
+
+ .main-block:nth-of-type(2n) .main-content {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 24px;
+ height: auto;
+ padding: 0px 0px;
+ background-color: white;
+ }
+
+ .main-block:nth-of-type(2n + 1) .main-content {
+ display: flex;
+ flex-direction: column-reverse;
+ align-items: flex-end;
+ gap: 24px;
+ height: auto;
+ padding: 0px 0px;
+ background-color: white;
+ }
+
+ .main-content-picture {
+ width: auto;
+ height: auto;
+ }
+
+ .main-content-picture img {
+ border-radius: 7px;
+ }
+
+ .main-content-text-title {
+ font-size: 24px;
+ font-weight: 700;
+ line-height: 32px;
+ }
+
+ .main-content-text-title br {
+ display: none;
+ }
+
+ .main-bottom-content {
+ gap: 100px;
+ }
+
+ .main-bottom-content-left {
+ font-size: 32px;
+ font-weight: 700;
+ line-height: 44px;
+ }
+
+ .codeit-logo {
+ flex: 1 1 100%;
+ }
}
\ No newline at end of file
diff --git a/src/styles/pages/login.css b/src/styles/pages/login.css
index c84569d5..25b85820 100644
--- a/src/styles/pages/login.css
+++ b/src/styles/pages/login.css
@@ -133,4 +133,10 @@ main {
line-height: 17px;
text-decoration: underline;
color: #3692FF;
+}
+
+@media (max-width: 767px) {
+ body {
+ padding: 16px;
+ }
}
\ No newline at end of file
diff --git a/src/styles/pages/signup.css b/src/styles/pages/signup.css
index a0ddd46a..c8824938 100644
--- a/src/styles/pages/signup.css
+++ b/src/styles/pages/signup.css
@@ -2,7 +2,8 @@ body {
display: flex;
align-items: center;
justify-content: center;
- height: 100vh;
+ min-height: 100vh;
+ padding: 40px;
}
main {
@@ -133,4 +134,10 @@ main {
line-height: 17px;
text-decoration: underline;
color: #3692FF;
+}
+
+@media (max-width: 767px) {
+ body {
+ padding: 40px 16px;
+ }
}
\ No newline at end of file