Browse Source

feat : 뉴스 추가

remotes/origin/main
이시연 1 month ago
parent
commit
e92b916624
  1. 109
      src/components/main/MainNews.jsx
  2. 20
      src/css/main.css
  3. 2
      src/pages/MainPage.jsx

109
src/components/main/MainNews.jsx

@ -0,0 +1,109 @@
import { useEffect, useRef } from "react";
import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
gsap.registerPlugin(ScrollTrigger);
function MainNews() {
const sectionRef = useRef(null);
const headRef = useRef(null);
const itemsRef = useRef([]);
const news = [
{
date: "2025.00.00",
title: "PAL Networks, 항공 IT 서비스 고도화 추진",
desc: "항공 운항 관리와 예약 플랫폼을 연결하는 통합 서비스 환경을 확대합니다.",
},
{
date: "2025.00.00",
title: "스마트 관광 예약 플랫폼 기능 확장",
desc: "관광 상품, 예약 데이터, 사용자 경험을 하나의 흐름으로 개선합니다.",
},
{
date: "2025.00.00",
title: "클라우드 기반 항공 서비스 운영 환경 구축",
desc: "안정적인 공공 클라우드 인프라를 기반으로 서비스 운영 효율을 높입니다.",
},
];
useEffect(() => {
const ctx = gsap.context(() => {
gsap.set(headRef.current, { opacity: 0, y: 48 });
gsap.set(itemsRef.current, { opacity: 0, y: 36 });
gsap
.timeline({
scrollTrigger: {
trigger: sectionRef.current,
start: "top 70%",
end: "top 30%",
scrub: 1,
},
})
.to(headRef.current, {
opacity: 1,
y: 0,
duration: 0.8,
ease: "power2.out",
})
.to(
itemsRef.current,
{
opacity: 1,
y: 0,
stagger: 0.14,
duration: 0.75,
ease: "power2.out",
},
"-=0.35",
);
}, sectionRef);
return () => ctx.revert();
}, []);
return (
<section className="main-news-section" ref={sectionRef}>
<div className="main-news-inner">
<div className="main-news-head" ref={headRef}>
<p className="main-news-eyebrow">INSIDE PAL</p>
<h2 className="main-news-title">
새로운 항공 서비스와
<br />
기술 소식
</h2>
<p className="main-news-desc">
항공 IT 플랫폼 구축, 서비스 운영, 기술 개발 관련 소식을 전합니다.
</p>
</div>
<div className="main-news-list">
{news.map((item, index) => (
<article
className="main-news-item"
key={index}
ref={(el) => {
itemsRef.current[index] = el;
}}
>
<div className="main-news-meta">
<span>NEWS</span>
<em>{item.date}</em>
</div>
<div className="main-news-content">
<h3>{item.title}</h3>
<p>{item.desc}</p>
</div>
<div className="main-news-arrow"></div>
</article>
))}
</div>
</div>
</section>
);
}
export default MainNews;

20
src/css/main.css

@ -269,3 +269,23 @@ body{overflow-x:hidden;}
@media (max-width:1024px){.main-solution-section{padding:110px 6vw 96px;}.main-solution-bg-circle{right:-32vw;top:-28vw;width:90vw;height:90vw;}.main-solution-grid{grid-template-columns:repeat(2,1fr);}.main-solution-card{min-height:220px;}} @media (max-width:1024px){.main-solution-section{padding:110px 6vw 96px;}.main-solution-bg-circle{right:-32vw;top:-28vw;width:90vw;height:90vw;}.main-solution-grid{grid-template-columns:repeat(2,1fr);}.main-solution-card{min-height:220px;}}
@media (max-width:768px){.main-solution-section{padding:88px 6vw 80px;}.main-solution-bg-circle{right:-48vw;top:-30vw;width:110vw;height:110vw;opacity:.88;}.main-solution-arrow{margin-bottom:34px;font-size:30px;}.main-solution-head{margin-bottom:38px;}.main-solution-title{font-size:clamp(36px,10vw,54px);line-height:1.02;}.main-solution-desc{font-size:14px;line-height:1.75;}.main-solution-grid{grid-template-columns:1fr;gap:14px;}.main-solution-card{min-height:190px;padding:24px 22px;border-radius:24px;}.main-solution-card::before{left:22px;top:24px;width:52px;height:52px;}.main-solution-card::after{left:22px;right:22px;bottom:24px;height:72px;}} @media (max-width:768px){.main-solution-section{padding:88px 6vw 80px;}.main-solution-bg-circle{right:-48vw;top:-30vw;width:110vw;height:110vw;opacity:.88;}.main-solution-arrow{margin-bottom:34px;font-size:30px;}.main-solution-head{margin-bottom:38px;}.main-solution-title{font-size:clamp(36px,10vw,54px);line-height:1.02;}.main-solution-desc{font-size:14px;line-height:1.75;}.main-solution-grid{grid-template-columns:1fr;gap:14px;}.main-solution-card{min-height:190px;padding:24px 22px;border-radius:24px;}.main-solution-card::before{left:22px;top:24px;width:52px;height:52px;}.main-solution-card::after{left:22px;right:22px;bottom:24px;height:72px;}}
/* News */
.main-news-section{position:relative;min-height:100vh;padding:130px 8vw;background:#ffffff;overflow:hidden;}
.main-news-section::before{content:"";position:absolute;left:-18vw;bottom:-24vw;width:52vw;height:52vw;border-radius:50%;background:radial-gradient(circle,rgba(58,64,129,.08),transparent 70%);filter:blur(18px);pointer-events:none;}
.main-news-inner{position:relative;z-index:2;max-width:1440px;margin:0 auto;display:grid;grid-template-columns:.9fr 1.35fr;gap:80px;align-items:start;}
.main-news-head{position:sticky;top:140px;}
.main-news-eyebrow{margin:0 0 16px;font-size:12px;font-weight:800;letter-spacing:.24em;color:#3a4081;}
.main-news-title{margin:0;font-size:clamp(34px,4vw,58px);font-weight:800;line-height:1.08;letter-spacing:-.06em;color:#10142b;}
.main-news-desc{margin:24px 0 0;max-width:420px;font-size:16px;line-height:1.8;font-weight:500;color:rgba(16,20,43,.58);word-break:keep-all;}
.main-news-list{border-top:1px solid rgba(58,64,129,.16);}
.main-news-item{position:relative;display:grid;grid-template-columns:150px 1fr 42px;gap:34px;align-items:center;padding:34px 0;border-bottom:1px solid rgba(58,64,129,.16);cursor:pointer;transition:padding .35s ease,background .35s ease;}
.main-news-item:hover{padding-left:18px;background:linear-gradient(90deg,rgba(58,64,129,.045),transparent 70%);}
.main-news-meta span{display:block;margin-bottom:10px;font-size:11px;font-weight:800;letter-spacing:.18em;color:#3a4081;}
.main-news-meta em{font-style:normal;font-size:14px;font-weight:600;color:rgba(16,20,43,.42);}
.main-news-content h3{margin:0 0 12px;font-size:25px;font-weight:800;line-height:1.35;letter-spacing:-.04em;color:#10142b;word-break:keep-all;}
.main-news-content p{margin:0;font-size:15px;line-height:1.75;font-weight:500;color:rgba(16,20,43,.56);word-break:keep-all;}
.main-news-arrow{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:1px solid rgba(58,64,129,.16);color:#3a4081;font-size:18px;transition:transform .35s ease,background .35s ease,color .35s ease;}
.main-news-item:hover .main-news-arrow{transform:translate(4px,-4px);background:#3a4081;color:#ffffff;}
@media (max-width:1024px){.main-news-section{padding:110px 6vw;}.main-news-inner{grid-template-columns:1fr;gap:54px;}.main-news-head{position:relative;top:auto;}.main-news-item{grid-template-columns:130px 1fr 40px;}}
@media (max-width:768px){.main-news-section{min-height:auto;padding:90px 6vw;}.main-news-title{font-size:clamp(36px,10vw,52px);}.main-news-item{grid-template-columns:1fr;gap:14px;padding:28px 0;}.main-news-item:hover{padding-left:0;background:transparent;}.main-news-arrow{width:38px;height:38px;}.main-news-content h3{font-size:21px;}.main-news-content p{font-size:14px;}}

2
src/pages/MainPage.jsx

@ -2,6 +2,7 @@ import MainVisual from "../components/main/MainVisual";
import MainUtm from "../components/main/MainUtm"; import MainUtm from "../components/main/MainUtm";
import MainUam from "../components/main/MainUam"; import MainUam from "../components/main/MainUam";
import MainSolution from "../components/main/MainSolution"; import MainSolution from "../components/main/MainSolution";
import MainNews from "../components/main/MainNews";
function MainPage() { function MainPage() {
return ( return (
@ -10,6 +11,7 @@ function MainPage() {
<MainUtm /> <MainUtm />
<MainUam /> <MainUam />
<MainSolution /> <MainSolution />
<MainNews />
</main> </main>
); );
} }

Loading…
Cancel
Save