무한 롤링 배너, flowBox 만들기
무난한 페이지에 활력을 줘보자
들어가며😃
프로젝트 랜딩페이지를 기획하는데 정적인 이미지만 보여지니 약간 심심한 느낌이 들었다. 그러던 중 흐르는 전광판, 무한 롤링 배너 효과를 쓴 사이트를 보게 되었고, 이거다!🔥 싶어서 우리 프로젝트에도 바로 적용해보았다. 아래는 무한 롤링 배너가 적용된 화면이다.
짜자잔!🚀 오늘은 이 효과를 어떻게 구현했는지 과정에 대해 포스팅하려한다.
1. 컴포넌트 생성
우선 저 롤링 박스의 컴포넌트 뼈대를 생성해줘야한다.
export default function FlowBox() {
return (
<FlowContainer>
{Array(15)
.fill(1)
.map((el, index) => (
<FlowWrapper key={index}>
<p>SIDE EFFECT</p>
{/* <Icon /> */}
</FlowWrapper>
))}
</FlowContainer>
);
}
Array(15).fill(1)
구문을 살펴보면 길이가 15이고 모든 요소가 1로 채워진 배열을 생성한다. 안에 들어가는 숫자는 몇인지 상관없지만, 나같은 경우에는 15개 정도는 있어야 화면에 짤림현상 없이 보여줄 수 있었다.
그리고 map
을 통해 배열을 순환하면서 15번 <FlowWrapper />
를 보여주는 것이다. 문구는 해당 프로젝트의 이름으로 넣었고, 대표 아이콘을 추가해주었다. 그럼 뼈대는 끝난 것 이다. 아주 간단쓰!😎
2. CSS 추가
무한 롤링 배너의 핵심인 흐르는 애니메이션을 적용해보자.
export const FlowContainer = styled.div`
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
font-weight: 500;
color: ${(p) => p.theme.mainBackGround};
font-style: italic;
font-size: 25px;
width: 100%;
background-color: ${(p) => p.theme.brandColor.primary};
height: 55px;
`;
우선 가장 부모 컴포넌트의 스타일이다. 여기서 핵심은 white-space: nowrap;
속성이다. 이 속성은 요소의 텍스트가 줄 바꿈되지 않고 한 줄로 표시되도록 해준다. 만약, 이 속성이 없다면
이런 결과가 나온다,,,그렇기 때문에 필수!
export const FlowWrapper = styled.div`
display: flex;
align-items: center;
animation: textLoop 5s linear infinite;
padding-right: 15px;
gap: 15px;
@keyframes textLoop {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-100%);
}
}
`;
위는 텍스트와 아이콘을 감싸고 있는 컴포넌트 스타일링 코드이다. 여기서 중요한건 animation: textLoop 5s linear infinite;
속성이다. textLoop
는 0%에서 100%까지의 애니메이션 단계를 정의한다. 코드에서는 x좌표가 0에서 -100% 로 되어 있는데, 이는 텍스트를 가로 축(x축)을 따라 왼쪽으로 100% 이동시키는 것을 의미하는 것이다.
그리고 이 애니메이션을 5s(5초동안 지속하고), linear(선형으로), infinite(무한하게) 적용시키는 것이다. 그럼 무한 롤링 배너 제작 완료!
단순하지만 눈을 즐겁게해주는 롤링 배너를 구현해보았다. 어딘가 페이지가 아쉬웠는데 이 배너 하나가 랜딩페이지의 감초 역할을 제대로 하고 있는 것 같아 뿌듯하다.👯♀️ 프로젝트가 마무리되기 전에 영감을 얻을 수 있는 페이지를 발견할 수 있어서 다행이였고, 또한 다행이 잘 구현되어서 뿌듯하다. 다음 프로젝트에서는 더 많은 영감을 얻어, 더 많은 시도를 할 수 있기를! 🥹🥹