2014-07-26 9 views
22

Voglio animare il cambiamento di posizione di un elemento con transizione CSS, ma non funziona nemmeno quando uso il passaggio su all proprietà, come nell'esempio qui: http://jsfiddle.net/yFy5n/3/Posso animare l'elemento posizionato assoluto con la transizione CSS?

Tuttavia, non voglio che la mia soluzione finale per applicare la transizione a tutte le proprietà, ma solo sulla modifica della posizione. Quindi il cambio di colore dovrebbe essere istantaneo, solo il cambio di posizione da sinistra a destra dovrebbe essere animato (l'opposto di ciò che sta accadendo ora).

+5

Poiché nessuno lo ha menzionato: la proprietà 'left' è impostata su' auto'. Le transizioni non funzioneranno mai se uno dei punti iniziale o finale è quel valore. Entrambi devono essere definiti. Il motivo per cui la soluzione di margine nella risposta di seguito funziona è perché tutti e quattro i lati del margine sono impostati su "0", quindi ha già impostato quel valore definito. – animuson

+0

@animuson Yup. Qualcuno ha cancellato tutti i commenti, ma puoi vedere [qui] (http://stackoverflow.com/questions/24973176/can-i-animate-absolute-positioned-element-with-css-transition#comment38819970_24973194) che gli OP originali la versione funzionava su una versione precedente di Chrome, piuttosto strana. – Shomz

risposta

38

Si è dimenticato di definire il valore predefinito per left in modo che non sappia come animare.

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

vedere qui: http://jsfiddle.net/shomz/yFy5n/5/

+0

Per maggiore compatibilità è possibile utilizzare JS $ ('# test'). Animate ({'left': 60}); –

+0

@Shomz: Grazie amico. Non sono sicuro di come funzioni per me (?!). Sono su Chrome v24 con Windows – Harry

+0

Grazie (mi aspettavo che assumesse la sinistra predefinita, quindi non ho mai pensato di definirlo da solo); tuttavia, che cosa dovrei fare per ottenere solo la posizione di transizione, non il colore? –

1

provare questo:

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

Puoi spiegare un po 'perché "questo" funzionerà? Ciò renderà questa risposta utile per qualcun altro in futuro con un problema simile ma non esattamente lo stesso. –

4

Si prega di provare questo codice margin-left:60px invece di left:60px

prega di dare un'occhiata: http://jsfiddle.net/hbirjand/2LtBh/2/

come @Shomz detto, transitio n deve essere modificato in transition:margin 1s linear; anziché transition:all 1s linear;

+0

Non so perché qualcuno ha downvoted questo. Evita il bug 'left' bene. +1 da me. Btw. poiché OP vuole solo il cambio di posizione, la transizione può essere modificata in 'margin': http://jsfiddle.net/shomz/2LtBh/1/ – Shomz

Problemi correlati