CSS-Native Parallax Effect (dan-webnotes.com)

90 points by dandep 6 hours ago

31 comments:

by baliex 5 hours ago

That sounds interesting but it would be a whole lot more interesting if the page was itself an example of said effect!

by jonahx an hour ago

Or even linked to one!

by dsmurrell 4 hours ago

I was also looking for examples.

by yashD18 4 hours ago

i was waiting for the effect to show up

by mpeg 5 hours ago

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

by semolino 29 minutes ago

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.

by dandep 4 hours ago

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.

by som 5 hours ago

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)

by iainmerrick 5 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.

by phelm 5 hours ago
by frereubu 5 hours ago

There's me scrolling up and down and thinking "hey, it's not working!" But it's behind a flag on Firefox: https://caniuse.com/?search=view-timeline-name

by Mashimo 5 hours ago

Only worked for me on mobile (vivaldi android) not on vivaldi / chrome / edge on Desktop.

by account42 5 hours ago

What an age where we need a pile of javascript as well as a bot check to demo a simple CSS trick.

by sheept 35 minutes ago

A parallax effect has also long been possible with CSS 3D transforms. Here's a demo,[0][1] from the same person who made that CSS 3D FPS a while ago.[2]

[0]: https://www.keithclark.co.uk/articles/pure-css-parallax-webs...

[1]: blog: https://www.keithclark.co.uk/articles/pure-css-parallax-webs...

[2]: https://www.keithclark.co.uk/labs/css-fps/

by thomasikzelf 5 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)

by rsyring 4 hours ago

Android Firefox: there is no background image.

by Semaphor 2 hours ago

This [0] seems to be the main meta bug, with [1] being for CSS and [2] for JS, for FF to ship it without the flag. There seems to be slow work towards it, kinda funny that FF was the first browser to have it (flag-gated, according to CIU) and now is the only one without it in stable ;)

[0]: https://bugzilla.mozilla.org/show_bug.cgi?id=1676779

[1]: https://bugzilla.mozilla.org/show_bug.cgi?id=1676780

[2]: https://bugzilla.mozilla.org/show_bug.cgi?id=1676781

by geuis 23 minutes ago

Using css perspective for parallax has been around for years and is much simpler code.

by hit8run 6 minutes ago

I get motion sickness from this specific effect. Especially on high refresh rate screens.

by Onplana 27 minutes ago

I was expecting a demo on the linked page itself. Interesting to let Codex or Claude Code do it :)

by mrcsmcln 3 hours ago

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.

by sillyboi 5 hours ago

It would be awesome to put an interactive example right in the article.

by thecaio an hour ago

there is a special place in hell for pages like these that don't show examples

by rohitsriram 5 hours ago

Love the one-variable design where scale and translate stay in sync automatically, just wish Firefox would get off the flag already.

by dandep 4 hours ago

Thanks!

by duskdozer 5 hours ago

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.

by tantalor 2 hours ago

Hey, where's the demo?

by albert_e 3 hours ago

could this be combined with a sprite like image that shows a slightly different angle of the image with each step

by i_am_a_peasant 4 hours ago

Idk about anyone here but I find the effect disorienting.

by amon_spek 4 hours ago

Yes. I'm a little more sensitive than average, but not enough to turn off animations, and this is uncomfortable.

by Theodores 2 hours ago

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.

Data from: Hacker News, provided by Hacker News (unofficial) API