Merge scroll polish
A long row still fades as one surface, including row content and metadata.
Tailwind v4
Elegant, scroll-driven edge masking. One class. Zero JavaScript.
npm i tw-fade
fade-y
A long row still fades as one surface, including row content and metadata.
The mask belongs on the scrolling list, not on a pseudo-element overlay.
The example maps cleanly to nested scroll containers and dense action lists.
CSS masks fade text, icons, focus rings, and row backgrounds together.
Nothing about the utility assumes a card, feed, or media-heavy layout.
Utilities should feel native inside menus, drawers, panes, and sheets.
A longer list makes the scroll-gated mask visible at every resting state.
Interactive rows fade with their focus treatment instead of sitting above it.
The class list stays small enough to copy without explaining extra markup.
The demo keeps native overflow so each browser reveals its real scrolling feel.
Axis utilities and edge utilities can be combined without class-order tricks.
Rows should disappear into the surface without dimming the middle content.
The example keeps attention on the fade instead of decorative badges.
Sticky-edge caveats stay separate from the common list and panel paths.
The final rows prove the list can scroll well past the first viewport.
fade-x
fade-xy fade-size-2xl fade-range-md
ephemeral edges
ephemeral edges
ephemeral edges
ephemeral edges
ephemeral edges
ephemeral edges
ephemeral edges
ephemeral edges
ephemeral edges
ephemeral edges
Fades ease in as you scroll away from an edge, then ease out again as you reach the other end. No JavaScript scroll listeners required.
Each edge uses an eased alpha ramp, so content dissolves into the surface instead of ending in a hard clipped line.
Edge, axis, size, range, and clear-zone utilities combine on the scroll container without wrapper elements or overlay gradients.