▲That sounds interesting but it would be a whole lot more interesting if the page was itself an example of said effect!
reply▲I was also looking for examples.
reply▲i was waiting for the effect to show up
reply▲How does this compare to the classic css-native parallax effect? Before the scroll timeline APIs you'd use the "perspective" css property to create a container where the z plane is n pixels away from the screen, and then position each layer within it at a different z distance using transform: translateZ
That method is GPU accelerated too, so it is performant compared to some js solutions, and has worked well in every browser for around a decade
I like the idea of the scroll-timeline though, just keen to understand what the advantage is for this
reply▲OP here, thanks for asking. While the `perspective` technique works too, it has the downside of needing a careful combination of scroller elements and properties.
This approach adds a single class to the image container and that's it. Plus you can control many aspects of the animation such as entry/exit ranges, and make it control other properties like opacity or color, for example.
I know browser support is still lacking, but it will get there eventually. I'm not using this in production code yet, but I think it's useful to experiment with these new CSS APIs.
reply▲This method should still support GPU acceleration, as `transform` (or rotate/scale/etc.) is the only property being animated. The benefit of animation-timeline seems to be that it's much easier to set up than a CSS perspective context.
reply▲No doubt quite a few folk with the same question. Keen to understand performance tradeoffs.
Obvious comparison note would be that the "new" method currently enjoys somewhat limited browser support (no Firefox without a flag, and only since Safari 26)
reply▲iainmerrick6 hours ago
[-] I was wondering the same thing. That translateZ is a bit fiddly to get right, so I could believe this is a bit easier to use, maybe? And presumably this could be used for other properties besides position, like colors, opacity or blurs.
reply▲reply▲reply▲For people saying it's not working in any browser - do you have some kind of reduced motion preference setting turned on? I can imagine that would have an effect on something like this and it's definitely working in Chrome for me.
reply▲Yes... there's a media query in the codepen disabling animation for people with reduced motion enabled.
reply▲It's been behind a flag for ages. Maybe because of performance issues?
reply▲goodmythical1 hour ago
[-] Enabling (layout.css.scroll-driven-animations.enabled) and refreshing the codepen gives a "we crashed this to prevent a crash from an infinite loop" clicking to allow the infinite loops allowed me to see the animation.
Fedora 44 Kernel: x86_64 Linux 7.0.10-201.fc44.x86_64 Firefox 151.0.2
reply▲Noticed the same thing. In Mac Safari it works without setting any flags.
reply▲Doesnt work on any browser for me
reply▲WithinReason5 hours ago
[-] tried 4 browsers, didn't work in any of them
reply▲FWIW it works on iPhone safari
reply▲I don’t think it did for me. Are you on iOS 26?
reply▲Only worked for me on mobile (vivaldi android) not on vivaldi / chrome / edge on Desktop.
reply▲What an age where we need a pile of javascript as well as a bot check to demo a simple CSS trick.
reply▲The JS and bot check are for making additional functionality, beyond just showing the example, work easily. I.e. editing and sharing edits from a browser. If all you want is a static example, feel free to make it without these things.
reply▲thomasikzelf5 hours ago
[-] You can make some really cool stuff with css scroll animations. I used SVG paths with a scroll animated dash offset to draw an image while scrolling. Zero javascript, it feels so smooth.
https://thomaswelter.nl (the background)
reply▲oh that's cool!
Can only see it on chrome though =/. I switched to Safari as the lesser of two data-harvesting evils. Or rather, with an iPhone I've already chosen my overlord. I also switched to Kagi. Trying to deGoogle myself.
reply▲Android Firefox: there is no background image.
reply▲thomasikzelf4 hours ago
[-] firefox android does not support CSS animation-timeline, and firefox desktop needs layout.css.scroll-driven-animations.enabled. This probably should not be used for any critical features.
reply▲I played around with this API some time ago. It’s simple and high-performance, but one feature I wish existed is damping. Scroll-driven animations are tied directly to the scroll timeline, so there’s no concept of the parallax object “catching up” to the scroll progress over, say, one second. From what I remember, `animation-timing-function` feels weird when you scroll, so it’s not the right solution. GSAP offers this, but it’s JS-only.
reply▲It would be awesome to put an interactive example right in the article.
reply▲I was expecting a demo on the linked page itself.
Interesting to let Codex or Claude Code do it :)
reply▲Using css perspective for parallax has been around for years and is much simpler code.
reply▲there is a special place in hell for pages like these that don't show examples
reply▲rohitsriram5 hours ago
[-] Love the one-variable design where scale and translate stay in sync automatically, just wish Firefox would get off the flag already.
reply▲I get motion sickness from this specific effect. Especially on high refresh rate screens.
reply▲In a world where it's increasingly overlooked, I'm glad the author mentions disabling it respecting user settings. I do think it should be reversed and only enabled with the `@media (prefers-reduced-motion: no-preference)`, but that is the opinion of someone who gets negative value from animations and is bemused by how much dev and compute time is spent on them.
reply▲could this be combined with a sprite like image that shows a slightly different angle of the image with each step
reply▲i_am_a_peasant4 hours ago
[-] Idk about anyone here but I find the effect disorienting.
reply▲Yes. I'm a little more sensitive than average, but not enough to turn off animations, and this is uncomfortable.
reply▲Great. I tried the Google examples a while ago and got nowhere with it, time for another go, within the netherworld of SVG, to map to several different layers.
reply