diff --git a/src/app/page.tsx b/src/app/page.tsx index baf8d97..9b942aa 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,129 +1,16 @@ 'use client'; -import Link from 'next/link'; -import EmailIcon from '/public/icons/email.svg'; -import FacebookIcon from '/public/icons/facebook.svg'; -import InstagramIcon from '/public/icons/instagram.svg'; -import CustomLogo from '@/components/root/CustomLogo'; -import ImageWrapper from '@/components/root/ImageWrapper'; -import styles from './page.module.css'; -import MainCard from '@/components/root/MainCard'; -import MiniCard from '@/components/root/MiniCard'; +import Layout from '@/components/landing/layout'; +import HeroSection from '@/components/landing/Section/HeroSection'; +import PrimarySection from '@/components/landing/Section/PrimarySection'; +import SecondarySection from '@/components/landing/Section/SecondarySection'; export default function Home() { return ( -
-
- - - - -
-
-
- -
-
새로운 일정관리
-
Taskify
-
- - 로그인하기 - -
-
- - -
-
-
- 생산성을 높이는 다양한 설정 ⚡ -
-
- - - -
-
-
- -
+ + + + + ); } diff --git a/src/app/reset.css b/src/app/reset.css index 8cabce7..f2868b9 100644 --- a/src/app/reset.css +++ b/src/app/reset.css @@ -12,7 +12,6 @@ body { body { font-family: var(--font-pretendard), sans-serif; - height: 100vh; } ul, diff --git a/src/components/root/CustomLogo.tsx b/src/components/CustomLogo.tsx similarity index 100% rename from src/components/root/CustomLogo.tsx rename to src/components/CustomLogo.tsx diff --git a/src/components/root/ImageWrapper.module.css b/src/components/ImageWrapper.module.css similarity index 100% rename from src/components/root/ImageWrapper.module.css rename to src/components/ImageWrapper.module.css diff --git a/src/components/root/ImageWrapper.tsx b/src/components/ImageWrapper.tsx similarity index 100% rename from src/components/root/ImageWrapper.tsx rename to src/components/ImageWrapper.tsx index f63c67f..3a56154 100644 --- a/src/components/root/ImageWrapper.tsx +++ b/src/components/ImageWrapper.tsx @@ -1,5 +1,5 @@ -import styles from './ImageWrapper.module.css'; import Image from 'next/image'; +import styles from './ImageWrapper.module.css'; interface Props { src: string; diff --git a/src/components/landing/Footer/Footer.module.css b/src/components/landing/Footer/Footer.module.css new file mode 100644 index 0000000..b6ab1d8 --- /dev/null +++ b/src/components/landing/Footer/Footer.module.css @@ -0,0 +1,31 @@ +.footer { + display: flex; + align-items: center; + justify-content: space-between; + padding: 40px 140px; + font-size: 16px; + font-weight: 400; + color: var(--gray-400); +} + +.legalLinks { + display: flex; + gap: 32px; +} + +.socialLinks { + display: flex; + align-items: center; + gap: 14px; +} + +.socialLink:first-child { + width: 20px; + height: 20px; +} + +.socialLink { + width: 22px; + height: 22px; + fill: white; +} diff --git a/src/components/landing/Footer/Footer.tsx b/src/components/landing/Footer/Footer.tsx new file mode 100644 index 0000000..eeb9675 --- /dev/null +++ b/src/components/landing/Footer/Footer.tsx @@ -0,0 +1,46 @@ +import Link from 'next/link'; +import EmailIcon from '/public/icons/email.svg'; +import FacebookIcon from '/public/icons/facebook.svg'; +import InstagramIcon from '/public/icons/instagram.svg'; +import styles from './Footer.module.css'; + +export default function Footer() { + return ( + + ); +} diff --git a/src/components/landing/Header/Header.module.css b/src/components/landing/Header/Header.module.css new file mode 100644 index 0000000..b38409f --- /dev/null +++ b/src/components/landing/Header/Header.module.css @@ -0,0 +1,28 @@ +.header { + display: flex; + align-items: center; + justify-content: space-between; + position: fixed; + left: 0; + top: 0; + z-index: 999; + width: 100%; + height: 70px; + padding: 15px 80px; + background-color: inherit; +} + +.logo { + fill: white; +} + +.nav { + display: flex; + gap: 36px; +} + +.navLink { + font-size: 16px; + font-weight: 400; + line-height: 26px; +} diff --git a/src/components/landing/Header/Header.tsx b/src/components/landing/Header/Header.tsx new file mode 100644 index 0000000..dfc4b04 --- /dev/null +++ b/src/components/landing/Header/Header.tsx @@ -0,0 +1,21 @@ +import Link from 'next/link'; +import CustomLogo from '@/components/CustomLogo'; +import styles from './Header.module.css'; + +export default function Header() { + return ( +
+ + + + +
+ ); +} diff --git a/src/components/landing/Section/HeroSection.module.css b/src/components/landing/Section/HeroSection.module.css new file mode 100644 index 0000000..a224afb --- /dev/null +++ b/src/components/landing/Section/HeroSection.module.css @@ -0,0 +1,48 @@ +.section { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + max-width: 1200px; + margin-bottom: 180px; +} + +.homeTitleWrapper { + display: flex; + align-items: center; + margin-bottom: 110px; + margin-top: 40px; + gap: 28px; +} + +.homeImg { + width: 722px; + height: 423px; +} + +.homeTitle { + font-size: 76px; + font-weight: 700; + color: white; + line-height: 100px; + letter-spacing: 2px; +} + +.homeBrand { + font-family: var(--font-montserrat); + font-size: 90px; + font-weight: 700; + color: var(--violet); + line-height: 65px; + letter-spacing: 1px; +} + +.homeLoginBtn { + display: inline-flex; + flex-shrink: 0; + align-items: center; + height: 54px; + padding: 9px 101px; + border-radius: 8px; + background: var(--violet); +} diff --git a/src/components/landing/Section/HeroSection.tsx b/src/components/landing/Section/HeroSection.tsx new file mode 100644 index 0000000..1d6953a --- /dev/null +++ b/src/components/landing/Section/HeroSection.tsx @@ -0,0 +1,23 @@ +import ImageWrapper from '../../ImageWrapper'; +import Link from 'next/link'; +import styles from './HeroSection.module.css'; + +export default function HeroSection() { + return ( +
+ +
+
새로운 일정관리
+
Taskify
+
+ + 로그인하기 + +
+ ); +} diff --git a/src/components/root/MainCard.module.css b/src/components/landing/Section/MainCard.module.css similarity index 97% rename from src/components/root/MainCard.module.css rename to src/components/landing/Section/MainCard.module.css index 59d4c9d..f31ab82 100644 --- a/src/components/root/MainCard.module.css +++ b/src/components/landing/Section/MainCard.module.css @@ -1,6 +1,5 @@ .card { display: flex; - flex-shrink: 0; align-items: flex-end; justify-content: flex-end; width: 100%; diff --git a/src/components/root/MainCard.tsx b/src/components/landing/Section/MainCard.tsx similarity index 92% rename from src/components/root/MainCard.tsx rename to src/components/landing/Section/MainCard.tsx index 521910d..e1dd001 100644 --- a/src/components/root/MainCard.tsx +++ b/src/components/landing/Section/MainCard.tsx @@ -1,4 +1,4 @@ -import ImageWrapper from '@/components/root/ImageWrapper'; +import ImageWrapper from '@/components/ImageWrapper'; import styles from './MainCard.module.css'; interface Props { diff --git a/src/components/root/MiniCard.module.css b/src/components/landing/Section/MiniCard.module.css similarity index 100% rename from src/components/root/MiniCard.module.css rename to src/components/landing/Section/MiniCard.module.css diff --git a/src/components/root/MiniCard.tsx b/src/components/landing/Section/MiniCard.tsx similarity index 90% rename from src/components/root/MiniCard.tsx rename to src/components/landing/Section/MiniCard.tsx index 3250671..026d141 100644 --- a/src/components/root/MiniCard.tsx +++ b/src/components/landing/Section/MiniCard.tsx @@ -1,4 +1,4 @@ -import ImageWrapper from '@/components/root/ImageWrapper'; +import ImageWrapper from '@/components/ImageWrapper'; import styles from './MiniCard.module.css'; interface Props { diff --git a/src/components/landing/Section/PrimarySection.module.css b/src/components/landing/Section/PrimarySection.module.css new file mode 100644 index 0000000..05921b8 --- /dev/null +++ b/src/components/landing/Section/PrimarySection.module.css @@ -0,0 +1,9 @@ +.cardLg1 { + width: 594px; + height: 498px; +} + +.cardLg2 { + width: 436px; + height: 502px; +} diff --git a/src/components/landing/Section/PrimarySection.tsx b/src/components/landing/Section/PrimarySection.tsx new file mode 100644 index 0000000..945bf29 --- /dev/null +++ b/src/components/landing/Section/PrimarySection.tsx @@ -0,0 +1,24 @@ +import MainCard from '@/components/landing/Section/MainCard'; +import styles from './PrimarySection.module.css'; + +export default function PrimarySection() { + return ( +
+ + +
+ ); +} diff --git a/src/components/landing/Section/SecondarySection.module.css b/src/components/landing/Section/SecondarySection.module.css new file mode 100644 index 0000000..fea4461 --- /dev/null +++ b/src/components/landing/Section/SecondarySection.module.css @@ -0,0 +1,30 @@ +.title { + margin-bottom: 36px; + font-size: 28px; + font-weight: 700; +} + +.cards { + display: flex; + gap: 33px; +} + +.cardSm1, +.cardSm2, +.cardSm3 { + width: 300px; +} + +.cardSm1 { + height: 124px; +} + +.cardSm2 { + width: 300px; + height: 231px; +} + +.cardSm3 { + width: 300px; + height: 195px; +} diff --git a/src/components/landing/Section/SecondarySection.tsx b/src/components/landing/Section/SecondarySection.tsx new file mode 100644 index 0000000..87b95f5 --- /dev/null +++ b/src/components/landing/Section/SecondarySection.tsx @@ -0,0 +1,33 @@ +import MiniCard from '@/components/landing/Section/MiniCard'; +import styles from './SecondarySection.module.css'; + +export default function SecondarySection() { + return ( +
+
생산성을 높이는 다양한 설정 ⚡
+
+ + + +
+
+ ); +} diff --git a/src/components/landing/layout.module.css b/src/components/landing/layout.module.css new file mode 100644 index 0000000..5018643 --- /dev/null +++ b/src/components/landing/layout.module.css @@ -0,0 +1,12 @@ +.page { + height: 100%; + background-color: black; + color: white; +} + +.main { + display: flex; + flex-direction: column; + align-items: center; + padding-top: 164px; +} diff --git a/src/components/landing/layout.tsx b/src/components/landing/layout.tsx new file mode 100644 index 0000000..340178c --- /dev/null +++ b/src/components/landing/layout.tsx @@ -0,0 +1,14 @@ +import { ReactNode } from 'react'; +import Header from './Header/Header'; +import Footer from './Footer/Footer'; +import styles from './layout.module.css'; + +export default function Layout({ children }: { children: ReactNode }) { + return ( +
+
+
{children}
+
+ ); +}