Hint at content beyond a scroll boundary without adding visible chrome.
Combine scroll-fade with overflow-y-auto to show a mask only while more content remains above or below.
scroll-fade
overflow-y-auto
Review the latest workspace activity.
Compare the proposed navigation changes.
Confirm the accessible names.
Check the compact density.
Test the dark theme.
Verify the right-to-left layout.
Publish the approved update.
1 2 3 4 5 6 7 8 9 10 11<div class="scroll-fade no-scrollbar overflow-y-auto border rounded-4 p-3 w-100" style="height: 14rem; max-width: 20rem;"> <div class="vstack gap-3"> <p class="mb-0 pb-3 border-bottom">Review the latest workspace activity.</p> <p class="mb-0 pb-3 border-bottom">Compare the proposed navigation changes.</p> <p class="mb-0 pb-3 border-bottom">Confirm the accessible names.</p> <p class="mb-0 pb-3 border-bottom">Check the compact density.</p> <p class="mb-0 pb-3 border-bottom">Test the dark theme.</p> <p class="mb-0 pb-3 border-bottom">Verify the right-to-left layout.</p> <p class="mb-0">Publish the approved update.</p> </div> </div>
<div class="scroll-fade no-scrollbar overflow-y-auto border rounded-4 p-3 w-100" style="height: 14rem; max-width: 20rem;"> <div class="vstack gap-3"> <p class="mb-0 pb-3 border-bottom">Review the latest workspace activity.</p> <p class="mb-0 pb-3 border-bottom">Compare the proposed navigation changes.</p> <p class="mb-0 pb-3 border-bottom">Confirm the accessible names.</p> <p class="mb-0 pb-3 border-bottom">Check the compact density.</p> <p class="mb-0 pb-3 border-bottom">Test the dark theme.</p> <p class="mb-0 pb-3 border-bottom">Verify the right-to-left layout.</p> <p class="mb-0">Publish the approved update.</p> </div> </div>
When the content fits, the utility stays quiet: no mask appears and no extra script is needed.
Short content keeps both edges clear.
No extra state or script is required.
1 2 3 4 5 6<div class="scroll-fade no-scrollbar overflow-y-auto border rounded-4 p-3 w-100" style="height: 14rem; max-width: 20rem;"> <div class="vstack gap-3"> <p class="mb-0">Short content keeps both edges clear.</p> <p class="mb-0">No extra state or script is required.</p> </div> </div>
<div class="scroll-fade no-scrollbar overflow-y-auto border rounded-4 p-3 w-100" style="height: 14rem; max-width: 20rem;"> <div class="vstack gap-3"> <p class="mb-0">Short content keeps both edges clear.</p> <p class="mb-0">No extra state or script is required.</p> </div> </div>
Use scroll-fade-x for horizontally overflowing rows; its inline-axis behavior also works in RTL layouts.
scroll-fade-x
1 2 3 4 5 6 7 8<div class="scroll-fade-x no-scrollbar d-flex gap-2 overflow-x-auto py-2 w-100" style="max-width: 24rem;"> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Overview</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Activity</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Collaborators</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Permissions</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Automations</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Integrations</span> </div>
<div class="scroll-fade-x no-scrollbar d-flex gap-2 overflow-x-auto py-2 w-100" style="max-width: 24rem;"> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Overview</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Activity</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Collaborators</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Permissions</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Automations</span> <span class="flex-shrink-0 border rounded-pill px-3 py-2">Integrations</span> </div>
Choose physical edges such as scroll-fade-t or logical edges such as scroll-fade-s when only one boundary needs a cue.
scroll-fade-t
scroll-fade-s
Top
Bottom
Left
Right
Inline start
Inline end
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66<div class="row g-3 w-100" style="max-width: 40rem;"> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Top</p> <div class="scroll-fade-t no-scrollbar overflow-y-auto border rounded-3 p-3" style="height: 8rem;"> <div class="vstack gap-3"> <span>Planning</span> <span>Design</span> <span>Review</span> <span>Release</span> <span>Archive</span> </div> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Bottom</p> <div class="scroll-fade-b no-scrollbar overflow-y-auto border rounded-3 p-3" style="height: 8rem;"> <div class="vstack gap-3"> <span>Planning</span> <span>Design</span> <span>Review</span> <span>Release</span> <span>Archive</span> </div> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Left</p> <div class="scroll-fade-l no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3"> <span class="flex-shrink-0">Planning</span> <span class="flex-shrink-0">Design</span> <span class="flex-shrink-0">Review</span> <span class="flex-shrink-0">Release</span> <span class="flex-shrink-0">Archive</span> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Right</p> <div class="scroll-fade-r no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3"> <span class="flex-shrink-0">Planning</span> <span class="flex-shrink-0">Design</span> <span class="flex-shrink-0">Review</span> <span class="flex-shrink-0">Release</span> <span class="flex-shrink-0">Archive</span> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Inline start</p> <div class="scroll-fade-s no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3"> <span class="flex-shrink-0">Planning</span> <span class="flex-shrink-0">Design</span> <span class="flex-shrink-0">Review</span> <span class="flex-shrink-0">Release</span> <span class="flex-shrink-0">Archive</span> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Inline end</p> <div class="scroll-fade-e no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3"> <span class="flex-shrink-0">Planning</span> <span class="flex-shrink-0">Design</span> <span class="flex-shrink-0">Review</span> <span class="flex-shrink-0">Release</span> <span class="flex-shrink-0">Archive</span> </div> </div> </div>
<div class="row g-3 w-100" style="max-width: 40rem;"> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Top</p> <div class="scroll-fade-t no-scrollbar overflow-y-auto border rounded-3 p-3" style="height: 8rem;"> <div class="vstack gap-3"> <span>Planning</span> <span>Design</span> <span>Review</span> <span>Release</span> <span>Archive</span> </div> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Bottom</p> <div class="scroll-fade-b no-scrollbar overflow-y-auto border rounded-3 p-3" style="height: 8rem;"> <div class="vstack gap-3"> <span>Planning</span> <span>Design</span> <span>Review</span> <span>Release</span> <span>Archive</span> </div> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Left</p> <div class="scroll-fade-l no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3"> <span class="flex-shrink-0">Planning</span> <span class="flex-shrink-0">Design</span> <span class="flex-shrink-0">Review</span> <span class="flex-shrink-0">Release</span> <span class="flex-shrink-0">Archive</span> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Right</p> <div class="scroll-fade-r no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3"> <span class="flex-shrink-0">Planning</span> <span class="flex-shrink-0">Design</span> <span class="flex-shrink-0">Review</span> <span class="flex-shrink-0">Release</span> <span class="flex-shrink-0">Archive</span> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Inline start</p> <div class="scroll-fade-s no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3"> <span class="flex-shrink-0">Planning</span> <span class="flex-shrink-0">Design</span> <span class="flex-shrink-0">Review</span> <span class="flex-shrink-0">Release</span> <span class="flex-shrink-0">Archive</span> </div> </div> <div class="col-12 col-sm-6"> <p class="small text-body-secondary mb-2">Inline end</p> <div class="scroll-fade-e no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3"> <span class="flex-shrink-0">Planning</span> <span class="flex-shrink-0">Design</span> <span class="flex-shrink-0">Review</span> <span class="flex-shrink-0">Release</span> <span class="flex-shrink-0">Archive</span> </div> </div> </div>
Override --scroll-fade-size when a surface needs a shorter or longer transition without changing the utility itself.
--scroll-fade-size
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<div class="d-grid gap-3 w-100" style="max-width: 24rem;"> <div class="scroll-fade-x no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3" style="--scroll-fade-size: 1rem;"> <span class="flex-shrink-0">Compact</span> <span class="flex-shrink-0">fade</span> <span class="flex-shrink-0">keeps</span> <span class="flex-shrink-0">content</span> <span class="flex-shrink-0">nearby</span> </div> <div class="scroll-fade-x no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3" style="--scroll-fade-size: 4rem;"> <span class="flex-shrink-0">Roomy</span> <span class="flex-shrink-0">fade</span> <span class="flex-shrink-0">creates</span> <span class="flex-shrink-0">a</span> <span class="flex-shrink-0">longer</span> <span class="flex-shrink-0">transition</span> </div> </div>
<div class="d-grid gap-3 w-100" style="max-width: 24rem;"> <div class="scroll-fade-x no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3" style="--scroll-fade-size: 1rem;"> <span class="flex-shrink-0">Compact</span> <span class="flex-shrink-0">fade</span> <span class="flex-shrink-0">keeps</span> <span class="flex-shrink-0">content</span> <span class="flex-shrink-0">nearby</span> </div> <div class="scroll-fade-x no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3" style="--scroll-fade-size: 4rem;"> <span class="flex-shrink-0">Roomy</span> <span class="flex-shrink-0">fade</span> <span class="flex-shrink-0">creates</span> <span class="flex-shrink-0">a</span> <span class="flex-shrink-0">longer</span> <span class="flex-shrink-0">transition</span> </div> </div>
Add scroll-fade-none to remove only the mask; scrolling and the hidden-scrollbar behavior remain intact.
scroll-fade-none
1 2 3 4 5 6 7 8 9<div class="scroll-fade-x scroll-fade-none no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3 w-100" style="max-width: 24rem;"> <span class="flex-shrink-0">Temporarily</span> <span class="flex-shrink-0">disable</span> <span class="flex-shrink-0">the</span> <span class="flex-shrink-0">mask</span> <span class="flex-shrink-0">without</span> <span class="flex-shrink-0">changing</span> <span class="flex-shrink-0">overflow</span> </div>
<div class="scroll-fade-x scroll-fade-none no-scrollbar d-flex gap-3 overflow-x-auto border rounded-3 p-3 w-100" style="max-width: 24rem;"> <span class="flex-shrink-0">Temporarily</span> <span class="flex-shrink-0">disable</span> <span class="flex-shrink-0">the</span> <span class="flex-shrink-0">mask</span> <span class="flex-shrink-0">without</span> <span class="flex-shrink-0">changing</span> <span class="flex-shrink-0">overflow</span> </div>
No matching pages.
Restore the default appearance.