Wie schiebe ich divs vom Bildschirm in ein absolutes Layout mit CSS-Übergängen?

7

Ich habe ein Gitter aus absolut positionierten divs (das Gitter besteht aus unterschiedlich geformten Rechtecken, die zusammenpassen, um ein großes Rechteck zu bilden).

Ich versuche, die Anzeige dieses Gitters zu animieren, indem ich alle einzelnen Rechtecke außerhalb des Bildschirms in das Gitter "fliege". So fliegen die Rechtecke links von links, die rechten rechts von rechts usw.

Ich verwende CSS3-Übergänge, und wenn ich von oben oder links einfliege, funktioniert es perfekt. Ich benutze nur negative Ränder, um sie außerhalb des Bildschirms zu positionieren und animiere sie dann, um zu margin-left (oder margin-top) = 0 zu wechseln ( zB die ursprüngliche / korrekte Position).

Dies scheint sinnvoller zu sein als die Verwendung von Transformationen, aber bitte korrigieren Sie mich, wenn Sie glauben, dass es einen Grund gibt, warum Transformationen aus irgendeinem Grund besser funktionieren / besser funktionieren?

Aber das wird offensichtlich nicht funktionieren für Margin-Right / Margin-Top und so wollte ich sehen, ob irgendjemand vorschlagen kann, was der beste Weg ist, dies von rechts und unten zu erreichen? Ich kann den Elternüberlauf machen: Versteckt und animiere die linken / oberen Positionen, die den gleichen Effekt haben, aber ich wollte sehen, ob es eine generische Lösung gibt, die negativen Margen entspricht, um separate Regeln / Positionen für jede Aus und auf dem Bildschirm zu vermeiden Ausführung? zB wenn ich negative Ränder benutze, kann ich den gleichen negativen Rand auf alle Felder anwenden, die von derselben Seite einfliegen, ohne irgendeine elementspezifische Markierung zu haben (aber wenn ich die obere / linke animiere, benötigt jedes Element seine eigene "Offscreen" Position relativ zu seiner endgültigen Position, so dass es von der richtigen Stelle einfliegt).

Alternativ, wenn es im Allgemeinen einen besseren Weg gibt (CSS3 ist in Ordnung!), würde ich es gerne hören!

    
deshg 19.06.2014, 15:00
quelle

2 Antworten

20

Animiere nicht mit Rändern, animiere immer mit Transformationen, das ist ihre beabsichtigte Verwendung. Hier ist ein großartiger Artikel dazu von Paul Irish

Warum ist das Verschieben von Elementen mit translate () besser? Ссылка

Verwenden Sie overflow-x: hidden, um die divs, die von rechts kommen, auszublenden. Hier ist eine Geige, die ich gemacht habe, um zu zeigen, wie man mit der Transformation animieren kann, ohne Pixelwerte anzugeben;

Ссылка

HTML

%Vor%

CSS

%Vor%

JAVASCRIPT

%Vor%     
Michael 19.06.2014, 15:26
quelle
2

Normalerweise bietet transform: translate... eine bessere Leistung für die meisten Browser, da sie versuchen, die Animation mit der GPU zu rendern.

Sie können diese Ergebnisse von jsperf überprüfen.

Wie auch immer, eine andere gute Lösung (ohne Javascript) wäre, die Animation komplett in CSS mit @keyframes und animation: Eigenschaft anzuhängen.

Weitere Informationen zu diesem Thema finden Sie in Artikel .

Aus den Richtlinien können Sie

lesen
  

Verwenden Sie nach Möglichkeit CSS-Keyframe-Animationen oder CSS-Übergänge. Der Browser kann hier das Malen und Compositing optimieren.

    
drinchev 19.06.2014 15:11
quelle