[HN Gopher] An interactive guide to CSS transitions
       ___________________________________________________________________
        
       An interactive guide to CSS transitions
        
       Author : tomaszs
       Score  : 179 points
       Date   : 2021-02-26 13:27 UTC (9 hours ago)
        
 (HTM) web link (www.joshwcomeau.com)
 (TXT) w3m dump (www.joshwcomeau.com)
        
       | grenoire wrote:
       | "Properties like margin-top can't sub-pixel-render, which means
       | they need to round to the nearest pixel, creating a stepped,
       | janky effect. transform, meanwhile, can smoothly shift between
       | pixels, thanks to the GPU's anti-aliasing trickery."
       | 
       | This is a Chrome-case, Firefox (on Windows) aligns both cases to
       | the pixel grid.
        
         | alvarlagerlof wrote:
         | Animating margin is bad for other reasons too. Transform and
         | opacity is significantly faster.
        
       | yawaworht1978 wrote:
       | Nice graphics and all, but he has some weird bug. If you are at a
       | scroll position somewhere in the middle and click the
       | cheeseburger menu (2 lines instead of 3 I will call it
       | cheeseburger) and close the menu again the content in the
       | background will scroll up and then down to the previous scroll
       | position for no good reason.
       | 
       | Ps....The subscribe cta button has one of the nicest designs I
       | have ever seen, wow.
        
       | sevencolors wrote:
       | Josh, been really appreciating the quality of your posts.
       | 
       | Enjoy how you break down what's happening and also throw in some
       | "fun facts" of the reasons why something came to be.
       | 
       | Like the will-transform property, have always used it but didn't
       | realize it came out of people hacking the transform3D property to
       | get GPU acceleration
        
         | chrismorgan wrote:
         | I dislike the will-change property and wish they'd left it at
         | the obviously-a-hack `transform: translateZ(0)`, because the
         | whole thing should simply not be necessary-- _everything_
         | should be rendered on the GPU, and that's the clear way
         | forward; formalising the will-change property legitimised the
         | prevailing architecture at a time when Servo had already
         | demonstrated with WebRender that it was possible to do better;
         | and so Firefox now uses WebRender and does all rendering on the
         | GPU (on most platforms), so that will-change is, I think,
         | simply rendered obsolete (except for platforms that it can't
         | yet GPU-render on, because GPUs and their drivers are _so_
         | awful). See https://hacks.mozilla.org/2017/10/the-whole-web-at-
         | maximum-f... for more info on the whole WebRender performance
         | thing.
        
       | [deleted]
        
       | mraza007 wrote:
       | In my opinion this was a great guide. I'm someone who sucks at
       | writing transitions in css so this definitely helped
        
       | mushishi wrote:
       | Funny thing, just yesterday happened to use these for React, for
       | the first time.
       | 
       | Initially I tried react-spring, but couldn't get it work its
       | transition without triggering rendering of the enclosing
       | component way too many times, and what baffled me
       | nondeterministically. I tried to minimize the problem but it just
       | seemed to be part of it. (native attribute didn't work even with
       | animated.div wrapper). Otherwise seemed like a nice animation
       | package.
       | 
       | Ended up using (previously?) official react-transition-group and
       | voila it worked very nicely with a list of tens of items.
       | 
       | Animation can make the UI much more easy to grok for the user.
        
       | chrismorgan wrote:
       | One crucial thing that this article misses out is a key way in
       | which Firefox is currently better than all other production
       | browsers: its WebRender renderer (incubated in Servo), where
       | _everything_ is rendered on the GPU. This is enabled for most
       | users, but not all yet because GPUs and GPU drivers are amazingly
       | bad.
       | 
       | Properties like background-color are not expensive to animate,
       | the same cost as properties like transform and opacity.
       | 
       | The "curious little imperfection" of text rendering changing
       | slightly simply doesn't occur.
       | 
       | will-change is obsolete, effectively becoming a noop.
       | 
       | Properties like margin-top and top can animate just as smoothly
       | as a transleY transformation. (And it will be calculated
       | subpixelly, though Firefox deliberately still snaps both to
       | pixels, yet a little differently for nuanced layout reasons; so
       | there can still be a very subtle difference between the two, and
       | it's definitely browser-dependent. But most of the rendering
       | difference between the two in non-Firefox browsers is
       | categorically a _bug_ , not a feature.)
       | 
       | It would be good to get all of this mentioned. There are a couple
       | of other related simple factual errors, such as "One is done
       | using margin-top, so it can't be hardware accelerated."--margin-
       | top _can_ be as hardware accelerated as everything else.
       | 
       | But this is my only quibble with the article at this time. The
       | rest is excellent. I was even getting near the end, worried that
       | hover infinite loops wouldn't be mentioned, but the doom flicker
       | is there. Good stuff.
        
       | waprin wrote:
       | Thanks so much for this amazing guide!
       | 
       | I had a side project that I was desperate to get across a finish
       | line, and I rarely do any CSS at a day job, so I hired a
       | freelancer just to help me get a few CSS issues fixed. One of the
       | things he did was add a few CSS transitions, and the smallest
       | transitions can turn a boring, static site into feeling slick and
       | modern. Simple things like just having elements fade in a little
       | when they appear make a huge visual difference.
       | 
       | As someone who's very far from a talented designer, I realized,
       | transitions are such great value. You can learn a few CSS
       | transition tricks and elevate the perceived design skill of your
       | project greatly relative to the effort spent on learning them.
       | 
       | I'll be using this!
        
       | prezjordan wrote:
       | I wish had both the skill and energy to put the sort of care and
       | attention to detail into my work that Josh does. Really, really
       | great stuff.
        
       | jopsen wrote:
       | I love css transitions, but ending a transition with "display:
       | none" is somehow still a pain.
        
         | inopinatus wrote:
         | I use visibility instead whenever possible, since visibility
         | can be included directly in a transition property, making it
         | ideal for toggles and modal backdrops.
        
         | ketzo wrote:
         | "opacity: 0;" if you don't want to actually remove the box from
         | the page
         | 
         | "display: none;" if you do
         | 
         | though as with all things CSS, tends to be a bit easier said
         | than done
         | 
         | (this is sort of a wild shot in the dark guessing at what
         | you're talking about, but I've done a lot of CSS and it feels
         | like a good guess)
        
       | rajvosa07 wrote:
       | Super helpful, thanks!
        
       | szopa wrote:
       | Delightful article. I only wish I found it the day _before_ I
       | needed to figure CSS animations on my own, not they day _after_
       | :) This is by far the best piece I found on the subject.
        
       | WORMS_EAT_WORMS wrote:
       | I don't think you could get a better written article and demos
       | here. Excellent job, a true piece of art.
       | 
       | I think a second part or another thing to talk about that is
       | often missed is weirdness with nested element transitions and
       | inherited transitions on elements. Can be a bit to wrangle for
       | beginners and get to feel smooth.
       | 
       | Besides that, thanks for the resource. I will point this to many!
        
         | tailspin2019 wrote:
         | Agreed. This is an exceptional piece of work. Very engaging
         | too.
         | 
         | I'll be referring back to this.
        
         | [deleted]
        
       | systemvoltage wrote:
       | IMO animations are a hurdle more than an aid. macOS has so many
       | long animations that it takes everything longer. 300ms might not
       | be long, but it adds up. For first few times, animations are
       | cool. But the novelty wears off when you need to do the same
       | action 80th time.
       | 
       | Animations regardless of the domain should be used extremely
       | sparingly. It's appalling that JS frameworks such as Svelte has
       | this built in. It's only going to encourage more animations.
       | 
       | I can only imaging how much faster macOS would feel if for
       | example expose had no animation. Forget about better processors
       | and GPU, the easiest way to make the entire OS faster by 500%
       | would be to turn off all animations. Unfortunately, Apple doesn't
       | allow us. Even accessibility settings for "reduce motion" just
       | uses fade-in/out animation instead. I really don't buy the
       | arguments for animation "it gives context to where things come
       | from and where they pop out". I find that disputable, sure good
       | for initial familiarity but painful the second time.
        
         | _greim_ wrote:
         | > Animations regardless of the domain should be used extremely
         | sparingly.
         | 
         | Agreed. I once heard the expression "animations should be felt,
         | not seen." This really resonated with me. For example, dialing
         | the transition time down to 30ms gives the user the experience
         | of something vanishing or the color immediately changing, but
         | the effect is to soften what is otherwise the jerky immediacy
         | of computers.
        
         | m463 wrote:
         | I wonder if this is like the first someone makes a presentation
         | with powerpoint or makes their first movie with imovie.
         | 
         | Of COURSE they add the fancy scene or slide transitions. (at
         | first)
         | 
         | and then you learn that you should just cut.
        
           | 1123581321 wrote:
           | Why do you think Apple hasn't learned that? They employ
           | designers, artists and animators with decades of experience.
           | 
           | Similarly, why are experienced designers adding transitions
           | to their site that people wouldn't add in their second or
           | third site build?
        
         | herrvogel- wrote:
         | You can change the animation time from the terminal [1]. There
         | was some awesome list on GitHub that had a nice script that
         | changed most system animation to a minimum, but I can't find it
         | right now.
         | 
         | [1] https://osxdaily.com/2012/02/14/speed-up-misson-control-
         | anim...
        
       | djoldman wrote:
       | Finally!
       | 
       | .btn { will-change: transform; }
       | 
       | thanks, man that was annoying.
        
       ___________________________________________________________________
       (page generated 2021-02-26 23:00 UTC)