Es gibt eine gewisse Debatte, ob diese ausgefallenen Übergänge und Animationen, die CSS3 uns bietet, in CSS gehören. Man könnte argumentieren, dass sich bewegende Dinge "Verhalten" und nicht "Design" sind und daher zu JavaScript gehören. Ich widerspreche dieser Ansicht, und dass Animationen definitiv "Design" sind, und wenn wir diese Dinge in CSS halten können, sollten wir es tun. Daher aktualisiere ich diese Idee (siehe Links oben), um CSS3 Keyframe-Animationen zu verwenden.

Demo anzeigen Dateien herunterladen
Keyframe-Animation deklarieren
So deklariert man eine Keyframe-Animation. Wir nennen unsere "STAR-MOVE".
@-webkit-keyframes STAR-MOVE {
from {
left: 0;
top: 0;
}
to {
left: -10000px;
top: -2000px;
}
}
@-webkit-keyframes STAR-MOVE {
from {
background-position: 5% 5%
}
to {
background-position: 1300% 600%
}
}
Man ist nicht auf "from" und "to" beschränkt. Man kann mehr davon einfügen, basierend auf Prozentsätzen. Wie zum Beispiel:40% { }was animiert wird, wenn die Animation zu 40 % abgeschlossen ist.
Unsere Animation ist sehr einfach, wir animieren die Position des Hintergrundbilds und ziehen die Elemente im Grunde nach oben links. Nicht jede Eigenschaft kann animiert werden, aber im Allgemeinen kann alles mit einem numerischen Wert (einschließlich Farben) animiert werden. Aber man kann zum Beispiel keine Schriftart von Helvetica auf Georgia animieren.
Diese Eigenschaften überschreiben alle vorherigen Einstellungen für die angegebenen Eigenschaften. Da zum Beispiel IE diese nicht unterstützt, möchten Sie vielleicht die Eigenschaften mit normalem CSS so einstellen, dass sie sinnvoll sind, wenn keine Animation vorhanden ist. Wissen Sie dann, dass diese Eigenschaften mit den From/0%-Eigenschaften der Animation überschrieben werden.
Keyframe-Animation verwenden
Wir haben drei "Ebenen" von Sternen, die jeweils den gesamten Bildschirm mit einer sich wiederholenden, alpha-transparenten Schicht aus grafischen Sternenhintergründen bedecken. Wir können dieselbe Animation auf alle drei divs anwenden, nur mit unterschiedlichen Dauern.
#background {
background: black url(../images/background.png) repeat 5% 5%;
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
z-index: 100;
-webkit-animation-name: STAR-MOVE;
-webkit-animation-duration: 200s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
}
#midground {
background: url(../images/midground.png) repeat 20% 20%;
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
z-index: 200;
-webkit-animation-name: STAR-MOVE;
-webkit-animation-duration: 150s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
}
#foreground {
background: url(../images/foreground.png) repeat 35% 35%;
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
z-index: 300;
-webkit-animation-name: STAR-MOVE;
-webkit-animation-duration: 100s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
}
Die größeren Sterne bewegen sich schneller (sie sind "näher" in der Illusion und sollten daher schneller vorbeiziehen). Sie scheinen sich schneller zu bewegen, weil die Dauer der Animation kürzer ist und sie daher eine größere Entfernung in kürzerer Zeit zurücklegen müssen.
Animationen verwenden "Easing"-Funktionen. Das heißt, eine mathematische Formel wird angewendet, um zu steuern, wie schnell die Animation "an Geschwindigkeit gewinnt" und wieder abnimmt. Ohne Easing könnten Animationen ruckartig und unbeholfen aussehen. Der Standard in Webkit ist "ease", der eine Animation langsam beschleunigt und dann langsam wieder abbremst. In diesem speziellen Beispiel war das nicht sinnvoll, denn am Ende der 100er-Jahre, die die größten Sterne nutzen, ist die Animationsgeschwindigkeit so langsam, dass die Sterne dahinter schneller vorbeiziehen (seltsam). Beachten Sie also im obigen Code, dass wir das Easing auf "linear" zurückgesetzt haben. Eine vollständige Liste finden Sie hier.
Browser-Unterstützung
Derzeit nur WebKit-Browser (Safari, Mobile Safari, Chrome). Ich weiß, dass Firefox 3.7 Unterstützung für Übergänge haben wird, aber ich bin mir nicht sicher, ob er ein eigenes Präfix für Keyframe-Animationen haben wird oder nicht. Wenn Sie es wissen, lassen Sie es mich wissen.
Sehr guter Beitrag! Danke! Sehr hilfreich
Coole Sache, ich bin nur besorgt, dass dies uns auf einen Weg führen könnte, den wir schon einmal gegangen sind und von dem ich glaube, dass wir uns erholt haben. Ich spreche von Scrolling-Marquees, blinkendem Text, fertigen JS-Animationsskripten, nutzlosen Flash-Animationen... Ich möchte denken, dass wir gelernt haben, verantwortungsbewusst mit solchen Animationen umzugehen, aber nach der Vergangenheit mache ich mir Sorgen.
Jemand hat neulich einen Kommentar gemacht, den ich lustig und treffend fand, was das angeht.
Sollten wir dann auch die Möglichkeit für Browser deaktivieren, Bilder darzustellen? Leute können ziemlich geschmacklose Dinge mit Bildern machen. Vielleicht sind die Leute nicht verantwortungsbewusst genug damit und wir sollten sie nicht zulassen.
Nun ja, aber Sie können nicht leugnen, dass der Proof of Concept, den Sie hier zeigen, dem alten Geocities-Klischee sehr nahe kommt.
Ich bin froh, dass Sie diese Dinge erschaffen, um uns zu zeigen, was mit neuen Technologien möglich ist, aber manchmal frage ich mich nur: warummmmm-yy-yy?! :)
Es steht außer Frage, dass es in den nächsten 1 bis 5 Jahren einen riesigen Rückfall zu den Websites geben wird, die wir Mitte der 90er Jahre gesehen haben.
Ich denke, das ist ein ziemlich süßer Proof of Concept.
@ Dom, während ja, manche kopieren und fügen einfach ein und kehren zu den 90ern zurück, denke ich, was Chris hier tut, ist, uns die Möglichkeiten zu zeigen. Schauen Sie also über die Sterne hinaus und stellen Sie sich all die anderen Dinge vor, die mit dem Parallax-Effekt erreicht werden könnten.
nicht nur das, sondern es demonstriert die Kraft von CSS3.
das macht mich begeistert von den Möglichkeiten.
Wie Dom erwähnte, ist es "ein Weg, den wir schon einmal gegangen sind und von dem ich glaube, dass wir uns erholt haben." Der entscheidende Teil dort ist, dass wir uns davon erholt haben. Wir sollten unsere Fähigkeiten nicht einschränken, nur weil es ein Missbrauchspotenzial gibt. Technisch gesehen kann ich immer noch eine Seite erstellen, die mit Tabellen aufgebaut und mit Inline-CSS gestaltet ist, wenn ich möchte. Sollen wir die dann auch abschaffen? Natürlich nicht, denn wir haben gelernt, sie für das zu nutzen, wofür sie gemacht sind, und das werden wir auch mit all den ausgefallenen Funktionen von CSS3 tun.
Beachten Sie, dass wir Abstraktionsebenen erstellen können, die jeweils Funktionen derselben Sprache enthalten. Mit anderen Worten, vielleicht enthält CSS3 einige Funktionen, die an die Zehen von JavaScript stoßen ... na und? Wenn Ihre Interaktionen getrennt gehalten werden, so wie unser Inhalt und Stil in ihren eigenen Ebenen liegen, ist die Sprache irrelevant. Vielleicht spricht hier mein Desktop-Anwendungsbackground, aber wenn man es gewohnt ist, Software in Schichten zu erstellen, auch wenn man in einer Sprache bleibt (wie C#), sind diese Probleme mental bereits einigermaßen gelöst.
Nette Demonstration :)
Nicht sehr praktisch, aber nett.
Igitt.
Diese Animation hält den Google Chrome Renderer bei 75 % CPU-Auslastung (OS X) am Laufen.
Ich habe etwa 12 % mit einer etwas veralteten Windows-Maschine.
Ich sehe sogar 80 % auf einem 8-Kern Mac Pro. Aber es ist glatt wie ein Babypopo und verlangsamt nichts anderes. Ich habe gehört, dass Webkit-Animationen hardwarebeschleunigt sind (im Gegensatz zu einer JavaScript-Animation, die wahrscheinlich noch intensiver wäre und keine Hardwarebeschleunigung hätte).
UPDATE: Ich glaube, ich konnte die CPU-Effizienz der Animation ein wenig steigern. Anstatt die Größe des Bereichs zu vergrößern (im Grunde das, was die Werte für top und left taten), animiere ich nur die background-position. Es scheint eine Verbesserung zu sein, wenn ich meinen eigenen Aktivitätsmonitor beobachte. Wenn jemand beide Methoden selbst ausprobieren und mir Bescheid geben möchte, wäre das großartig. Ich bin mir nicht sicher, wie man die Metriken für so etwas am besten ermittelt.
60 % eines Kerns in Safari MacBookPro. Beeindruckende Demo, aber ich bin mir nicht sicher, ob es die CPU-Zyklen wert ist. Fühlt sich ein wenig schwer auf der Kostenseite (CPU-mäßig) an.
Wenn ich nach unten scrolle, sehe ich nur die halbtransparente Fläche des Inhalts. Der Rest des Hintergrunds ist weiß.
Ich benutze den neuesten Safari unter Mac.
zweites für Chrome unter Win
nicht zu schwer zu lösen.
Ich stimme auch den Leuten zu, die diesen Animationen nicht zustimmen (auch dem 3D-Kreisding (jQuery)), diese netten Effekte sind zwar schön, aber sie verbrauchen viel CPU. Ich frage mich, wie die Animation auf meinem Netbook aussehen würde.
zum Beispiel
#background {
background: black url(../images/background.png) repeat 5% 5%;
position: fixed;
...
}
gut, dass diese Animation sowieso nicht in FF funktioniert, denn damit wird es wahrscheinlich extrem laggy sein.
ignoriere es, man kann sehen, wo die andere Animation beginnt.
na ja.
Immer wenn ich mir die aktuelle Auswahl an CSS3-Animationen ansehe, bin ich erstaunt, wie einfache, *2D*-Animationen die CPU belasten.
Es tut mir leid, aber ich denke, diese Effekte bewegen uns zurück in die 90er, als die Leute noch nicht herausgefunden hatten, wie man JavaScript besser statt schlechter einsetzt...
Es gibt noch einen wichtigen Teil bei der Verwendung von CSS dafür anstelle von JavaScript: Hardwarebeschleunigung.
Das bekommen Sie nicht mit JS-Animationen, die im Grunde nur das DOM jede Millisekunde ändern und jedes Mal einen Browser-Neuzeichenten erzwingen.
Es ist wichtig zu beachten, dass Sie es auch nicht in CSS erhalten, das das Boxmodell (Margin, Position, Breite) manipuliert, anstatt die neuen CSS-Transformations-Eigenschaften zu verwenden.
Tolle Demonstration.
Ich weiß nicht, warum alle so Angst haben, dass wir auf einen gefährlichen Weg zurückkehren. Flash, JS, CSS und HTML können alle dazu verwendet werden, horrende Benutzererlebnisse zu schaffen. *Meistens* hat sich die Branche jedoch seit den Tagen des blinkenden Textes und der Scrolling-Marquees drastisch weiterentwickelt.
Dennoch müssen wir vorwärts gehen und mit neuen Technologien experimentieren, sobald sie auftauchen ... es ist der einzige Weg, sie gut genug zu verstehen, um sie verantwortungsbewusst einzusetzen.
Mach weiter so, Chris!
Ich finde diesen Effekt geschmacklos und er erinnert mich an meinen ersten Website-Entwurf in MS Frontpage. Aus diesem Grund bin ich ein großer Fan!
Für alle, die etwas Negatives dazu zu sagen haben: Nun, Sie wissen, was Spiderman's Vater sagte: "Mit großer Macht kommt große Verantwortung." Ich denke, CSS und JS verleihen Webdesignern große Macht! Gehen Sie nur nicht verrückt damit um.
Chris... Ich sehe das als einen coolen Ausflug in Ihr Denken und die subtilen Nuancen des Codings. Allerdings, entschuldigen Sie, aber dieser Effekt lässt mich irgendwie kalt und ich sehe keinen großen Nutzen dafür – vielleicht, weil ich den "Schlüssel" zum "Größenändern des Browsers" finden musste, um dann absichtlich etwas zu tun, das ich beim Surfen im Internet fast nie tue.
Wenn es aber beim Scrollen funktionieren würde – das ist etwas, das ich wirklich fast immer tun muss –, dann wäre es einer dieser "subtilen" Effekte, die einen überraschenden Mehrwert bieten würden.
Ich mag Ihre Zwangsgedanken, alte Beiträge zu "bereinigen".
Man könnte den Parallax-Effekt mit Scrollen realisieren, indem man die Scrollposition des Bodys auf Änderungen überwacht und die Hintergrundposition basierend darauf plus einer Art Delta-Multiplikator einstellt. Das wäre verdammt genial.
Ich überlege, einen solchen Trick auf meiner Website zu verwenden, aber mit einem subtileren Effekt, damit er nicht so auffällt / nervt.
Animation sollte nicht vom Inhalt ablenken.
Wurde das Problem eines leeren Hintergrunds unterhalb des "Fold" auf der Demoseite behoben? Ich sehe es immer noch in Safari 4.0.5 (Windows 7).
Tolle Tutorials, aber meine Anmerkung ist, dass die Bewegung nicht flüssig genug ist, wie kann ich sie flüssig machen?
Hallo Chris,
Bist du noch da?
tolles Tutorial – habe eins gebaut, nur um zuzusehen, wie es läuft! Eine Sache, die mir aufgefallen ist: Wenn es auf die Seite angewendet wird, die Elemente hat, zu denen man herunterscrollen muss (d. h. die Seite ist höher als der Bildschirm), dann werden die Hintergrundbilder nicht über die gesamte Seite gekachelt (el) – sie decken nur den Teil ab, den man ursprünglich sehen konnte. Ich kann nicht herausfinden, warum! Ich sehe zum Beispiel nicht, dass es auf "fixed" gesetzt ist? Jedenfalls habe ich die üblichen Stellen durchforstet und immer noch keine Antwort gefunden. Können Sie: helfen;?
übrigens, wenn ich die obigen Beiträge/Fragen/Wutausbrüche lese, ist es schwer zu glauben, wie konservativ die Leute sind! All dieses Gejammer über "zurück in die Zukunft"! Wenn diese Jungs ihren Willen hätten, würden wir immer noch Radio hören oder höchstens Schwarz-Weiß-Fernsehen schauen! Da die Leute aus vielfältigeren Gründen online gehen, suchen sie (und ich) nach mehr und besseren Angeboten als die düsteren, stillen und stummen Seiten, die diese Jungs in der Vergangenheit produziert haben. Der Tag des Puritaners ist vorbei – die Zukunft kommt....
Cheers.