→ 대충 요런걸 만들었다.
split()
, map()
을 사용하였다.const text = "developing..."
// 초기값을 비교하여 TS가 타입추론을 하기 때문에 타입지정 안해도 된다.
{text.split('').map((char, idx) => {
return (
<Char key={idx} idx={idx}>
{char}
</Char>
);
})}
const Char = styled.div<{ idx: number }>`
letter-spacing: 3px;
animation: wave 1s calc(0.1s * ${(props) => props.idx}) linear infinite;
@keyframes wave {
0% {
transform: translateY(0);
}
50% {
transform: translateY(-5px);
}
100% {
transform: translateY(0);
}
}
`;
@keyframes
로 wave
라는 규칙을 만들어주었는데, 기존 Y좌표에서 -5px
만큼 이동 후 다시 돌아오는 형태로 작성했다.transform : translateY()
를 이용했다.animation
의 delay
를 calc
함수와 props
로 받은 idx
를 이용하여 계산하는 방식으로 서로 다른 delay
를 줄 수 있게끔 했다..charWrapper {
display: flex;
}
span
으로 각 글자들을 감싸주었는데, inline
요소에는 animation
속성이 적용되지 않았다.div
태그로 바꾸어주고, 해당 내용을 감싸는 div
를 만들고, flex
를 이용하여 수평 정렬해주었다.display : inline-block;
속성을 추가하는 것으로도 가능했다.