동시에 여러 CSS 애니메이션 재생


119

두 개의 CSS 애니메이션 을 다른 속도로 재생하려면 어떻게해야 합니까?

  • 이미지는 동시에 회전하고 커야합니다.
  • 회전은 2 초마다 순환합니다.
  • 성장은 4 초마다 순환합니다.

예제 코드 :

.image {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    -webkit-animation:spin 2s linear infinite;
    -webkit-animation:scale 4s linear infinite;
}

@-webkit-keyframes spin { 
    100% { 
        transform: rotate(180deg);
    } 
}

@-webkit-keyframes scale {
    100% {
         transform: scaleX(2) scaleY(2);
    }
}

http://jsfiddle.net/Ugc5g/3388/- 하나의 애니메이션 (마지막으로 선언 된 애니메이션) 만 재생됩니다.


회전하는 동안 이미지 크기가 조정되어야합니까? 내가 제공 한 대답은 아니지만 그것이 당신이 필요로하는 것이라면 그것을하기 위해 조정할 수 있습니다
Ram G Athreya

답변:


154

TL; DR

쉼표를 사용하면 아래 CriticalError 답변에 설명 된대로 각각 고유 한 속성이있는 여러 애니메이션을 지정할 수 있습니다.

예:

animation: rotate 1s, spin 3s;

원래 답변

여기에는 두 가지 문제가 있습니다.

#1

-webkit-animation:spin 2s linear infinite;
-webkit-animation:scale 4s linear infinite;

두 번째 줄은 첫 번째 줄을 대체합니다. 따라서 효과가 없습니다.

# 2

두 키 프레임이 동일한 속성에 적용됩니다. transform

대안으로 이미지를로 감싸고 <div>각각을 개별적 으로 다른 속도로 애니메이션 할 수 있습니다.

http://jsfiddle.net/rnrlabs/x9cu53hp/

.scaler {
    position: absolute;
    top: 100%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    animation: scale 4s infinite linear;    
}

.spinner {
    position: relative;
    top: 150px;
    animation: spin 2s infinite linear;
}


@keyframes spin { 
    100% { 
        transform: rotate(180deg);
    } 
}

@keyframes scale {
    100% {
         transform: scaleX(2) scaleY(2);
    }
}
<div class="spinner">
<img class="scaler" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">
<div>


216

새로운 사람이 와서이 스레드를 잡는 경우 쉼표를 사용하여 각각 고유 한 속성을 가진 여러 애니메이션을 지정할 수 있습니다.

예:

animation: rotate 1s, spin 3s;

3
감사합니다. 이것은 훨씬 더 간단한 솔루션입니다
Sergey Rotbart 16.

12
지옥 예 쉼표!
Zachary Dahan

3
다른 애니메이션 지연은 어떻습니까?
작은 작은 남자

35

실제로 여러 애니메이션을 동시에 실행할 수 있지만 예제에는 두 가지 문제가 있습니다. 첫째, 사용하는 구문은 하나의 애니메이션 만 지정합니다. 두 번째 스타일 규칙은 첫 번째를 숨 깁니다. 다음과 같은 구문을 사용하여 두 개의 애니메이션을 지정할 수 있습니다.

-webkit-animation-name: spin, scale
-webkit-animation-duration: 2s, 4s

이 바이올린에서와 같이 (아래에 설명 된 다른 문제로 인해 "스케일"을 "페이드"로 대체했습니다 ... 저와 함께 참으 십시오.) : http://jsfiddle.net/rwaldin/fwk5bqt6/

둘째, 두 애니메이션 모두 동일한 DOM 요소의 동일한 CSS 속성 (변환)을 변경합니다. 나는 당신이 그렇게 할 수 있다고 믿지 않습니다. 다른 요소, 이미지 및 컨테이너 요소에 대해 두 개의 애니메이션을 지정할 수 있습니다. 이 바이올린과 같이 애니메이션 중 하나를 컨테이너에 적용하십시오. http://jsfiddle.net/rwaldin/fwk5bqt6/2/


이름을 쉼표로 구분하므로 여러 애니메이션을 수행 할 수 있음을 지정해 주셔서 감사합니다.
Zachary Dahan 2015

3

속성은 한 번만 정의 할 수 있으므로 두 개의 애니메이션을 재생할 수 없습니다. 오히려 첫 번째 애니메이션에 두 번째 애니메이션을 포함하고 타이밍을 맞추기 위해 키 프레임을 조정하는 것이 어떻습니까?

.image {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    -webkit-animation:spin-scale 4s linear infinite;
}

@-webkit-keyframes spin-scale { 
    50%{
        transform: rotate(360deg) scale(2);
    }
    100% { 
        transform: rotate(720deg) scale(1);
    } 
}
<img class="image" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">


2
사용자는 "다른 속도"에 대한 asekd
rnrneverdies

두 개의 애니메이션 문을 작성하는 것이 작동하지 않기 때문에 2 초 안에 회전이 발생하는 반면 배율은 4 초 안에 발생하는 속도가 다릅니다. 키 프레임을 통해 타이밍을 처리했습니다.
Ram G Athreya 2014

두 개의 변환 애니메이션을 동시에 재생할 수없는 것은 사실이지만 (한 변환이 다른 변환을 덮어 쓰기 때문에) "속성은 한 번만 정의 할 수 있으므로 두 애니메이션을 재생할 수 없습니다."라고 말하는 것은 올바르지 않습니다. 애니메이션에 쉼표로 구분 된 값을 사용하는 방법에 대한 허용 된 답변을 참조하십시오.
저스틴 타 데이

2

이런 식으로 시도해 볼 수 있습니다

및 시간이 다를 수 있도록 부모를로 설정하고 rotate이미지를 로 설정합니다.scalerotatescale

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.