2014-07-26 17 views
22

Ich möchte die Position eines Elements ändern mit CSS Übergang animieren, aber es funktioniert nicht, auch wenn ich den Übergang auf all Eigenschaften verwenden, wie in dem Beispiel hier: http://jsfiddle.net/yFy5n/3/Kann ich absolut positioniertes Element mit CSS-Übergang animieren?

Allerdings möchte ich nicht meine endgültige Lösung Übergang auf alle Eigenschaften anwenden, sondern nur auf die Positionsänderung. Die Farbänderung sollte also sofort erfolgen, nur die Positionsänderung von links nach rechts sollte animiert werden (das Gegenteil von dem, was gerade passiert).

+5

Da niemand es erwähnt: die 'left' Eigenschaft ist standardmäßig auf' auto'. Übergänge werden niemals funktionieren, wenn einer der Start- oder Endpunkte dieser Wert ist. Beide müssen definiert werden. Der Grund, warum die Margin-Lösung in der folgenden Antwort funktioniert, liegt darin, dass alle vier Seiten des Randes standardmäßig auf "0" gesetzt sind, so dass dieser definierte Wert bereits gesetzt ist. – animuson

+0

@animuson Yup. Jemand hat alle Kommentare gelöscht, aber Sie können [hier] (http://stackoverflow.com/questions/24973176/can-a-animate-absolute-positioned-element-with-css-transition#comment38819970_24973194) die ursprünglichen OPs sehen Version arbeitete an einer früheren Version von Chrome, ziemlich seltsam. – Shomz

Antwort

38

Sie haben vergessen, den Standardwert für left zu definieren, also weiß es nicht, wie man animiert.

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

Siehe hier: http://jsfiddle.net/shomz/yFy5n/5/

+0

Für mehr Kompatibilität können Sie JS $ ('# test') verwenden. Animate ({'left': 60}); –

+0

@Shomz: Danke Kumpel. Nicht sicher, wie es für mich funktioniert (?!). Ich bin auf Chrome v24 mit Windows – Harry

+0

Vielen Dank (ich erwartete, dass es den Standard links, also habe ich nie gedacht, es selbst zu definieren); Aber welche Veränderung sollte ich tun, um nur die Position zum Übergang zu bekommen, nicht die Farbe? –

1

try this:

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

Kannst du etwas näher erläutern, warum "dieses" funktionieren wird? Das wird diese Antwort für jemand anderen in der Zukunft nützlich machen, mit einem Problem, das ähnlich, aber nicht genau dasselbe ist. –

4

Bitte versuchen Sie diesen Code margin-left:60px statt left:60px

nehmen Sie bitte einen Blick: http://jsfiddle.net/hbirjand/2LtBh/2/

als @Shomz sagte, transitio n muss geändert werden in transition:margin 1s linear; anstelle von transition:all 1s linear;

+0

Nicht sicher, warum jemand das abgelehnt hat. Es vermeidet den "linken" Bug einfach gut. +1 von mir. Übrigens. Da OP nur Positionsverschiebung benötigt, kann der Übergang zu "Marge" geändert werden: http://jsfiddle.net/shomz/2LtBh/1/ – Shomz

Verwandte Themen