背景

絲帶背景

以 Canvas 2D 繪製的絲綢緞帶背景:數條貝茲曲線帶在深色底緩慢擺動流動,沿法線的漸層模擬邊緣光澤,不使用 WebGL。

這是 WebberUI Pro 元件

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

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

適合發表會頁首、活動主視覺、品牌形象區塊的背景:3–6 條絲綢緞帶在深色底上緩慢擺動,每條沿寬度方向以漸層模擬「邊緣暗、偏側一道高光、中央本色」的緞面光澤,扭轉變窄處高光更亮;緞帶之間以 screen 疊加,交疊處自然發亮。全程以 Canvas 2D 繪製,不使用 WebGL。

把這個效果裝進你的專案

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

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

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

Playground

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

4
1
0.7
7
編輯中的呼叫預設屬性
<SilkRibbonsBackground/>

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

安裝

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

或在 components.json 設定 registries 後,改用 @webberui/silk-ribbons-background 安裝。

使用

import { SilkRibbonsBackground } from "@/components/ui/silk-ribbons-background";

<SilkRibbonsBackground
  count={4}
  color={["#1e3a8a", "#4f46e5", "#0ea5e9", "#8b5cf6"]}
  className="flex h-[420px] items-center justify-center"
>
  <h1 className="text-4xl font-bold text-white">讓每一次發表都有質感</h1>
</SilkRibbonsBackground>

只給一個色碼時會自動衍生相近色階:

<SilkRibbonsBackground color="#e11d48" background="#1a0509" className="h-[360px]" />

整站統一節奏與底色可用 CSS 變數覆寫:

:root {
  --wb-silk-speed: 0.6; /* 與 speed prop 相乘 */
  --wb-silk-bg: #05060a; /* 未傳 background 時的底色 */
}

Props

Prop型別預設值說明
countnumber4緞帶數量,限制在 3–6
speednumber1流動速度倍率,再乘上 --wb-silk-speed
colorstring | string[]['#3b82f6','#6366f1','#0ea5e9','#8b5cf6']單一色碼自動衍生相近色階;陣列時每條一色、依序循環
sheennumber0.7光澤強度(0–1),控制白色高光的亮度
seednumber7亂數種子,決定緞帶位置、寬度與擺動節奏
backgroundstringvar(--wb-silk-bg, #05060a)容器背景色
childrenReactNode—疊在緞帶之上的前景內容
canvasClassNamestring—套用在 canvas 上的 class
classNamestring—容器樣式(佈局、高度、圓角等)

細節

  • 每條緞帶的中心線是 6 個控制點的 Catmull-Rom 曲線,控制點 y 以兩組不同頻率的 sin 疊加擺動,完整週期約 12–20 秒;所有參數由 seed 確定性產生,同一個 seed 每次畫面相同。
  • 沿中心線取 120 個取樣點,依法線方向展開成分段四邊形,每段填一道沿寬度方向的線性漸層:邊緣為本色 20% 亮度、0.35 處白色高光(強度 0.5 × sheen)、中央本色。寬度沿長度以 cos 變化產生扭轉感,變窄處高光加強。
  • 每條緞帶先畫在離屏圖層,再以 screen 疊回主畫布,交疊處發亮但不會在分段接縫出現亮線;最後疊一層極淡的放射狀暗角。
  • 畫布依 devicePixelRatio 縮放(上限 2x),ResizeObserver 監看尺寸重算;捲出視窗(IntersectionObserver)或分頁隱藏時停止 requestAnimationFrame。
  • 首次渲染只輸出帶背景色的容器,canvas 僅在 effect 中繪製,SSR 與 client 一致。

可及性

  • canvas 帶 aria-hidden 與 role="presentation",且 pointer-events-none,純裝飾、不干擾前景內容的點擊與朗讀;children 照常可讀。
  • 預設底色為深色、前景文字預設 text-neutral-50;改用淺色 background 時請同步調整文字顏色以維持對比。
  • 使用者系統開啟「減少動態效果」時,只繪製一幀靜態畫面(時間點由 seed 決定),不啟動動畫迴圈。