반응형
➜ header 시작
➜ header 완성
➜ intro
➜ About Me
➜ Projects
➜ Skills
➜ Experience
➜ Contact
➜ Footer
➜ Vercel 배포
Experience 컴포넌트
export default function Experience() {
const { ref } = useSectionInView("Experience");
const { theme } = useTheme();
Experience 컴포넌트는 useSectionInView 훅을 사용하여 해당 섹션이 화면에 나타날 때의 상태를 추적한다.
useTheme 훅을 사용하여 테마 정보를 가져와서 어떤 테마인지에 따라 스타일을 조정한다.
return (
<section
id="experience"
ref={ref}
className="scroll-mt-28 mb-28 sm:mb-40 min-w-[50rem]"
>
<SectionHeading>My experience</SectionHeading>
<VerticalTimeline lineColor="">
섹션을 나타내는 section 태그로 감싸고,
반응형 css를 설정한다.
반응형
{experiencesData.map((item, index) => (
<React.Fragment key={index}>
<VerticalTimelineElement
contentStyle={{
background:
theme === "light" ? "#f3f4f6" : "rgba(255, 255, 255, 0.05)",
boxShadow: "none",
border: "1px solid rgba(0, 0, 0, 0.05)",
textAlign: "left",
padding: "1.3rem 2rem",
}}
contentArrowStyle={{
borderRight:
theme === "light"
? "0.4rem solid #9ca3af"
: "0.4rem solid rgba(255, 255, 255, 0.5)",
}}
date={item.date}
dateClassName="ml-[1rem] mr-[1rem]"
icon={item.icon}
iconStyle={{
background:
theme === "light" ? "white" : "rgba(255, 255, 255, 0.15)",
fontSize: "1.5rem",
}}
>
<h3 className="font-semibold capitalize">{item.title}</h3>
<p className="font-normal !mt-0">{item.location}</p>
<p className="!mt-1 !font-normal text-gray-700 dark:text-white/75">
{item.description}
</p>
</VerticalTimelineElement>
</React.Fragment>
))}
</VerticalTimeline>
</section>
);
}
경험 데이터를 매핑하여 각 경험을 나타내는 VerticalTimelineElement를 생성한다.
각 VerticalTimelineElement는 경험의 날짜, 아이콘, 제목, 위치 및 설명을 포함한 컨텐츠를 가지고 있다.
theme을 기반으로 한 스타일 조정이 이루어져 있어, 밝은 테마와 어두운 테마 간에 스타일이 달라진다.
반응형
'Project > portfolio' 카테고리의 다른 글
포트폴리오 Footer 만들기 (0) | 2023.10.31 |
---|---|
포트폴리오 Contact 만들기 | Resend, toast (0) | 2023.10.30 |
포트폴리오 Skills 만들기 | Framer Motion 애니메이션 (0) | 2023.10.27 |
포트폴리오 header 완성하기 | clsx, useActiveSectionContext (0) | 2023.10.26 |
포트폴리오 Projects 만들기 | framer-motion(motion, useScroll, useTransform) (0) | 2023.10.25 |