Pasquale D’Silva’s Artikel Transitional Interfaces hat wirklich die Runde gemacht. Es ist eine kurze Lektüre, die einen wichtigen Punkt hervorhebt. Übergänge und Animationen können mehr als nur Augenfutter sein. Sie können Ihrem Gehirn einen Hinweis darauf geben, was auf einer Seite geschieht.
Wenn ein Listenelement in eine Liste eingefügt wird, anstatt plötzlich zu erscheinen, macht eine Animation, die die Liste verschiebt, um Platz zu schaffen, extrem deutlich, was vor sich geht. Ansonsten ist es ein Augenblick und schon verpasst.
Die animierten GIFs im Artikel machen es möglich, also schauen Sie sich das an.
Pasquale hat nicht gesagt, tun Sie dies jedes Mal genau so! Aber es sind schöne Beispiele, also dachte ich, ich versuche, sie im Web umzusetzen.
Check out the coded examples of transitional interfaces on CodePen.
Nichts Bahnbrechendes, aber ein paar Tricks im Spiel.
Bei den Beispielen zum Hinzufügen von Listenelementen wird der Platz in der Liste geschaffen, indem die Listenelemente zunächst auf max-height: 0; gesetzt werden und eine @keyframes Animation darauf ausgeführt wird, die die max-height auf 50 erweitert. Seien Sie vorsichtig, um sicherzustellen, dass diese Zahl hoch genug ist, um den Platz mit einer angemessenen Vergrößerung des Textes abzudecken.
Die @keyframes haben nur einen to { } Block. Wenn der from { } oder 0% { } Block weggelassen wird, beginnen die animierten Eigenschaften einfach so, wie sie natürlich sind. Höhe, Deckkraft und Skalierung werden hier verwendet, um es hervorzuheben.
.new-item {
max-height: 0;
opacity: 0;
transform: scale(0);
animation: growHeight 0.2s ease forwards;
}
@keyframes growHeight {
to {
max-height: 50px;
opacity: 1;
transform: scale(1);
}
}
Im Slide-in-Beispiel wird *zuerst* der Platz in der Liste geschaffen, *dann* wird das Element in diesen Platz geschoben. Dies geschieht durch die Verwendung von zwei verschiedenen @keyframe-Animationen. Eine, um den Platz zu schaffen, die andere, um das Schieben durchzuführen. Sie können beide auf ein einzelnes Element anwenden und die Zeit, in der sie ausgeführt werden, staffeln.
.new-item {
max-height: 0;
opacity: 0;
transform: translateX(-300px);
animation:
openSpace 0.2s ease forwards,
moveIn 0.3s 0.2s ease forwards;
}
@keyframes openSpace {
to {
max-height: 50px;
}
}
@keyframes moveIn {
to {
opacity: 1;
transform: translateX(0);
}
}
Der zweite animation-Wert hat einen zweiten Zeitparameter, nämlich die Verzögerung. Die Verzögerung ist gleich der Dauer der ersten Animation. Sie laufen also nacheinander.
Im Beispiel für die Pop-up-Detailansicht wird das Listenelement durch die Verwendung von transform: scale(X); vergrößert. Dahinter wird die Liste durch die Verwendung eines Skalierungs-Transforms aus der Ansicht versteckt. Sie wird viel kleiner und verbirgt sich hinter dem erweiterten Listenelement, das sich um ein Vielfaches seiner Größe kompensiert.
Ich habe an etwas Ähnlichem gearbeitet, es scheint, als hättest du es schneller geschafft (verflucht sei die Sehnenentzündung!)
http://codepen.io/varemenos/pen/fhakE
Sowohl eine schöne Idee als auch schöner Code.
Und danke für den Link zu Transition Interface; anscheinend habe ich ihn verpasst. Gut, dass ich diesen Fehler beheben kann, es ist ein toller Artikel!
Sehr schön!
Einige davon gefallen mir, andere nicht. Meine Hauptfrustration mit Animationen ist, wenn sie langsam sind und es ohne Animation viel schneller gewesen wäre.
Zum Beispiel das letzte Listenelement. Es fühlt sich erheblich langsamer an, als wenn einfach eine Box aufpoppt. Wo hingegen das zweite Beispiel ziemlich schnell ist und die Animation mich nicht stört, da sie mich nicht davon abhält, tatsächlich etwas zu tun.
Langsame Animationen setzen eine Grenze dafür, wie schnell ein Benutzer etwas tun kann, so dass sie sich letztendlich in den Weg stellen. Wenn Sie versuchen, Animationen zu verwenden, um Persönlichkeit in Ihrer Benutzeroberfläche zu schaffen, stellen Sie sicher, dass sie so kurz wie möglich ist, damit Sie Ihre Benutzer nicht verlangsamen.
Ja, die letzte (Details View Brain Clue #2) ist bei mir unter Win 8 / Chrome wirklich langsam. Alle anderen sind ziemlich flüssig.
Danke, dass Sie die Idee in Code umgesetzt haben. Großartige Arbeit!
Das ist ein toller Beitrag, danke fürs Teilen.
Es ist so ärgerlich, dass man nicht zu
height: autoüberleiten kann. Das Setzen vonmax-heightauf einen Wert, der größer als das Mögliche ist, funktioniert, ist aber ein Hack, der mich zwingt, magische Zahlen in meinen Code einzubetten. Leider funktioniert 100% nicht als Wert für den Übergang zumax-height(ich bin mir nicht sicher, warum nicht?).Ein Ort, an dem man eine magische Zahl entfernen kann, ist jedoch
transform: translateX(-300px);, wo man300pxdurch-100%ersetzen kann. Das ist schließlich das, was Sie erreichen wollten :)Stimmt. Soweit ich weiß, wird das irgendwann behoben.
Hier ist ein kleiner Hack, den ich für dynamische Höhenübergänge gemacht habe.
li:animation
transition: height .4s cubic-bezier(1,0,0,1);
li.show
max-height:3300px;
Demo?
Es ist einfach erstaunlich, was wir nur mit CSS-Animationen machen können. Gute Arbeit!
Vielen Dank, Chris, für das Teilen einer nützlichen Idee und eines Codes. Ich arbeite gerade an einem Projekt und habe deinen Blog genau zur richtigen Zeit gefunden. :)
Liebe das Beispiel der horizontal gleitenden Listenübersicht <3
Sollte auch mit CSS-Übergängen funktionieren, indem man dem aktiven Element eine spezielle Klasse hinzufügt.
Funktioniert auf Desktops wunderschön! Ich liebe es! Ich hatte jedoch Probleme mit meinem iPad. Safari schien die Animationen nicht so gut mitzuhalten, und der Bildschirm flackerte jedes Mal, wenn ich ein Listenelement hinzufügte.
Großartige Arbeit, werde einige davon verwenden. Danke fürs Teilen :)
Dies ist eine sehr effektive Methode, außer dass ich Firefox öffnen musste, um sie zu sehen. Ich war auf IE 9 und die neuen Boxen erscheinen gar nicht. Vielleicht ist ein IE-Hack nötig (oder es sind nur die Arbeitscomputer)?
Ein IE-Hack wäre eine ziemlich schlechte Idee. Einige Feature-Erkennung ist jedoch für einen realen Anwendungsfall wahrscheinlich erforderlich.
Als ich bei meiner anderen Arbeit versuchte, die Elemente mit IE hinzuzufügen, wurden die Elemente nicht einmal hinzugefügt. Die Boxen bewegten sich ein paar Pixel nach unten, und nichts erschien. Es müsste also behoben werden.
Das Hinzufügen der vierten Dimension zu Interfaces ist ein faszinierendes Konzept, das weitere Erforschung verdient. Danke für diese Beispiele.
Schöne Arbeit hier. Solche Tricks nehmen wirklich Fahrt auf und ich kann es kaum erwarten, sie auf einigen guten Websites zu sehen.
Gibt es einen Grund, warum Sie bei reinem Erweitern der maximalen Höhe Keyframe-Animationen anstelle von CSS-Übergängen verwenden würden?
(Ich frage mich, ob, assuming Sie die Skalierungsanimation nicht durchführen, Keyframe-Animationen oder Übergänge am effizientesten wären?)
Habe gerade einen kleinen Tippfehler entdeckt
” Es ist eine kurze Lektüre, die die ”
Wow… Schönheit… wie sieht es mit der Browserunterstützung aus?