HextaUI

Scroll fade

Yalnızca görülecek daha fazla şey olduğunda solan, tamamen CSS'te kaydırma konumuyla yönlendirilen kaydırma alanı kenarları.

  • v2.24.0Released
  • v2.23.0Released
  • v2.22.0Released
  • v2.21.0Released
  • v2.20.0Released
  • v2.19.0Released
  • v2.18.0Released
  • v2.17.0Released
  • v2.16.0Released
  • v2.15.0Released
  • v2.14.0Released
  • v2.13.0Released
  • v2.12.0Released
  • v2.11.0Released
  • v2.10.0Released
  • v2.9.0Released
  • v2.8.0Released
  • v2.7.0Released
  • v2.6.0Released
  • v2.5.0Released
  • v2.4.0Released
  • v2.3.0Released
  • v2.2.0Released
  • v2.1.0Released
const releases = Array.from({ length: 24 }, (_, index) => `v2.${24 - index}.0`)

export function ScrollFadeDemo() {
  return (
    <div className="w-full max-w-xs rounded-xl bg-muted">
      <ul
        tabIndex={0}
        aria-label="Releases"
        className="h-64 scroll-fade overflow-y-auto rounded-xl p-2 text-sm outline-none focus-visible:ring-3 focus-visible:ring-focus-ring focus-visible:outline-hidden"
      >
        {releases.map((release) => (
          <li
            key={release}
            className="flex h-9 items-center justify-between rounded-md px-3"
          >
            <span className="font-mono">{release}</span>
            <span className="text-muted-foreground">Released</span>
          </li>
        ))}
      </ul>
    </div>
  )
}

Scroll fade, shadcn'in tailwind.css dosyasından gelen bir Tailwind yardımcıları kümesidir. HextaUI teması bunu zaten içe aktarır; bu yüzden temayı veya herhangi bir bileşeni eklediyseniz elinizde vardır.

pnpm dlx shadcn@latest add https://hextaui.com/r/theme.json

Tema olmadan shadcn'i kurun ve CSS'ini Tailwind'den sonra içe aktarın.

pnpm add shadcn
app/globals.css
@import "tailwindcss";
@import "shadcn/tailwind.css";
<div className="scroll-fade h-64 overflow-y-auto">…</div>
<div className="flex scroll-fade-x overflow-x-auto">…</div>

Kayan herhangi bir öğeye ekleyin. Bir kenar yalnızca ötesinde daha fazla içerik varken solar; böylece kesilmiş bir satır "kaydırmaya devam edin" der, durağan bir liste net kenarlarını korur.

Solma bir mask-image'dır, bu yüzden içerik arkasındaki her şeye karışır. Arka planla eşleştirilecek bir bindirme gradyanı yoktur; görsellerde, renkli yüzeylerde ve cam efektlerinde çalışır. CSS kaydırma güdümlü bir animasyon, her kenarın solmasını kaydırmanın ilk ve son 96px'inde büyütür. JavaScript çalışmaz ve hiç yeniden işlenmez.

  • Her solma kapsayıcının %12'sidir ve en fazla 40px ile sınırlıdır.
  • Kaydırma güdümlü animasyonları desteklemeyen tarayıcılar her iki solmayı sürekli gösterir. Biraz daha az hassastır ama yine de kaydırılabilir görünür.
  • scroll-fade-x, scroll-fade-s ve scroll-fade-e yazı yönünü izler; böylece sağdan sola düzenlerde başlangıç solması sağda yer alır.

Yatay

Yana kayan bir filtre satırı. Daha fazlası olduğunu yalnızca solma gösteriyorsa, shadcn'in CSS'inden gelen no-scrollbar ile birlikte kullanın.

const topics = [
  "All",
  "Design",
  "Engineering",
  "Product",
  "Research",
  "Marketing",
  "Sales",
  "Support",
  "Operations",
  "Finance",
]

export function ScrollFadeHorizontal() {
  return (
    <div
      tabIndex={0}
      role="region"
      aria-label="Topics"
      className="no-scrollbar flex w-full max-w-sm scroll-fade-x gap-2 overflow-x-auto rounded-md outline-none focus-visible:ring-3 focus-visible:ring-focus-ring focus-visible:outline-hidden"
    >
      {topics.map((topic) => (
        <span
          key={topic}
          className="shrink-0 rounded-full bg-muted px-3 py-1.5 text-sm"
        >
          {topic}
        </span>
      ))}
    </div>
  )
}

Tek kenar

Sohbet en altta başlar, bu yüzden yalnızca üstteki eski mesajların bir ipucuna ihtiyacı vardır. scroll-fade-t yalnızca üstü soldurur, scroll-fade-t-16 onu daha yüksek yapar.

"use client"

const messages = Array.from({ length: 16 }, (_, index) => ({
  id: index,
  text: index % 3 === 0 ? "Sounds good, ship it." : "Pushed the fix to main.",
}))

export function ScrollFadeEdge() {
  return (
    <div className="w-full max-w-xs rounded-xl bg-muted">
      <ul
        ref={(node) => {
          if (node) {
            node.scrollTop = node.scrollHeight
          }
        }}
        tabIndex={0}
        aria-label="Messages"
        className="flex h-64 scroll-fade-t flex-col gap-2 overflow-y-auto rounded-xl p-3 text-sm outline-none scroll-fade-t-16 focus-visible:ring-3 focus-visible:ring-focus-ring focus-visible:outline-hidden"
      >
        {messages.map((message) => (
          <li
            key={message.id}
            className="w-fit max-w-[80%] shrink-0 rounded-2xl bg-background px-3 py-2 even:self-end even:bg-primary even:text-primary-foreground"
          >
            {message.text}
          </li>
        ))}
      </ul>
    </div>
  )
}
<div className="scroll-fade scroll-fade-16 overflow-y-auto">…</div>
<div className="scroll-fade scroll-fade-[20%] overflow-y-auto">…</div>
<div className="scroll-fade [--scroll-fade-reveal:12rem] overflow-y-auto">…</div>

Boyutlar boşluk ölçeğini veya herhangi bir uzunluk ya da yüzdeyi alır. --scroll-fade-reveal, bir kenarın tam solmaya ulaşmadan önce ne kadar kaydıracağınızı belirler.

  • Maske öğenin kendi arka planını ve kenarlığını da soldurur. Örneklerdeki gibi yüzeyi bir sarmalayıcıya, solmayı da kayan alt öğeye koyun.
  • Bir maske, odak halkaları dahil kenara yakın her şeyi gizler. Odaklanılan öğeler solup gitmesin diye kayan öğeye biraz dolgu verin.
  • Özel kaydırma çubukları da istiyorsanız bunun yerine Scroll area kullanın. JavaScript ile ölçülen, her tarayıcıda çalışan kendi solmaları vardır.
SınıfAçıklama
scroll-fade, scroll-fade-yÜst ve alt kenarları soldurur.
scroll-fade-xYönü izleyerek başlangıç ve bitiş kenarlarını soldurur.
scroll-fade-t, scroll-fade-bYalnızca üst veya alt kenarı soldurur.
scroll-fade-s, scroll-fade-eYalnızca başlangıç veya bitiş kenarını soldurur.
scroll-fade-l, scroll-fade-rYönü yok sayarak yalnızca sol veya sağ kenarı soldurur.
scroll-fade-<size>Her solmanın boyutu.
scroll-fade-{t,b,s,e}-<size>Tek bir kenarın solma boyutu.
scroll-fade-noneSolmayı kapatır, örneğin bir breakpoint'te.
--scroll-fade-revealBir kenarın solarak belirdiği kaydırma mesafesi. Varsayılan 96px.