[CSS] 반짝이는 이펙트 만들기

ksj0314·2024년 8월 1일

CSS

목록 보기
6/6

위 페이지에서 Star, 오늘 뭐먹지?, Mini-MapleStory는 버튼이다.
사용자에 따라서 버튼으로 인식하지 못할 경우를 생각하여 반짝이는 이펙트를 넣으려고 한다.


1. 하얀 박스가 지나가는 이펙트

const Effect = styled.div`
  ${props => !props.isSelected && css`
    width: 100%;
    height: 200%;
    position: absolute;
    top: 0;
    left: 0;
    opacity: 0.9;
    background-image: linear-gradient(to bottom, transparent 0%, white 50%, transparent 100%);
	animation: ${Anima} 2s ease-in-out infinite;
  `}
`

우선 버튼 안에 넣을 Effect라는 요소를 만들고 position 설정으로 버튼 위로 겹쳐지게 만든다.
이펙트 두께를 늘리려고 height를 200%를 주었고
하얀 박스가 지나가는것 보다는 그라데이션을 주는게 자연스러워서 linear-gradient를 사용하였다.

const Anima = keyframes`
    0%{
        transform: translate(-100%, -100%) rotateZ(-45deg);
    }
    70%{
        transform: translate(100%, 100%) rotateZ(-45deg);
    }
    100%{
        transform: translate(100%, 100%) rotateZ(-45deg);
    }
`;

위 처럼 keyframes을 설정하면 버튼 위로 지나가는 Effect 컴포넌트가 만들어진다. (잘 보이게 잠시 빨간색으로 설정함)

버튼에 overflow: hidden을 설정하면 완성


2. linear-gradient

linear-gradient 속성을 사용해서 위 이미지를 애니메이션을 넣어 자연스럽게 변화시키고자 했다.

그런데 keyframes로 애니메이션을 넣을때 linear-gradient는 지원하지 않는다고 한다!

그래서 직접 비슷하게 만들어보기로 했다.

const Effect = styled.div`
  ${props => !props.isSelected && css`
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    opacity: 0;
    animation: ${Anima} 1.5s linear infinite;
  `}
`;

동일한 크기의 Effect 컴포넌트를 만들고 애니메이션을 주었다.

const Anima = keyframes`
    0% {
        opacity: 0;
        background-image: linear-gradient(to right bottom, white 0%, transparent 100%);
    }
    10%{
        opacity: 0.8;
        background-color: transparent;
    }
    20% {
        background-color: white;
        background-image: linear-gradient(to right bottom, white 0%, transparent 100%);
    }
    21%{
        background-image: linear-gradient(to right bottom, transparent 0%, white 100%);
    }
    30% {
        opacity: 0.8;
        background-color: transparent;
    }
    40% {
        opacity: 0;
    }
`;
  • 0% ~ 10% : linear-gradient의 첫번째 상태를 opacity로 서서히 나타나게 한다.
  • 10% ~ 20% : background-color를 투명에서 하얀색으로 서서히 나타나게 한다.

0% ~ 20%가 적용된 모습 (빨간색 임시 설정)

20% ~ 40%는 반대 방향으로 설정

  • 20% ~ 21% : linear-gradient를 두번째 상태로 바꿔야하는데 서서히가 아닌 바로 바뀌어야하므로 1% 단위로 설정했다.
  • 21% ~ 30% : background-color를 하얀색에서 투명으로 서서히 없애줍니다.
  • 30% ~ 40% : opacity로 전체를 서서히 없애준다.
  • 40% ~ : 반복 애니메이션에 지연시간을 넣는 역할을 한다.


3. linear-gradient 수정

2번 방법처럼 버튼크기의 요소를 5가지를 만들어 linear-gardient설정을 각각 다르게 작성한다.
5가지 요소는 모두 기본 opacity는 0이고 같은 animation이 적용되었다.

위 5가지 요소의 모습 (빨간색 임시 설정)

모두 잠시 나타났다가 사라지는 애니메이션이 적용되었으며
delay설정을 이용해 애니메이션이 시작되는 타이밍만 다르게 설정되었다.

0개의 댓글