Tw-fade: pure CSS scroll-driven edge masking

(pete.design)

64 points | by petekp 3 days ago

14 comments

  • porphyra 1 hour ago
    What's edge masking and what am I looking at? I clicked through several of the options and I don't see any difference. There just seems to be a really basic gradient shadow.

    I have gpu enabled in google chrome (verified by visiting chrome://gpu) on Chrome/149.0.7827.155 on Linux.

    • chao- 33 minutes ago
      I am also struggling to see what clicking any of the options in the demo changes. I find consider myself advanced in design knowledge, but I'm pretty average in visual perception.

      Perhaps some or all of them don't work in Firefox for Android, and I'm just seeing a fallback behavior that does work?

    • sebular 1 hour ago
      It took me forever to realize this, but I'm pretty sure the "options" ("ghost", "melt", "evanesce", and so on) aren't anything at all, just terms that are all adjacent to "fade" which can be selected for some reason. A search for those terms in the repo doesn't come up with anything.

      I was really hoping to see what the "melt" effect looked like :(

  • chrismorgan 3 hours ago
    The fade affects scroll bars, which is quite unpleasant (and arguably catastrophic if you have two-dimensional scrolling). The traditional background-image technique avoided this by sitting inside the scroll area. I don’t think you can achieve that with mask, without an additional element. But I think it might be worth that extra element.
  • jonahx 13 minutes ago
    There is something very wrong on chrome mac, for me at least.

    I mouse over the horizontal section and everything starts blinking and jittering wildly, then disappears. Vertical section has same issue.

  • franky47 29 minutes ago
    Might want to set `overscroll-behavior: contain;` on those scroll areas, having the whole page move up and down (or worse, navigating Back when scrolling left) isn't great UX.

    https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/P...

  • petekp 3 days ago
    hey all, just released a plugin to scratch an itch. i'd been lazily adding linear gradients on the edges of scrollviews and animating them with JS based on scroll position. turns out you can do a lot better with pure CSS now by leveraging masking + the new CSS scroll animations API.

    works in pretty much all browers excepting firefox which doesn't have CSS scroll animations yet, but the nightly version does, so it should be generally available soon.

    demo site: https://pete.design/tw-fade

    github: https://github.com/petekp/tw-fade

    npmjs: https://www.npmjs.com/package/tw-fade

    if you use it i'd love to hear how it goes and if you have any feedback.

    • holistio 54 minutes ago
      I don't find tw-fade particularly useful for me right now, but clicked through your site and I have to say I really like your approach to things (stress-testing shimmers comes to mind), big kudos.

      edit: the scrubber split animation is dope too!

  • Hugsbox 3 hours ago
    This is extremely laggy on my computer. It may not be a top-end gaming supercomputer but it's no slouch either.
    • esperent 2 hours ago
      It's fine on my phone, Brave Android. Maybe it doesn't work on Firefox?
    • sheept 3 hours ago
      It might be related to the liquid glass imitation in the color scheme picker
      • bduffany 2 hours ago
        I think you're right. Performance profile shows lots of long spans relating to that element, and deleting that element makes the page scroll much more smoothly.

        There are still other issues though. The performance of this page feels pretty bad in general.

        • nok22kon 48 minutes ago
          maybe you dont have GPU acceleration in your browser. that glass thing looks like its using complex blur effects
  • ptak 3 hours ago
    Neat! I'd much rather just copy-paste the CSS from the site though, would never install something like this as a package.
  • Stitch4223 2 hours ago
    What is happening here and why is it special? The site itself does show, but does not tell (which in itself is somewhat refreshing).
    • lelandfe 1 hour ago
      This is an effect that is widely used but is generally done with JS.

      The effect indicates to users who may not have scroll bars enabled that a box can be scrolled. The fade should be removed when a box can’t be scrolled in that direction.

      CSS effects tend (tend) to be faster and conceptually is a better place for effects anyway (e: and works with JS disabled, which is cool)

      • Stitch4223 28 minutes ago
        Ah, thanks! It looks like it only works if there is something partially shown. The fade color being the same as the background will just make it look like background when margins between scrollable objects are too wide. Good to know this exists.
  • jstanley 4 hours ago
    FYI scrolling this page is slow as balls on my computer. Firefox on Ubuntu.

    I don't know if this page is a demonstration of your plugin, I'm guessing yes but I can't see any masking going on, it seems to scroll just like a normal page but much more laggy.

    EDIT: Oh I see in your comment now, it doesn't work in Firefox. My mistake.

    • RyanOD 3 hours ago
      I was wondering the same thing and I'm in Chrome. The "Horizontal" and "Vertical" sections don't seem to do anything, but maybe I'm just not understanding what I should be looking for?
    • rtrigoso 4 hours ago
      This has a frame drop issue on Chrome Version 149.0.7827.156. It isn't close to smooth on my browser.
  • maxjustus 3 hours ago
    I also love the pure CSS parallax effect of the "tw-fade" title shadow using multiple spans with different styles that fade in and out based on scroll position. Very clever!
  • damsta 1 hour ago
    Really nice! Nice to see FF Nightly already has support that enables scroll detection.
  • thebiblelover7 2 hours ago
  • f8ght 3 hours ago
    [dead]
  • NooneAtAll3 3 hours ago
    arrow keys don't work, pgdown doesn't work
    • c-hendricks 3 hours ago
      I don't think that would be an issue of this CSS, that's just normal `overflow: auto` behaviour.
    • k33n 3 hours ago
      pgdown works for me (firefox on linux)

      arrow keys also seem to work fine but you have to click-to-focus first.