본문 바로가기
html, css, 자바스크립트/css

css 스타일로 애니메이션 주기

by 개발자 L 2023. 5. 22.
반응형

css 스타일로 애니메이션 주기

네 안녕하세요, 이번 포스팅에서는 css로 태그에 동적 변화를 주는 걸 해보도로 하겠습니다.

자바스크립트를 쓰지 않고 수행 가능한 동적 변화 요소는 다음과 같습니다.

  • 애니메이션
  • 전환
  • 변환

이렇게 3가지이며, 이번 포스팅에서는 애니메이션을 주는 방법에 대하여 알아보도록 하겠습니다.

그럼 지금부터 시작하도록 하겠습니다.

 

1. 애니메이션 주기 : @keyframes 사용

css로 애니메이션 효과를 주는 방법은 태그의 모양 변화를 시간 단위로 설정해 만드는 것입니다.

이 방법을 쓰기 위해서는 아래와 같은 작업이 필요합니다.

  • 시간별 애니메이션 장면 작성하기
  • 애니메이션 스타일 시트 작성하기

 

1 - 1. 시간별 애니메이션 장면 작성하기

시간별 에니메이션 장면을 작성할 때는 @keyframe이라는 속성을 사용합니다.

여기서 어사인(@)은 이벤트를 나타내는 약자로 쓰입니다.

사용 방법은 이렇습니다.

@keyframes name {
    시간 비율 {스타일; 스타일;} /* 시간 비율 시점까지 적용할 스타일 시트 작성 */
    ...
    시간 비율 {스타일; 스타일;} /* 이전 시점에서 시간 비율 시점까지 적용할 스타일 시트 작성 */
}

이러한 템플릿 이용합니다.

이걸 이제 직접 적용을 시켜보면 이렇게 작성할 수 있습니다.

@keyframes textColorAnimation {
    0% {color : blue;} /* 시작 시 0% 대신 from 써도 상관 x */
    30% {color : green;} /* 30% 경과 시 까지 */
    100% {color : red;} /* 끝까지, 100% 대신 to 써도 상관 x */
}

이렇게 쓸 수 있습니다.

그리고 여기서 0%와 100%는 시작 지점과 끝 지점을 나타내므로,

0% 대신 from을, 100% 대신 to를 써서 나타내도 됩니다.

 

1 - 2. 애니메이션 스타일 시트 작성하기

애니메이션 속성 값을 주었으면 이를 적용시킬 스타일 시트가 필요합니다.

스타일 시트는 이런 식으로 작성합니다.

animation-name : 에니메이션 이름; /* @keyframes의 name 지정 */
animation-duration : 에니메이션 지속 시간; /* 에니메이션이 1회 실행되는 시간 */
animation-iteration-count : 에니메이션 반복 횟수;
/* 기본적으로 숫자를 주지만, infinite 입력 시 무한 반복 */

이런 식으로 작성을 합니다.

그럼 이제 이를 이용해서 스타일 시트를 작성해 보도록 하겠습니다.

span {
    animation-name : textColorAnimation; /* 에니메이션 이름 입력 */
    animation-duration : 5s; /* 1회 수행 완료 까지 걸리는 시간 - 5초 */
    animation-iteration-count : infinite /* 무한 반복 */
}

이렇게 작성할 수 있습니다.

그럼 이 스타일 시트들을 직접 html에 적용시켜서 나타내보도록 하겠습니다.

 

반응형

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>애니메이션</title>
    <style>
    @keyframes textColorAnimation {
        0% {  color : blue;}
        30% {  color : green;}
        100% { color : red;}
    }
    span {
        font-family : "arial black";
        animation-name: textColorAnimation;
        animation-duration: 5s;
        animation-iteration-count: infinite;
    }
    </style>
    </head>
    <body>
    <!--  <h3>텍스트 색 애니메이션</h3>
    <hr> -->
    <p><span>span</span> 텍스트를
    5초에 blue, green, red로
    무한 반복합니다.</p>
    </body>
</html>

이제 결과 화면을 보여드리도록 하겠습니다.

 

 

이런 식으로 색이 파란색부터 시작해서 제일 마지막에 빨간색으로 바뀌는 게

5초에 걸쳐 1회 수행이 되는데,

이게 무한 반복이 됩니다.

 

이제 이걸 활용해서 글자의 크기를 시간의 변화에 따라 줄이는 코드를 한 번 작성해 보도록 하겠습니다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>애니메이션</title>
    <style>
        @keyframes bomb {
            from { font-size : 500%;}
            to { font-size : 100%;}
        }
        h3 {
            animation-name : bomb;
            animation-duration : 3s;
            animation-iteration-count : infinite;
        }
    </style>
</head>
<body>
    <h3>꽝!</h3>
    <hr>
    <p>꽝! 글자가 3초동안 500%에서
    시작하여 100%로 바뀌는
    애니메이션입니다. 무한 반복합니다.
    </p>
</body>
</html>

이렇게 작성을 했고, 이제 결과를 보도록 하겠습니다.

 

이런 식으로 시간 변화에 따라서 글자의 크기가 줄어드는 것을 볼 수 있습니다.

 

여기까지 에니메이션을 주는 방법에 대하여 알아보았습니다.

다음 포스팅에서는 전환에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다~

반응형

댓글