2017-12-28 17 views
1

Ändert die CSS-Animationseigenschaft, wenn sie zum Ändern der Deckkraft verwendet wird, auch die Position eines Elements? Wenn ja, was passiert im DOM, das dies ermöglicht und wie kann es ausgeglichen werden?CSS Opazität Animation ändert die Position?

Kontext: Ich habe einen Javascript-EventListener zu einer Reihe von Bildern hinzugefügt, die beim Anklicken eine Funktion aufrufen, die eine CSS-Animation initiiert und das angeklickte Bild ausblendet. Es wird auch ein Timer gesetzt, der eine CSS-Klasse entfernt und dadurch das angeklickte Bild von Deckkraft 0 auf Deckkraft 1 zurückstellt. Alles funktioniert gut, außer dass das Bild etwas nach links und oben wieder erscheint, wo ich es ursprünglich platziert habe und wo ich es haben möchte Sein. Derselbe unerwünschte Effekt tritt sowohl in Chrome als auch in Safari auf.

Hier ist die CSS:

.hiddenanimal { 
    animation: animalfade 1s; 
    animation-fill-mode: forwards; 
} 

@keyframes animalfade { 
    from { opacity: 1; 
    } to { opacity: 0; 
    } 
} 
+6

Bitte geben Sie eine [MCVE] in der Lage sein, Ihre Frage richtig zu beantworten (im Gegensatz zu nur raten) – ochi

+0

Mein Javascript fügt die hiddenanimal CSS-Klasse unten, und es später entfernt: '.hiddenanimal { \t Animation: animalfade 1s; \t animation-fill-mode: vorwärts; } @keyframes animalfade { \t von {Opazität: 1; \t} bis {\t Opazität: 0; } } –

+3

Sie können die Frage bearbeiten, um die [mcve] hinzuzufügen - Willkommen bei StackOverflow - bitte nehmen Sie die [Tour] und überprüfen Sie unsere Abschnitt auf [fragen] – ochi

Antwort

0

Einfache Antwort: Eine CSS-Animation wird nur Werte ändern Sie es erzählen. In Ihrem Beispiel:

@keyframes animalfade { 
    from {opacity: 1;} to {opacity: 0;} 
} 

Das einzige, was ändern wird, ist die opacity.

Wenn sich Ihr Element bewegt, geschieht etwas anderes und möglicherweise auch nicht das Element mit der Animation.

Sie fragen, was im DOM vor sich geht. Technisch: nichts. Die CSS-Werte ändern sich im Laufe der Zeit, nicht das DOM.

Ein besseres Beispiel würde anderen helfen, Ihre Frage besser zu beantworten. Ich habe Annahmen gemacht und habe keine Ahnung, ob meine Antwort auch nur annähernd dem entspricht, was Sie wissen wollen. Wenn Sie Ihre Frage aktualisieren können, um etwas HTML und JavaScript einzuschließen, kann ich meine Antwort ändern.

+0

Danke, deine Antwort hilft, weil es mich anderswo nach einer Erklärung suchen ließ. Das Problem scheint das Javascript zu beinhalten. Ich habe die Methode setAttribute verwendet, um die Klasse .hiddenanimal hinzuzufügen, ohne zu wissen, dass sie meine vorhandene Klasse mit einem Padding entfernen würde. Wenn ich SetAttribute verwende, um meine ursprüngliche Klasse zurückzusetzen, wenn der Timer aufgerufen wird, ist das Bild wieder an der Position, die ich möchte. Ich musste auch die gleiche Padding-Menge in '@keyframes animalfade' hinzufügen, da es sonst am Anfang der Animation ein wenig springen würde. –