2011-08-09 19 views
5

O ile rozumiem, nie ma czegoś takiego, co możemy zaimplementować za pomocą przejść css, ale nie możemy tego zaimplementować za pomocą animacji css, ale nie odwrotnie.Przypadki użycia dla przejść CSS i animacji CSS

Oznacza to, że każde przejście ma odpowiednik animacji css. Na przykład, ten

.ablock:hover {             
    position: relative;            
    -moz-transition-property: background-color, color;    
    -moz-transition-duration: 1s;         
    -webkit-transition-property: background-color, color;   
    -webkit-transition-duration: 1s;                
    color: red;              
    background-color:pink;           
} 

stanowi równowartość co następuje:

.ablock:hover { 
    -moz-animation-duration:1s;         
    -moz-animation-name:transition;        
    -webkit-animation-duration:1s;         
    -webkit-animation-name:transition;        
}  

@-moz-keyframes transition {          
    to {               
     color: red;            
     background-color: pink;         
    } 
}  

@-webkit-keyframes transition {         
    to {               
     color: red;            
     background-color: pink;         
    } 
} 

Moje pytanie brzmi - czy jest nam mówić o przeglądarce wspieranie zarówno przejścia CSS i animacje, jakie są przypadki użycia za wybór jednego lub inne podejście? Jeśli chodzi o przejścia, mogę wymienić tylko jeden - mają bardziej zwięzłą składnię, nie musimy kopiować wklejania ogromnych uchwytów kodu dla @ -moz-keyframes, @ -webkit-keyframes i tak dalej.

Jeśli chodzi o sterowanie z javascript, elastyczność i złożoność animacje są znacznie bardziej odpowiednie narzędzie (przynajmniej na pierwszy rzut oka). Jakie są przypadki użycia?

UPD: OK, pozwól mi spróbować wyświetlić interesujące informacje znalezione w pytaniach.

  • Ten został wniesiony przez Romana Komarowa. Powiedzmy, że mamy div i div dziecka. Podczas gdy rodzic div jest ukryty, przenosimy element potomny. Gdy zabieramy mysz, przejście jest anulowane. Czas trwania tego anulowania to dokładnie czas, który już wydaliśmy na przeniesienie. Animacja jest anulowana "natychmiast". Nie wiem jednak, jak standardowe są te dwa zachowania.
+0

W chromie te przykłady nie są równoważne - w przypadku Twojego pierwszego przykładu zmienia się na różowy po najechaniu kursorem, a następnie pozostaje (dopóki nie wyłączysz myszy), podczas gdy w drugim zmienia kolor na różowy, a następnie przełącza z powrotem domyślnie po zakończeniu: http://jsfiddle.net/nKw3X/1/. Ponadto, jak łatwo jest wykonywać funkcje czasowe przejścia, takie jak "łatwość wchodzenia", w animacjach? http://www.the-art-of-web.com/css/timing-function/ –

+0

Próbowałem dowiedzieć się, jak przywrócić kolor do poprzedniego stanu po zdjęciu myszy z elementu, ale nie mogłem uzyskać to działa: http://jsfiddle.net/nKw3X/2/. Może to nie jest możliwe? To byłaby duża różnica - wraz z niemożnością utrzymania przenoszonej wartości. –

Odpowiedz

8
  • Animacje mogą być zapętlone (i mogą występować klatki kluczowe, yeeah).
  • Przejścia mogą być bardziej elastyczne i można łatwo wprowadzać przejścia do różnych wartości iw różnych okolicznościach.

Chociaż można naśladować niektóre przejścia autorem animacji (jak wspomniałeś w swoim poście), przejścia są po prostu bardziej wydajne:

  • Wystarczy powiedzieć, które właściwości trzeba animować iw jakich warunkach (przy użyciu różne selektory)
  • można wywołać przejście na różne sposoby:
    1. Zmiana właściwości w CSS dla pseudo-klasyfikowany: hover,: aktywny itd. (Tworzenie czystym CSS UI)
    2. Zmiana właściwości w różnych klasach do różnych celów.
    3. Zmiana właściwości w stylach śródliniowych: w połączeniu z JS jest po prostu silniejsza niż animacje.
+0

Roman, dziękuję ci za tę odpowiedź, ale nie rozumiem głównej idei, szczerze mówiąc. Czy możesz podać mi przykład przejścia css, którego nie możemy zaimplementować za pomocą animacji css? – shabunc

+0

@shabunc Możesz zaimplementować dowolne przejście _single_ przez animację, ale, jak wiem, nie możesz go zmienić (lub nie możesz tego zrobić łatwo), gdy jest uruchomiony. – kizu

+0

@shabunc Ponadto, w wielu przypadkach przejścia są o wiele łatwiejsze: spójrz na [ten przykład] (http://kizu.ru/fun/controls/) - tam zmieniasz tylko jedną właściwość ('left' lub 'top'), a przejście po prostu działa, ale jeśli spróbujesz to zrobić z animacjami ... Musiałbyś zrobić dla każdego możliwego przejścia suwaka. – kizu

1

z przejściami jesteś w stanie przejść pomiędzy dowolnej wartości określonej nieruchomości, które chcesz być przeniesione. Jako przykład, chcesz przejść kolor łącza, kiedy to zatrzymuje się i aktywny:

a { 
    color: #000; 
    transition: color .4s ease; 
} 
a:hover { 
    color: #888; 
} 
a:active { 
    color: #faa; 
} 

Jesteś niezależny, który kolor wybrać. Teraz, jeśli chcesz użyć stylu animacji, musisz jawnie ustawić wartość koloru dla stanów animacji. I nie jesteś w stanie łatwo animować pomiędzy trzema stanami: normalnym, aktywnym i aktywnym. Potrzebujesz bardziej złożonych definicji. Postaram się ten jeden z animacji:

a { 
    color: #000; 
    animation-duration: 0.4s; 
    animation-fill-mode: forwards; 
    animation-name: toDefault; 
} 
a:hover { 
    animation-duration: 0.4s; 
    animation-fill-mode: forwards; 
    animation-name: toHover; 
} 
a:active { 
    animation-duration: 0.4s; 
    animation-fill-mode: forwards; 
    animation-name: toActive; 
} 
@keyframes toDefault { 
    to { 
     color: #000; 
    } 
} 
@keyframes toHover { 
    to { 
     color: #888; 
    } 
} 
@keyframes toActive { 
    to { 
     color: #faa; 
    } 
} 

Teraz ta nie obejmuje animację z powrotem do stanu sprzed. Nie jestem pewien, czy uda ci się to osiągnąć.

Krótko mówiąc: dzięki przejściom można animować niezdefiniowany zestaw właściwości i wartości, natomiast animacje klatek kluczowych są używane do dobrze zdefiniowanych animacji i/lub przejść.