A practical guide to CSS transitions and animations
blog.prototypr.io
blog.prototypr.io
@media (prefers-reduced-motion: reduce) {}
Animations are fine but they will induce vertigo or nausea for some users. Allowing them to turn them off is a must.Yes many do. Especially the snappy part. I've removed a lot of eye candy animations coded by well meaning devs at the request of users who care about nothing more that speed.
Animations can be a nice first impression, but if you use the app daily e.g for work or data entry you know how to navigate and you want as close to instant response as possible.
Maybe a smart pattern is animate in the early days for new users then transition into a more jarring and snappier world as they become regulars.
The biggest drawback and problem I encountered is that Chrome is very, very, bad at maintaining rendering quality in certain situations. The problem is not that the element you are trying to animate gets blurry (eg. trying to animate text, it will be rendered on GPU, thus moved to its own layer, it might become blurry sometimes), but the problem is that OTHER elements on the page are affected. Try to scale-in the logo in top left of the page? Great, now the text in right sidebar starts jiggling while the animation is running. Want to turn around an image on hover? No problem, only that the SVG icons on the page now have a line artifact through them. Those issues only happen in Chrome, which seems to try too hard (and to have also tried) to optimize for performance over quality.
Some suggested fixes are:
-webkit-font-smoothing: antialised;
backface-visibility: hidden;
transform: translateZ(0);
-webkit-font-smoothing: subpixel-antialiased;
But most of the times they don't do anything or just make things worse. The only solution is usually to move your elements fractions of a pixel until Chrome is happy. The problem is that if you have a responsive website (or a container that is scaled with a transform), it's impossible to have all elements pixel-perfect aligned on all resolutions. Although they look fine when rendered normally, when adding animations things will get blurry. And because it does not happen in other browsers, it means it's not a limitation of the GPU or monitor to display sub-pixel content.
eg: https://bugs.chromium.org/p/chromium/issues/detail?id=521364
I've been using them opposite/wrong (as their names led me to) all along?
Distracting, annoying, slow, increase webpage resource use, induce nausea in a fair number of users... ask yourself, are they really necessary or do you think they just look "cool"? If it's the latter, probably don't use them.
This will leave a gap below the elements
> If all elements are same height, or the height is known beforehand you can just hardcode that translate value into the animations.
The problem is that there's rarely if ever a case when you know the height of all elements on a page :(
Recursively apply same logic to rest of page!
https://bugs.chromium.org/p/chromium/issues/detail?id=20574
It's really fun because even a will-change: transform will trigger it.
1. https://github.com/Tendrl/documentation/wiki/Best-Practices-...
This is obviously false. Ideally test with an Arduino or other hard-realtime capable system, but assuming your computer doesn't have absolutely terrible latency you can still test with it. Disable your compositor if you're using one, and use a low latency terminal with uncapped framerate like xterm.
The popular method of running "sleep 0.1" alone is not actually a fair test, because a newline is printed immediately on running the command, so you might just be seeing the flicker and not the latency. A better method is comparing:
read -n1 -s -p "Press a key: " ; sleep 0.0; echo -n "0.0" ; sleep 2 ; echo ""
read -n1 -s -p "Press a key: " ; sleep 0.1; echo -n "0.1" ; sleep 2 ; echo ""
To me the difference is clearly visible.This works, but it seems a little glitchy in some environments. I'm wondering if it's too much to make DOM modification and then trigger a transition in the next tick.
Do it entirely css. if you use a have a keyframe animation applied and remove display:none on clicking. The animation will fire immediately. Unlike trying to transition it without using keyframes.
example: https://jsfiddle.net/mr029o7h/ (sorry if its a bit messy haven't done this for a while)
> I mean, does anybody really enjoys a stiff, snappy UI?
enjoys => enjoy
I use a programme picker that is a poor Netflix clone. Selecting down to the next row is immediate, and selecting right for the next show within a row also immediately jumps.
Vertical and horizontal smooth scrolling (a type of animation) would improve the UI (caveat: unless too slow of course).
1. bounce of badge when message received and badge number increases (no sound). A la Mac.
2. After modality viewing item in list on mobile, when returning to list highlight the item to show what you have just edited (easy to lose place, animated highlight helps show new summary).
3. On closing a drawer, animate the closing so you don't lose view of next item.
I loath animations (and I really loath coding them) but I will use them if I think it improves the UI, if they are fast, and I don't use them for "design" (I'm an engineer not a designer!).
Long animation times are _such_ a common rookie mistake, because the UI dev (or their manager) wants to notice the animation, when in the vast majority of cases, it would be better for the animation to be nearly invisible.
I tried making a new account and naming it <font color="#ee00ff">accountname</font> but HN doesn't allow characters like '<' so that didn't work.
https://github.com/minimaxir/hacker-news-undocumented#green-...
Good thing that it doesn't, otherwise the next deadline would be about XSS injection on Hacker News.