\

CSS-Native Parallax Effect

108 points - today at 10:23 AM

Source
  • baliex

    today at 10:51 AM

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

      • sourcecodeplz

        today at 4:57 PM

        I've put together an example here but it doesn't seem to work in Firefox 151.0.2 (64-bit): https://favs.eu.org/parallax/

        Edit: if the body has class="no-sda", it uses a js fallback.

        • jonahx

          today at 3:01 PM

          Or even linked to one!

          • dsmurrell

            today at 12:19 PM

            I was also looking for examples.

            • yashD18

              today at 12:45 PM

              i was waiting for the effect to show up

          • mpeg

            today at 10:58 AM

            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

              • dandep

                today at 12:25 PM

                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.

                • semolino

                  today at 3:51 PM

                  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.

                  • som

                    today at 11:48 AM

                    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)

                    • iainmerrick

                      today at 11:20 AM

                      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.

                  • phelm

                    today at 10:52 AM

                    A demo https://codepen.io/editor/phelm/pen/019e87f5-dfec-7372-9849-...

                      • frereubu

                        today at 10:53 AM

                        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

                          • frereubu

                            today at 1:20 PM

                            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.

                              • cj

                                today at 1:29 PM

                                Yes... there's a media query in the codepen disabling animation for people with reduced motion enabled.

                            • werdnapk

                              today at 11:26 AM

                              It's been behind a flag for ages. Maybe because of performance issues?

                                • goodmythical

                                  today at 3:34 PM

                                  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

                              • anssip

                                today at 11:10 AM

                                Noticed the same thing. In Mac Safari it works without setting any flags.

                                • wnevets

                                  today at 12:11 PM

                                  Doesnt work on any browser for me

                                    • today at 1:19 PM

                                  • WithinReason

                                    today at 11:28 AM

                                    tried 4 browsers, didn't work in any of them

                              • Mashimo

                                today at 11:39 AM

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

                                • account42

                                  today at 11:19 AM

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

                                    • zamadatix

                                      today at 12:03 PM

                                      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.

                              • sheept

                                today at 3:45 PM

                                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/

                                • thomasikzelf

                                  today at 11:26 AM

                                  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)

                                    • apsurd

                                      today at 4:43 PM

                                      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.

                                      • rsyring

                                        today at 12:13 PM

                                        Android Firefox: there is no background image.

                                          • thomasikzelf

                                            today at 12:26 PM

                                            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.

                                    • Semaphor

                                      today at 2:07 PM

                                      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

                                      • mrcsmcln

                                        today at 1:12 PM

                                        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.

                                        • sillyboi

                                          today at 11:47 AM

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

                                          • Onplana

                                            today at 3:53 PM

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

                                            • geuis

                                              today at 3:58 PM

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

                                              • thecaio

                                                today at 3:14 PM

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

                                                • rohitsriram

                                                  today at 11:28 AM

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

                                                    • dandep

                                                      today at 12:26 PM

                                                      Thanks!

                                                  • duskdozer

                                                    today at 11:30 AM

                                                    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.

                                                    • albert_e

                                                      today at 1:33 PM

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

                                                      • i_am_a_peasant

                                                        today at 12:25 PM

                                                        Idk about anyone here but I find the effect disorienting.

                                                          • amon_spek

                                                            today at 12:33 PM

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

                                                        • hit8run

                                                          today at 4:15 PM

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

                                                          • tantalor

                                                            today at 2:23 PM

                                                            Hey, where's the demo?

                                                            • Theodores

                                                              today at 2:02 PM

                                                              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.

                                                              • xuzhenpeng

                                                                today at 11:51 AM

                                                                [flagged]

                                                                • swordlucky666

                                                                  today at 2:05 PM

                                                                  [dead]