卡片與網格

金屬箔面

可包任何內容的燙金箔表面處理:五層漸層與混合模式隨捲動進度與游標位置變化光澤,不做傾斜。

這是 WebberUI Pro 元件

下方的安裝指令需要授權才能執行,未授權時會回 401。

怎麼安裝 Pro 元件 →查看方案 →

把任何容器變成燙金箔、鐳射貼紙那種會流動的表面:徽章、會員卡、票券、標題字塊都適用。元件在內容之上疊五層漸層(彩色箔面、薄膜色塊、珍珠底、斜向亮帶、游標高光),以混合模式和內容混色;光澤由捲動進度與游標位置驅動,CSS 變數直接在 requestAnimationFrame 裡批次寫入,不經 React state、也沒有 transition。它只處理表面、不做傾斜——需要 3D 傾斜時,把它放進 tilt-card 裡組合;要一張現成的「卡片+傾斜+全息」則用 holographic-card。

把這個效果裝進你的專案

在專案資料夾執行指令,CLI 會加入原始碼與依賴套件,再依下方使用範例引用元件。

npx webberui@latest add "https://webberui.com/r/foil-surface.json?t=<安裝 token>"

還沒有專案,或安裝遇到問題?看快速開始 →

Playground

即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。

0.8
1
編輯中的呼叫預設屬性
<FoilSurface/>

完整範例包含預覽的排版與資料。先安裝元件,再把範例檔貼入你的專案。

安裝

npx webberui@latest add "https://webberui.com/r/foil-surface.json?t=<安裝 token>"

或在 components.json 設定 registries 後,改用 @webberui/foil-surface 安裝。

使用

import { FoilSurface } from "@/components/ui/foil-surface";

<FoilSurface className="rounded-full" intensity={0.8}>
  <div className="flex size-40 items-center justify-center rounded-full bg-neutral-100">
    限量會員 2026
  </div>
</FoilSurface>

// 隨整頁捲動進度變化、不跟游標
<FoilSurface scrollProgressMode="document" interactive={false} className="rounded-xl">
  <MemberCard />
</FoilSurface>

Props

Prop型別預設值說明
childrenReact.ReactNode—要包上箔面的任意內容;五層箔面疊在內容之上
scrollProgressMode"element" | "document""element"element:元素穿過視口的進度;document:整頁捲動進度
intensitynumber0.8光澤強度(0–1),乘在每一層的不透明度上
shineSpeednumber1捲動時光澤流動的快慢倍率,乘在捲動係數(0.82 與 80°)上
interactivebooleantrue是否讓高光跟隨游標;false 時只隨捲動變化
as"div" | "span""div"根元素標籤;包行內內容時用 span(會設為 inline-block)
layerClassNamestring—套用到每一個箔面層的 class
classNamestring—透傳到根元素;圓角請設在這裡,五層會以 rounded-[inherit] 繼承

細節

  • 更新迴圈:監聽 window 的 scroll(捕獲階段,連巢狀捲動容器一併接住)、resize 與元素的 pointermove/pointerleave,全部 passive。事件只記錄最新值並排一個 rAF,同一幀多個事件合併成一次寫入
  • 捲動進度:element 模式為 (視口高 − rect.top) ÷ (視口高 + rect.height),夾在 0–1;document 模式為 scrollTop ÷ (scrollHeight − clientHeight)。element 模式一律以瀏覽器視口為準,放在短的巢狀捲動容器裡時變化幅度較小,可調高 shineSpeed 補償
  • 游標:相對元素的 0–1 座標,夾在 0.08–0.92;離開時回到正中央
  • 寫入的 CSS 變數:--foil-shift、--foil-y-shift、--glare-x、--glare-y、--shine-angle、--shine-opacity,直接寫在根元素的 style 上,可在子層或自訂 layerClassName 中引用
  • 五層:foil(七色線性漸層、300% 尺寸隨變數平移、saturate/contrast 提高)、film(四個彩色色塊,screen)、pearl(珍珠白,soft-light)、shine(斜向亮帶,角度隨捲動轉動,screen)、glare(游標圓形高光)。根元素 isolate,混合模式只和本元件內容混色
  • 離開視口時暫停:IntersectionObserver 回報不在視口時停止 rAF 寫入,回到視口時補寫一次
  • 與 holographic-card 的分工:holographic-card 是一張卡片+3D 傾斜;foil-surface 是任何容器的表面處理,捲動驅動、不傾斜。可以把 foil-surface 放進 tilt-card 內組合出傾斜效果

可及性

  • 五層箔面都是 aria-hidden 且 pointer-events-none,不影響內容的閱讀順序、點擊與焦點
  • 箔面只是視覺光澤,不承載任何資訊;強度上限受 intensity 控制,內容文字仍需自行確保對比度
  • 使用者系統開啟「減少動態效果」時,不監聽任何捲動或游標事件,光澤固定在中間狀態(捲動 0.5、游標置中)的靜態外觀