본문 바로가기

CSS

7.CSS3 Animation



1. Transitions

2. transform : rotate()

3. transform origin, translate(), skew()

4. scale(), 동시 적용.

5. Keyframes & Animations

6. Animation 속성

7. 3D 변환





1. Transitions


1. CSS3는 하나의 property 값을 일정시간동안 다른 값으로 변경하는 것이 가능하다.

  - transition-property : 변환 적용할 property를 지정한다.

  - transition-duration : 변환 시간을 설정한다.

  - transition-timing-function : 지속 시간동안 어떻게 변환되는지 설정한다.

  - transition-delay : 변환 효과의 지연시간을 설정한다.

  ex) 5초동안 느리게 변환되는 애니매이션

 

.anim{
    transition: transform 5s ease-in;
}


  변환 효과는 다양한 CSS 속성들(배경, 가로, 세로, 투명도 등)을 변화시킬 수 있다. 아래 코드는 마우스가 hover될 때 width 속성을 50px에서 250px까지 3초동안 변환한다.

 

div {
   width: 50px;
   height: 50px;
   background: #32CD32;
   transition: width 3s;
}
div:hover {
   width: 250px;
}



2. transition-timing-function 

  transition-timing-function은 변환 효과가 어떻게 적용될지 설정한다.

    - ease : 천천히 시작해서 빨라진다.

    - ease-in : 천천히 시작해서 가속한 다음 갑자기 멈춘다.

    - ease-out : 빠르게 시작해서 감속한 다음 정지한다.

    - ease-in-out : ease와 비슷하지만 미세한 가속과 감속을 한다.

    - linear : 일정한 속도를 유지하며 변화한다. 배경, 투명도 변겨엥 적합하다.

    - cubic-bezier(p0,p1,p2,p3) : 이 함수를 통해 사용자 정의 timing을 0~1까지 지정할 수 있다. 

    

 


 ease : cubic-bezier(0.25, 0.1, 0.25, 1.0)

 


 linear : cubic-bezier(0.25, 0.25, 0.75, 0.75)

 


 ease-in : cubic-bezier(0.42, 0.0, 1.0, 1.0)

 


 ease-out : cubic-bezier(0.0, 0.0, 0.58, 1.0)

 


 ease-in-out : cubic-bezier(0.42, 1.0, 0.58, 1.0)


   


2. transform : rotate()


1. CSS3 transform을 사용하면 요소를 이동, 번역, 회전, 스케일, 기울기 등이 가능하다. CSS3는 2D 및 3D 변환을 지원한다.

   음수값도 입력 가능하다.

 

div {
   width: 200px;
   height: 100px;
   margin-top: 30px;
   background-color: #32CD32;
transform: rotate(10deg);
}




3. transform origin, translate(), skew()


1. transform-origin 속성으로 요소의 위치를 변경할 수 있다. 기본값은 속성의 가운데에 해당하는 50% 50%이다.

아래 코드는 같은 크기의 div를 가로로 25% 세로로 75% 이동하고 15도 기울인 모습이다.

 

div.empty-div {
    position: relative;
    height: 100px;
    width: 100px;
    margin: 30px;
    padding: 10px;
    border: 1px solid black;
}
div.green-div {
    margin: 30px;
    padding: 10px;
    position: absolute;
    height: 100px;
    width: 100px;
    background-color: #8bc34a;
    border: 1px solid white;
    transform: rotate(15deg);
    transform-origin: 25% 75%;
    -webkit-transform: rotate(15deg);
    -webkit-transform-origin: 25% 75%;
}



2. translate() 함수는 현재 위치에서 x축, y축 매개변수만큼 이동시킨다. 양수는 오른쪽, 아래로 음수는 왼쪽 위로 이동시킨다. 기준점은 브라우저의 왼쪽 상단이다.

 

div {
    padding: 50px;
    position: absolute;
    background-color: #32CD32;
    transform:translate(100px, 50px);
    -webkit-transform:translate(100px, 50px);
}




3. skew() 함수는 x축, y축 매개변수만큼 요소를 기울인다. y축 매개변수 생략하면 0으로 간주한다.

 

div {
    margin:50px;
    padding: 50px;
    position: absolute;
    background-color: #32CD32;
    transform: skew(30deg,10deg);
    -webkit-transform: skew(30deg,10deg);
}




4. scale(), 동시 적용.


1. scale() 함수는 width, height 매개변수에 따라 요소의 크기를 변경한다. 1은 원래 크기고 2를 입력하면 2배가 된다.

   매개변수를 하나만 입력하면 width, height에 동시에 적용된다.

 

div.first {
    width: 200px;
    height: 100px;
    background-color: #8BC34A;
    transform: scale(0.7, 0.7);
    -webkit-transform: scale(0.7, 0.7);
    color:white;
}
div.second {
    margin: 60px;
    width: 200px;
    height: 100px;
    background-color: #8bc34a;
    transform: scale(1.5,1.5);
    -webkit-transform: scale(1.5,1.5);
    color:white;
}



2. 여러가지 변형을 한번에 사용할 수 있다. 간단하게 공백으로 변형들을 구분하면 된다. 콤마를 사용하면 어떤 효과도 적용되지 않으므로 반드시 공백을 사용해야 한다.

 

div{
    width: 200px;
    height: 100px;
    background-color: #8BC34A;
    transform: rotate(45deg) translate(100px);
    -webkit-transform: rotate(45deg) translate(100px);
    color:white;
}







5. Keyframes & Animation


1. 애니메이션은 요소를 점진적으로 변화하게 한다. 어느 속성이는 원하는 만큼 변경할 수 있다. Keyframes는 요소가 특정 시점에 갖게 될 스타일을 정의한다. CSS 스타일을 @keyframes 규칙에 따라 작성할 경우 애니메이션은 점진적으로 현재 스타일에서 특정 시점의 스타일까지 변화한다.

아래 코드는 배경이 3번 변화한다. 애니메이션이 50% 완료되었을 때, 70% 완료되었을 때, 100% 완료되었을 때 각각 다른 배경을 갖는다.

 

@keyframes example {
   0%  {background-color: red;}
   50%  {background-color: yellow;}
   70%  {background-color: blue;}
   100% {background-color: green;}
}


% 사용에 대한 대안으로 from과 to 키워드를 사용할 수 있다. from은 0%를 의미하고 to는 100%를 의미한다.

아래 두 코드는 같은 의미이다.

 

@keyframes colorchange {
   0% {background-color: red;}
   100% {background-color: green;}
}



 

@keyframes colorchange {
   from {background-color: red;}
   to {background-color: green;}
}



2. 애니메이션이 동작하기 위해 요소에 애니메이션을 바인딩 해야 한다.

   - animation-name 속성에는 요소에 적용될 애니메이션의 이름을 기술한다.

   - animation-duration 속성에는 애니메이션이 진행될 시간을 기술한다. 만약 이 값이 없으면 애니메이션은 발생하지 않는다. 지속시간이 0이기 때문이다.

 

div {
    width: 100px;
    height: 100px;
    background-color: red;
    animation-name: colorchange;
    animation-duration: 10s;
    -webkit-animation-name: colorchange;
    -webkit-animation-duration: 10s;
}
@keyframes colorchange {
    0% {background-color: red; }
    50% {background-color: green; }
    100% {background-color: blue; }
}
@-webkit-keyframes colorchange {
    0% {background-color: red; }
    50% {background-color: green; }
    100% {background-color: blue; }
}





6. Animation 속성


1. animation-name 속성은 어떤 애니메이션을 사용할 것인지를 기술한다. keyframe에 매치되는 이름을 찾는다.

 

div {
   animation-name: colorchange;  
   animation-duration: 5s;
}
@keyframes colorchange {
   from { width: 0px; }
   to { width: 100px; }
}



2. animation-timing-function 애니메이션 효과가 어떻게 설정될지 기술한다. transition-timing-function과 같다. animation은 효과가 끝난 후 다시 원래 상대로 돌아오지만 transition은 변환된 상태로 머무른다.

    - ease : 천천히 시작해서 빨라진다.

    - ease-in : 천천히 시작해서 가속한 다음 갑자기 멈춘다.

    - ease-out : 빠르게 시작해서 감속한 다음 정지한다.

    - ease-in-out : ease와 비슷하지만 미세한 가속과 감속을 한다.

    - linear : 일정한 속도를 유지하며 변화한다. 배경, 투명도 변겨엥 적합하다.

    - cubic-bezier(p0,p1,p2,p3) : 이 함수를 통해 사용자 정의 timing을 0~1까지 지정할 수 있다. 


3. 그 외 속성들
  - 
animation-delay 속성은 애니메이션 지연 시간을 설정한다. ( animation-delay : 5s; )

  - animation-iteration-count 속성은 몇번 반복될 것인지 설정한다. infinite를 값으로 주면 영원히 반복된다. 만약 음수값이나 0을 주면 애니메이션은 시작되지 않는다.

       (animation-iteration-count : 5; )

  - animation-direction 속성은 keyframe이 적용되는 방향에 대해 설정한다.

      normal : 기본값으로 0%~100%로 진행된다.

      reverse : 100%~0%로 진행된다.

      alternate : 앞으로 진행되다가 다시 뒤로 또 다시 앞으로 진행된다.

      alternate reverse : 뒤로 진행되다가 다시 앞으로 또 다시 뒤로 진행된다.


4. animation 속성을 한줄로 기술할 수 있다. 아래 코드는 같은 값이다. 순서가 중요하며 변경될 시 애니메이션이 동작히지 않는다.

 

div {
   animation-name: colorchange;
   animation-duration: 3s;
   animation-timing-function: ease-in;
   animation-delay: 1s;
   animation-iteration-count: infinite;
   animation-direction: reverse;
}



 

div { 
   animation: colorchange 3s ease-in 1s infinite reverse;
}





7. 3D 변환


1. 회전

  X축과 Y축 뿐만 아니라 3D 변형은 Z축 변환도 포함한다. 2D 변형과 매우 비슷하다. rotateX(), rotateY(), rotateZ() 함수로 3D 공간에 있는 요소를 회전할 수 있다.

 

div.X {
    width:250px;
    height:100px;
    color:white;
    background-color:green;
    transform: rotateX(150deg);
    -webkit-transform: rotateX(150deg);
}
div.Y {
    width:250px;
    height:100px;
    color:white;
    background-color:green;
    transform: rotateY(150deg);
    -webkit-transform: rotateY(150deg);
}
div.Z {
    width:250px;
    height:100px;
    color:white;
    background-color:green;
    transform: rotateZ(150deg);
    -webkit-transform: rotateZ(150deg);
}




2. 이동

 수평 이동을 담당하는 translateX(), 수직 이동을 담당하는 translateY(), 스크린 안쪽 바깥쪽 Z축 이동을 담당하는 translateZ() 함수를 사용하여 요소를 이동할 수 있다. 매개변수 단위로는 px, em, % 등이 사용된다. 양수를 사용하면 요소가 앞으로 나오고 음수를 사용하면 멀어진다. translate3d(x,y,z) 함수를 사용하면 한줄로 작성할 수 있다. 3d 이동은 relative position과 비슷하지만 웹 페이지 흐름에는 영향을 주지 않는다. 이동된 요소는 원래 위치에서 이동된 것처럼 보일 뿐이다.

 

#mybox1 {
    transform: translateX(29px) translateY(5em) translateZ(-13px);
    -webkit-transform: translateX(29px) translateY(5em) translateZ(-13px);
    width:250px;
    height:100px;
    color:white;
    background-color:green;
}



3. 원근법(Perspective)

  원근법은 얼마나 깊이 3d를 그려낼 것인가를 정의한다. 큰 값일수록 거리가 멀어지므로 시각 효과가 덜 강하다. 요소에 원근 속성을 적용할 때 실제 적용되는 것은 자식 요소이다. perspective 속성은 3D변환 요소에만 적용된다.

 

div.parent-div {
    position: relative;
    height: 200px;
    width: 200px;
    margin: 30px;
    padding: 10px;
    border: 1px solid black;
    perspective: 100px;
    -webkit-perspective: 100px;
}
div.child-div {
    padding: 60px;
    position: absolute;
    background-color: #8bc34a;
    border: 1px solid white;
    transform: rotateX(45deg);
    -webkit-transform: rotateX(45deg);
}






<연관게시글>


'CSS' 카테고리의 다른 글

8.CSS Filter  (0) 2019.01.29
6.CSS3 그라데이션&배경  (0) 2019.01.29
5.CSS3 기본  (0) 2019.01.29
4.레이아웃  (0) 2019.01.29
3.Properties  (0) 2019.01.29