Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] about페이지 (후원사 제외) #287

Merged
merged 9 commits into from
Sep 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added public/images/about/airplane.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/about/passport.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/session/final.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/session/launching.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/session/midterm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/session/networking.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/session/usability.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
125 changes: 125 additions & 0 deletions src/components/AboutInfo/AboutInfo.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
import Image from 'next/image';
import { css, Theme } from '@emotion/react';

import { commonLayoutCss } from '~/styles/layout';
import { mediaQuery } from '~/styles/media';
import { pxToRem } from '~/styles/typo';

export function AboutInfo() {
return (
<div css={[commonLayoutCss, layoutCss]}>
<div>
<h2 css={headerCss}>{'IT 사이드 프로젝트의 시작\n디프만의 열정적인 여정에 합류하세요'}</h2>
</div>
<ul css={aboutBodyCss}>
{ABOUT_INFO.map(({ image, title, label, description, reverse }) => (
<div key={title} css={aboutItemCss}>
{reverse ? (
<>
<div css={aboutInfoCss}>
<h3 css={aboutTitleCss}>{title}</h3>
<p css={aboutDescriptionCss}>{description}</p>
</div>
<div css={imageCss}>
<Image src={image} alt={label} fill quality={100} />
</div>
</>
) : (
<>
<div css={imageCss}>
<Image src={image} alt={label} fill quality={100} />
</div>
<div css={aboutInfoCss}>
<h3 css={aboutTitleCss}>{title}</h3>
<p css={aboutDescriptionCss}>{description}</p>
</div>
</>
)}
</div>
))}
</ul>
</div>
);
}

const layoutCss = css`
margin-top: 200px;
white-space: pre-line;
display: flex;
flex-direction: column;
align-items: center;
${mediaQuery('pc')} {
margin-top: 200px;
}

${mediaQuery('mobile')} {
margin-top: 200px;
}
`;

const headerCss = (theme: Theme) => css`
${theme.typos.pretendard.subTitle1};
font-size: ${pxToRem(40)};
color: ${theme.colors.white};
`;

const aboutBodyCss = css`
margin-top: 200px;
`;

const aboutItemCss = css`
display: flex;
gap: 24px;
align-items: center;
justify-content: center;
`;

const aboutInfoCss = css`
display: flex;
flex-direction: column;
gap: 24px;
`;

const imageCss = css`
position: relative;
width: 400px;
height: 400px;
object-fit: cover;
object-position: center;
${mediaQuery('mobile')} {
width: 270px;
height: 270px;
}
`;

const aboutTitleCss = (theme: Theme) => css`
${theme.typos.pretendard.subTitle1};
color: ${theme.colors.white};
`;

const aboutDescriptionCss = (theme: Theme) => css`
${theme.typos.pretendard.subTitle2};
color: ${theme.colors.gray100};
`;

const PASSPORT_IMAGE = `/images/about/passport.png`;
const AIRPLANE_IMAGE = `/images/about/airplane.png`;

const ABOUT_INFO = [
{
label: 'passport',
image: PASSPORT_IMAGE,
title: '디자이너, 개발자의\n 커리어 패스 여정',
description:
'14기는 매주 토요일, 총 16주간 진행되며 \n다양한 오프라인 세션과 네트워킹이 준비되어 있습니다',
reverse: false,
},
{
label: 'airplane',
image: AIRPLANE_IMAGE,
title: '서비스 론칭 후\n유저에게 도착하는 순간까지',
description:
'UT, 론칭데이 등 실제 서비스를 구현하고\n타켓 유저에게 도달하는 전 과정을 경험합니다',
reverse: true,
},
];
1 change: 1 addition & 0 deletions src/components/AboutInfo/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { AboutInfo } from './AboutInfo';
60 changes: 60 additions & 0 deletions src/components/Contact/Contact.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import Link from 'next/link';
import { css, Theme } from '@emotion/react';

import { SectionTitle } from '~/components/SectionTitle';
import { CONTACT_INFO } from '~/constant/contactInfo';
import { commonLayoutCss } from '~/styles/layout';
import { mediaQuery } from '~/styles/media';

export function Contact() {
return (
<div css={[commonLayoutCss, layoutCss]}>
<SectionTitle label="Contact" title="디프만에 대해 궁금한게 있으신가요?" />
<ul css={infoListCss}>
{CONTACT_INFO.map(footer => (
<li key={footer.name}>
<Link css={InfoCss} href={footer.href} target="_blank">
<span css={infoNameCss}>{footer.name}</span>
<span>{footer.detail}</span>
</Link>
</li>
))}
</ul>
</div>
);
}

const layoutCss = css``;

const infoListCss = css`
display: flex;
gap: 20px;
`;

const InfoCss = (theme: Theme) => css`
${theme.typos.pretendard.body1};
background-color: ${theme.colors.black400};
color: ${theme.colors.gray20};
width: 470px;
height: 172px;
padding: 48px 36px;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: flex-start;
gap: 20px;
${mediaQuery('tablet')} {
width: 344px;
}

${mediaQuery('mobile')} {
width: 160px;
height: 96px;
padding: 16px 8px;
}
`;

const infoNameCss = (theme: Theme) => css`
${theme.typos.decimal.subTitle1};
color: ${theme.colors.blue300};
`;
1 change: 1 addition & 0 deletions src/components/Contact/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { Contact } from './Contact';
6 changes: 3 additions & 3 deletions src/components/Footer/Footer.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Link from 'next/link';
import { css, Theme } from '@emotion/react';

import { FIRST_ROW_FOOTER_INFOS, SECOND_ROW_FOOTER_INFOS } from '~/constant/footer';
import { FIRST_ROW_FOOTER_INFOS, SECOND_ROW_FOOTER_INFOS } from '~/constant/contactInfo';
import { colors } from '~/styles/colors';
import { mediaQuery } from '~/styles/media';

Expand All @@ -12,7 +12,7 @@ export function Footer() {
<ul css={rowCss}>
{FIRST_ROW_FOOTER_INFOS.map(footer => (
<li key={footer.name}>
<Link css={[linkCss, strongLinkCss]} href={footer.href}>
<Link css={[linkCss, strongLinkCss]} href={footer.href} target="_blank">
{footer.name}
</Link>
</li>
Expand All @@ -21,7 +21,7 @@ export function Footer() {
<ul css={[secondRowCss]}>
{SECOND_ROW_FOOTER_INFOS.map(footer => (
<li key={footer.name}>
<Link css={linkCss} href={footer.href}>
<Link css={linkCss} href={footer.href} target="_blank">
<span>{footer.name}</span>
<span>{footer.detail}</span>
</Link>
Expand Down
35 changes: 35 additions & 0 deletions src/components/OfflineSession/OfflineSession.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { css } from '@emotion/react';

import { OfflineThumbnail } from '~/components/OfflineSession/OfflineThumbnail';
import { SectionTitle } from '~/components/SectionTitle';
import { OFFLINE_SESSIONS } from '~/constant/offline';
import { commonLayoutCss } from '~/styles/layout';
import { mediaQuery } from '~/styles/media';

export function OfflineSession() {
return (
<div css={[commonLayoutCss, layoutCss]}>
<SectionTitle label="Offline Activity" title="오프라인 세션" />
<ul css={sessionContainerCss}>
{OFFLINE_SESSIONS.map(session => (
<OfflineThumbnail key={session.title} {...session} showInfoDefault backgroundShow />
))}
</ul>
</div>
);
}

const layoutCss = css``;

const sessionContainerCss = css`
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
gap: 12px;
${mediaQuery('tablet')} {
grid-template-columns: repeat(2, 1fr);
}
${mediaQuery('mobile')} {
grid-template-columns: repeat(1, 1fr);
}
`;
Loading
Loading