diff --git a/src/assets/backend.png b/src/assets/backend.png
new file mode 100644
index 0000000..295d255
Binary files /dev/null and b/src/assets/backend.png differ
diff --git a/src/assets/big_logo.png b/src/assets/big_logo.png
new file mode 100644
index 0000000..33cd665
Binary files /dev/null and b/src/assets/big_logo.png differ
diff --git a/src/assets/card icon.png b/src/assets/card icon.png
new file mode 100644
index 0000000..8cbca76
Binary files /dev/null and b/src/assets/card icon.png differ
diff --git a/src/assets/carousel 1.png b/src/assets/carousel 1.png
new file mode 100644
index 0000000..67ae234
Binary files /dev/null and b/src/assets/carousel 1.png differ
diff --git a/src/assets/carousel 2.png b/src/assets/carousel 2.png
new file mode 100644
index 0000000..c1a627a
Binary files /dev/null and b/src/assets/carousel 2.png differ
diff --git a/src/assets/carousel 3.png b/src/assets/carousel 3.png
new file mode 100644
index 0000000..aa2f2ff
Binary files /dev/null and b/src/assets/carousel 3.png differ
diff --git a/src/assets/footer icon.png b/src/assets/footer icon.png
new file mode 100644
index 0000000..ff8fe6a
Binary files /dev/null and b/src/assets/footer icon.png differ
diff --git a/src/assets/forntend.png b/src/assets/forntend.png
new file mode 100644
index 0000000..5b392cc
Binary files /dev/null and b/src/assets/forntend.png differ
diff --git a/src/assets/hero banner1.png b/src/assets/hero banner1.png
new file mode 100644
index 0000000..582a257
Binary files /dev/null and b/src/assets/hero banner1.png differ
diff --git a/src/assets/hero banner2.png b/src/assets/hero banner2.png
new file mode 100644
index 0000000..4cf9192
Binary files /dev/null and b/src/assets/hero banner2.png differ
diff --git a/src/assets/hero banner3.png b/src/assets/hero banner3.png
new file mode 100644
index 0000000..588907c
Binary files /dev/null and b/src/assets/hero banner3.png differ
diff --git a/src/assets/logo.png b/src/assets/logo.png
new file mode 100644
index 0000000..f5dcb15
Binary files /dev/null and b/src/assets/logo.png differ
diff --git a/src/assets/open_study.png b/src/assets/open_study.png
new file mode 100644
index 0000000..4654038
Binary files /dev/null and b/src/assets/open_study.png differ
diff --git a/src/assets/private.png b/src/assets/private.png
new file mode 100644
index 0000000..a2216bd
Binary files /dev/null and b/src/assets/private.png differ
diff --git a/src/assets/private_study.png b/src/assets/private_study.png
new file mode 100644
index 0000000..39e54fd
Binary files /dev/null and b/src/assets/private_study.png differ
diff --git a/src/assets/rangking.png b/src/assets/rangking.png
new file mode 100644
index 0000000..8452d7e
Binary files /dev/null and b/src/assets/rangking.png differ
diff --git a/src/components/main/Banner.jsx b/src/components/main/Banner.jsx
new file mode 100644
index 0000000..cc8b65b
--- /dev/null
+++ b/src/components/main/Banner.jsx
@@ -0,0 +1,65 @@
+import styled from "styled-components";
+import bannerIcon1 from "../../assets/hero banner1.png";
+import bannerIcon2 from "../../assets/hero banner2.png";
+import bannerIcon3 from "../../assets/hero banner3.png";
+
+const Banner = () => {
+ return (
+
+
+
+ 이제 혼자
+
가 아닌
+
+
+
+ 퀴즈업
+
+ 과 함께 CS면접 준비하고 취업하자!
+
+
+
+
+ );
+};
+
+const BannerWrapper = styled.div`
+ width: 100%;
+ height: 537px;
+ margin: 31px 0 62px;
+ background-color: #5263ff;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+`;
+
+const BannerContent = styled.div`
+ display: flex;
+ align-items: center;
+`;
+
+const BannerText = styled.span`
+ width: 570px;
+ height: 227px;
+ margin-right: 50px;
+ padding: 0 267px 85.3px 0;
+ font-family: Inter;
+ font-size: 50px;
+ font-weight: 600;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: left;
+ color: #fff;
+`;
+
+const BannerText2 = styled.span`
+ color: #b6ff6d;
+`;
+
+const BannerIcon3 = styled.img`
+ width: 542px;
+ height: 476px;
+`;
+export default Banner;
diff --git a/src/components/main/Description.jsx b/src/components/main/Description.jsx
new file mode 100644
index 0000000..8c2859a
--- /dev/null
+++ b/src/components/main/Description.jsx
@@ -0,0 +1,195 @@
+import styled from "styled-components";
+import LogoImg from "../../assets/big_logo.png";
+import Carousel1 from "../../assets/carousel 1.png";
+import Carousel2 from "../../assets/carousel 2.png";
+import Carousel3 from "../../assets/carousel 3.png";
+
+const Description = () => {
+ return (
+
+
+
+ 퀴즈업
+ CS전공지식 공유 서비스
+
+
+ {/* quiz up 설명 */}
+
+
+ 면접 한방 해결
+ 문제집
+
+
+ 내가 직접 만드는 나만의 CS문제집부터
+
다른 회원들의 다양한 문제집까지
+
+ 쏙쏙 골라 학습할 수 있어요.
+
+
+
+ 인기 만점 BEST
+ 오늘의 랭킹
+
+
+ 오늘 가장 많이 학습한 문제집과
+
스터디방의 BEST 3위를 확인하고
+
직접 학습해여 CS면접에 대비해보세요.
+
+
+
+ 함께라서 든든한
+ 스터디방
+
+
+ 스터디방을 통해 CS지식을 공유하며
+
다양한 관점으로 정답의 폭을 넓히고,
+ 이달의 BEST3인에 도전해보세요.
+
+
+
+
+
+
+ );
+};
+
+const Wrapper = styled.div`
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+`;
+
+const ContentContainer = styled.div`
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-bottom: 20px;
+`;
+
+const LogoIcon = styled.img`
+ width: 144px;
+ height: 145.8px;
+ object-fit: contain;
+ margin-bottom: 20px;
+`;
+
+const LogoText = styled.span`
+ width: 267px;
+ height: 96px;
+ margin-top: 20px;
+ font-family: Inter;
+ font-size: 45px;
+ font-weight: 600;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: center;
+ color: #fff;
+`;
+
+const Text = styled.span`
+ width: 300px;
+ height: 96px;
+ font-family: Inter;
+ font-size: 25px;
+ font-weight: 600;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: center;
+ color: #fff;
+`;
+
+const BoxContainer = styled.div`
+ display: flex;
+ justify-content: center;
+ gap: 20px;
+ margin-bottom: 50px;
+`;
+
+const Box = styled.div`
+ width: 418px;
+ width: 418px;
+ height: 580px;
+ padding: 37px 50px 71px 49px;
+ border-radius: 15px;
+ border: solid 1px #656565;
+ background-color: #24252a;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+`;
+
+const BoxTitle = styled.div`
+ width: 300px;
+ height: 60px;
+ font-family: Inter;
+ font-size: 45px;
+ font-weight: bold;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: center;
+ color: ${(props) => props.color};
+`;
+
+const BoxSubTitle = styled.span`
+ width: 319px;
+ height: 60px;
+ font-family: Inter;
+ font-size: 16px;
+ font-weight: bold;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: center;
+ color: #fff;
+`;
+
+const BoxImg1 = styled.img`
+ width: 261.8px;
+ height: 170px;
+ margin: 54px 21.2px 54px 36px;
+ object-fit: contain;
+`;
+const BoxImg2 = styled.img`
+ width: 321px;
+ height: 195.8px;
+ margin: 34px 0 48.2px;
+ object-fit: contain;
+`;
+
+const BoxImg3 = styled.img`
+ width: 336px;
+ height: 129px;
+ margin: 83px 0 66px;
+ object-fit: contain;
+`;
+
+const BoxText = styled.span`
+ width: 300px;
+ height: 81px;
+ font-family: Inter;
+ font-size: 16px;
+ font-weight: 500;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: center;
+ color: #fff;
+`;
+
+const Line = styled.div`
+ width: 1314px;
+ height: 1px;
+ margin: 95px 303px 60px;
+ background-color: #5f5f5f;
+`;
+
+export default Description;
diff --git a/src/components/main/Ranking.jsx b/src/components/main/Ranking.jsx
new file mode 100644
index 0000000..cc37713
--- /dev/null
+++ b/src/components/main/Ranking.jsx
@@ -0,0 +1,308 @@
+import styled from "styled-components";
+import RankingIcon from "../../assets/rangking.png";
+import CardIcon from "../../assets/card icon.png";
+import FrontendIcon from "../../assets/forntend.png";
+import BackendIcon from "../../assets/backend.png";
+import OpenStudyIcon from "../../assets/open_study.png";
+import PrivateStudyIcon from "../../assets/private_study.png";
+import LockIcon from "../../assets/lock.png";
+import { useNavigate } from "react-router-dom";
+import useToolTip from "../../hooks/useTooltip";
+import useModal from "../../hooks/useModal";
+
+const Ranking = () => {
+ const navigate = useNavigate();
+
+ const Tooltip = useToolTip("");
+
+ const { openModal, Modal } = useModal();
+
+ // open modal
+ const handleModal = () => {
+ openModal();
+ };
+
+ return (
+
+
+ 오늘의 랭킹
+
+ 오늘 가장 많이 학습된 문제집과 인기 스터디방을 추천드려요.
+
+
+
+
+
+ 문제집
+
+
+
+ -
+
+
navigate("/front/:worklistid")}>
+ 디자인패턴 문제집 모음집
+
+
+
+
+ -
+
+
navigate("/back/:worklistid")}>
+ 디자인패턴 문제집 모음집
+
+
+
+
+ -
+
+
navigate("/back/:worklistid")}>
+ 디자인패턴 문제집 모음집
+
+
+
+
+ -
+
+
navigate("/front/:worklistid")}>
+ 디자인패턴 문제집 모음집
+
+
+
+
+ -
+
+
navigate("/front/:worklistid")}>
+ 디자인패턴 문제집 모음집
+
+
+
+
+
+
+
+
+ 스터디방
+
+
+
+ -
+
+
싱글톤패턴 문제 완벽 대비
{" "}
+
+
+
+
+ -
+
+
navigate("/study/:studyroomid")}>
+ 싱글톤패턴 문제 완벽 대비
+
{" "}
+
+
+
+ -
+
+
싱글톤패턴 문제 완벽 대비
{" "}
+
+
+
+
+ -
+
+
navigate("/study/:studyroomid")}>
+ 싱글톤패턴 문제 완벽 대비
+
{" "}
+
+
+
+ -
+
+
navigate("/study/:studyroomid")}>
+ 싱글톤패턴 문제 완벽 대비
+
{" "}
+
+
+
+
+
+
+ {/* 비공개 스터디방일 경우 modal */}
+
+
+
+
+ 이 스터디방은 비공개입니다. 가입코드를 입력해주세요.
+
+
+
+
+
+
+ );
+};
+
+const Wrapper = styled.div`
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+`;
+
+const Icon = styled.img`
+ width: 67px;
+ height: 67px;
+ margin-top: 50px;
+ margin-bottom: 50px;
+ object-fit: contain;
+`;
+
+const Title = styled.div`
+ width: 267px;
+ height: 96px;
+ font-family: Inter;
+ font-size: 45px;
+ font-weight: 600;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: center;
+ color: #fff;
+`;
+
+const Description = styled.div`
+ width: 800px;
+ height: 96px;
+ margin-bottom: 72px;
+ font-family: Inter;
+ font-size: 25px;
+ font-weight: 600;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: center;
+ color: #fff;
+`;
+
+const ContentWrapper = styled.div`
+ display: flex;
+`;
+
+const ItemWrapper = styled.div``;
+
+const ItemHeader = styled.div`
+ display: flex;
+ flex-direction: space-between;
+ align-items: center;
+ width: 615px;
+ height: 74px;
+ margin: 0 20px;
+ padding: 20px 20px 20px 30px;
+ background-color: ${(props) => props.color};
+ border-radius: 13px 13px 0px 0px;
+`;
+
+const ItemTitle = styled.span`
+ font-family: Inter;
+ font-size: 28px;
+ font-weight: 600;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: left;
+ color: #000;
+ margin-left: 20px;
+`;
+
+const ItemIcon = styled.img`
+ width: 82px;
+ height: 22px;
+ margin-left: 380px;
+ object-fit: contain;
+`;
+
+const ItemBody = styled.div`
+ width: 615px;
+ height: 330px;
+ margin: 0 20px;
+ padding: 20px 20px 20px 30px;
+ background-color: #fff;
+ border-radius: 0px 0px 13px 13px;
+`;
+
+const Item = styled.div`
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ margin-bottom: 20px;
+ font-family: Inter;
+ font-size: 20px;
+ font-weight: 500;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: normal;
+ text-align: left;
+ color: #000;
+`;
+
+const ItemImage = styled.img`
+ width: 65px;
+ height: 19px;
+ margin-right: 20px;
+ object-fit: contain;
+`;
+
+const Line = styled.div`
+ width: 615px;
+ height: 1.5px;
+ margin: 18.5px 0 19px;
+ background-color: #ddd;
+`;
+
+const LockImg = styled.img`
+ width: 13.3px;
+ height: 17.5px;
+ flex-grow: 0;
+ color: #fa9600;
+ margin-left: 10px;
+`;
+
+const ModalContent = styled.div`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100%;
+ margin-top: 60px;
+ font-size: 14px;
+ text-align: center;
+`;
+
+const ModalBody = styled.div`
+ margin-bottom: 20px;
+ color: #c7c7c7;
+ text-align: center;
+`;
+
+const CodeInput = styled.input`
+ border: none;
+ outline: none;
+ font-size: 18px;
+ width: 266px;
+ height: 37px;
+ padding: 4px;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 5px;
+ background: linear-gradient(to bottom, #636363, #6363634d);
+
+ &::placeholder {
+ color: #acacac;
+ font-size: 18px;
+ }
+`;
+
+export default Ranking;
diff --git a/src/hooks/useTooltip.js b/src/hooks/useTooltip.js
new file mode 100644
index 0000000..eb9a66b
--- /dev/null
+++ b/src/hooks/useTooltip.js
@@ -0,0 +1,66 @@
+import { useState } from "react";
+import styled from "styled-components";
+import help from "../assets/help.png";
+
+const useToolTip = (defaultDescription) => {
+ const [hover, setHover] = useState(false);
+
+ const handleMouseEnter = () => {
+ setHover(true);
+ };
+
+ const handleMouseLeave = () => {
+ setHover(false);
+ };
+
+ const TooltipComponent = ({ description }) => (
+
+
+
+ {description}
+
+
+ );
+
+ return TooltipComponent;
+};
+
+const TooltipContainer = styled.div`
+ position: relative;
+ display: inline-block;
+ padding: 4px 7px 3px;
+
+ &:hover .description {
+ display: block;
+ }
+`;
+
+const HelpImg = styled.img`
+ display: block;
+`;
+
+const Description = styled.div`
+ display: none;
+ position: absolute;
+ background-color: #3f424e;
+ color: #fff;
+ font-family: Inter;
+ font-size: 10px;
+ font-weight: 500;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: 1.7;
+ letter-spacing: normal;
+ text-align: left;
+ margin-bottom: 15px;
+ padding: 3px;
+ top: 100%;
+ left: 50%;
+ transform: translateX(-50%);
+ white-space: nowrap;
+`;
+
+export default useToolTip;
diff --git a/src/pages/Main.jsx b/src/pages/Main.jsx
index 6583dde..f405ada 100644
--- a/src/pages/Main.jsx
+++ b/src/pages/Main.jsx
@@ -1,5 +1,22 @@
+import styled from "styled-components";
+import Banner from "../components/main/Banner";
+import Description from "../components/main/Description";
+import Ranking from "../components/main/Ranking";
+
const Main = () => {
- return
메인페이지입니다
;
+ return (
+
+
+
+
+
+
+
+ );
};
+const Wrapper = styled.div`
+ margin: 0 auto;
+`;
+
export default Main;
diff --git a/src/shared/Footer.jsx b/src/shared/Footer.jsx
index 425d3f7..1ca5a28 100644
--- a/src/shared/Footer.jsx
+++ b/src/shared/Footer.jsx
@@ -1,29 +1,44 @@
import styled from "styled-components";
+import FooterIcon from "../assets/footer icon.png";
export default function Footer() {
return (
- (주) 퀴즈업
-
- (주) 퀴즐렛 Copyrights ⓒ all rights reserved Quizup
- Planner & Designer 김소민 Frontend 정서연 Frontend 한지수 Backend 이건희
-
+
+ (주) 퀴즈업
+
+ (주) 퀴즐렛 Copyrights ⓒ all rights reserved Quizup
+
+ Planner & Designer 김소민 Frontend 정서연 Frontend 한지수 Backend
+ 이건희
+
+
+
+
);
-}
+}
const Wrapper = styled.footer`
- height: 103px;
- width: 1090px;
- margin-bottom: 50px;
- margin-top: 130px;
+ margin: 0;
display: flex;
+ gap: 88px;
+ padding: 51px 0 90px 0;
+ background-color: #24252a;
+ margin-top: 188px;
+ justify-content: center;
+`;
+
+const ContentWrapper = styled.div`
+ display: flex;
+ gap: 20px;
flex-direction: column;
- gap: 32px;
+ margin-left: 30px;
+ margin-right: 250px;
`;
const QuizUP = styled.div`
- color: #5263FF;
+ color: #5263ff;
font-size: 18px;
font-weight: 600;
`;
@@ -35,6 +50,12 @@ const Info = styled.div`
`;
const Text = styled.div`
- color: #A8A8A8;
+ color: #a8a8a8;
font-size: 15px;
-`;
\ No newline at end of file
+`;
+
+const Img = styled.img`
+ width: 328px;
+ height: 137px;
+ margin-right: 30px;
+`;
diff --git a/src/shared/Header.jsx b/src/shared/Header.jsx
index 8501e7e..923f44e 100644
--- a/src/shared/Header.jsx
+++ b/src/shared/Header.jsx
@@ -3,6 +3,7 @@ import styled from "styled-components";
import { NavLink, useNavigate } from "react-router-dom";
import "../assets/fonts/font.css";
import Alarm from "../components/alarm/Alarm";
+import LogoImage from "../assets/logo.png";
const Header = () => {
const userEmail = sessionStorage.getItem("userEmail");
@@ -12,7 +13,9 @@ const Header = () => {
return (
- navigate("/")}>Quiz up
+ navigate("/")}>
+
+
@@ -27,11 +30,11 @@ const Header = () => {
+
+ 스터디방
+
{isLoggedIn ? (
<>
-
- 스터디방
-
@@ -42,10 +45,10 @@ const Header = () => {
) : (
<>
- 로그인
+ 로그인
- 회원가입
+ 회원가입
>
)}
@@ -69,16 +72,12 @@ const Wrapper = styled.header`
}
`;
const Logo = styled.div`
- font-family: "Unbounded";
- color: #5263ff;
- font-size: 35px;
- white-space: nowrap;
- position: absolute;
- left: 9vw;
- @media (max-width: 1765px) {
- position: static;
- }
+ width: 176px;
+ height: 84px;
+ margin: 0 88px 31px 151px;
+ object-fit: contain;
`;
+
const NavContainer = styled.nav`
display: flex;
max-width: 1090px;
diff --git a/src/shared/Router.js b/src/shared/Router.js
index 5afcd8c..ed2c108 100644
--- a/src/shared/Router.js
+++ b/src/shared/Router.js
@@ -22,6 +22,7 @@ import {
WorkMake,
} from "../pages";
import Header from "./Header";
+import Footer from "./Footer";
const Router = () => {
return (
@@ -58,6 +59,7 @@ const Router = () => {
/>
} />
+
);
};