2014-07-26 14 views
22

Chcę animować zmianę położenia danego elementu z transformacji CSS, ale to nie działa nawet gdy używam przejścia na all właściwości, jak w tym przykładzie: http://jsfiddle.net/yFy5n/3/Czy mogę animować element pozycjonowany absolutnie za pomocą przejścia CSS?

Jednak nie chcę moje ostateczne rozwiązanie zastosować przejście do wszystkich właściwości, ale zamiast tego tylko w przypadku zmiany pozycji. Zmiana koloru powinna być natychmiastowa, tylko zmiana pozycji z lewej na prawą powinna być animowana (przeciwieństwo tego, co dzieje się teraz).

+5

Ponieważ nikt o tym nie wspomniał: właściwość 'left' przyjmuje wartość' auto'. Przejścia nigdy nie będą działać, jeśli jednym z punktów początkowych lub końcowych jest ta wartość. Oba muszą być zdefiniowane. Powodem, dla którego rozwiązanie w odpowiedzi na pytanie poniżej działa, jest to, że wszystkie cztery strony marginesu mają domyślnie wartość "0", więc ma już zdefiniowaną wartość. – animuson

+0

@animuson Yup. Ktoś wyczyścił wszystkie komentarze, ale możesz zobaczyć [tutaj] (http://stackoverflow.com/questions/24973176/can-i-animate-absolute-positioned-element-with-css-transition#comment38819970_24973194), że oryginalne OPs Wersja działa we wcześniejszej wersji Chrome, dość dziwacznie. – Shomz

Odpowiedz

38

Nie pamiętasz, aby zdefiniować wartość domyślną dla left, aby nie było wiadomo, jak animować.

.test { 
    left: 0; 
    transition:left 1s linear; 
} 

Zobacz tutaj: http://jsfiddle.net/shomz/yFy5n/5/

+0

Dla większej kompatybilności możesz użyć JS $ ('# test'). Animate ({'left': 60}); –

+0

@Shomz: Dzięki mate. Nie wiem, jak to działa dla mnie (?!). Jestem na Chrome v24 z systemem Windows – Harry

+0

Dziękuję (spodziewałem się, że domyślnie przyjmie on wartość domyślną, więc nigdy nie myślałem o samodzielnym zdefiniowaniu tego); Jaką jednak zmianę należy zrobić, aby uzyskać tylko pozycję do przejścia, a nie kolor? –

1

spróbuj tego:

.test { 
    position:absolute; 
    background:blue; 
    width:200px; 
    height:200px; 
    top:40px; 
    transition:left 1s linear; 
    left: 0; 
} 
+9

Czy możesz nieco wyjaśnić, dlaczego "to" zadziała? To sprawi, że ta odpowiedź będzie przydatna dla kogoś innego w przyszłości z problemem, który jest podobny, ale nie jest dokładnie taki sam. –

4

Proszę Spróbuj kod margin-left:60px zamiast left:60px

proszę spojrzeć: http://jsfiddle.net/hbirjand/2LtBh/2/

jak @Shomz powiedział, transitio n należy zmienić na transition:margin 1s linear; zamiast na transition:all 1s linear;

+0

Nie wiem, dlaczego ktoś to zajął. Uniknie "lewego" błędu. +1 ode mnie. Btw. ponieważ OP chce tylko przesunięcie pozycji, przejście można zmienić na 'margin': http://jsfiddle.net/shomz/2LtBh/1/ – Shomz

Powiązane problemy