Gradient Mesh
網格漸層背景:五個柔和 radial-gradient 色點以 transform 緩慢漂移,交織成流動的 mesh。
把這個效果裝進你的專案
在專案資料夾執行指令,CLI 會加入原始碼與依賴套件,再依下方使用範例引用元件。
npx webberui@latest add gradient-meshGradient Mesh 是用 React、Tailwind CSS 與 Motion 做的網格漸層(mesh gradient)動態背景元件:五個模糊的 radial-gradient 色點各自以不同週期緩慢漂移,疊出持續流動的漸層,前景內容直接放進 children。
Playground
即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。
<GradientMesh/>
完整範例包含預覽的排版與資料。先安裝元件,再把範例檔貼入你的專案。
適用情境
- SaaS 或 App 登陸頁的 hero 背景,放主標題與行動按鈕。
- 註冊、登入頁的半邊視覺區,或等候名單頁的整頁背景。
- 價格方案、功能亮點區塊的大卡片底圖,用品牌色調配色。
- 活動頁或產品發表的橫幅區塊。
- 不適合:想要更大面積、帶噪點或滑鼠跟隨的流動色塊,可以看 Aurora Background。
安裝
npx webberui@latest add https://webberui.com/r/gradient-mesh.json或在 components.json 設定 registries 後,改用 @webberui/gradient-mesh 安裝。
使用
前景內容直接放進 children,佈局(如置中、高度)寫在 className 上:
import { GradientMesh } from "@/components/ui/gradient-mesh";
<GradientMesh className="flex min-h-[400px] items-center justify-center">
<h1 className="text-4xl font-bold">Hero 標題</h1>
</GradientMesh>自訂配色與漂移速度:
<GradientMesh
colors={["#f0abfc", "#c4b5fd", "#7dd3fc", "#6ee7b7"]}
speed={1.5}
className="flex h-[320px] items-center justify-center rounded-2xl"
>
<p className="text-lg">更快、更粉的 mesh</p>
</GradientMesh>範例
Hero 區塊搭配行動按鈕
className 決定高度與排版,標題和按鈕放在 children,會疊在漸層之上。
import { GradientMesh } from "@/components/ui/gradient-mesh";
export function Hero() {
return (
<GradientMesh className="flex min-h-[520px] flex-col items-center justify-center gap-6 px-6 text-center">
<h1 className="max-w-2xl text-5xl font-semibold tracking-tight">
把團隊文件整理在同一個地方
</h1>
<a href="/signup" className="rounded-full bg-neutral-900 px-5 py-2.5 text-sm font-medium text-white dark:bg-white dark:text-neutral-900">
免註冊試用
</a>
</GradientMesh>
);
}兩色品牌配色
colors 依序對應五個色點,數量不足時會循環取用;只傳兩個顏色就會交錯出現。
<GradientMesh
colors={["#2563eb", "#14b8a6"]}
className="h-[360px] rounded-3xl"
/>卡片背景、放慢速度
speed 是漂移倍速,小於 1 會更慢;搭配 rounded-* 與固定高度做成卡片底圖。
<GradientMesh speed={0.5} className="rounded-2xl p-8">
<h3 className="text-lg font-semibold">團隊方案</h3>
<p className="mt-2 text-sm text-neutral-600 dark:text-neutral-300">
共用工作區、權限設定與稽核紀錄。
</p>
</GradientMesh>Props
| Prop | 型別 | 預設值 | 說明 |
|---|---|---|---|
colors | string[] | 柔和多彩配色 | mesh 色點顏色,依序對應各色點,不足時循環取用 |
speed | number | 1 | 漂移倍速,數值越大流動越快(週期除以此值) |
children | React.ReactNode | — | 前景內容,疊在 mesh 之上 |
className | string | — | 附加到最外層容器的 class |
細節
- 效能:只動 transform。 每個色點的漂移全部走
x/y,不觸碰top/left,不觸發 layout 與 paint;will-change由 Motion 在動畫期間自動管理,毋須手動設定 - 每個色點的 x 軸與 y 軸各自使用不同週期(12s–22s)搭配
repeat: Infinity+repeatType: "mirror",兩軸錯開後色點走出弧形軌跡,五點之間永不同步,看起來像自然流動的 mesh - 色點是
blur-3xl的radial-gradient圓形,模糊由 GPU 合成一次後隨 transform 平移,成本固定,不隨動畫累加 - 背景層整層
pointer-events-none並以-z-10沉到內容之下(容器有isolate建立獨立堆疊上下文),前景互動完全不受影響 speed會做防呆:非正數時回退為1,避免週期變成Infinity或反向- 底色為
neutral-50/neutral-950,淺色與深色模式下 mesh 皆清晰耐看
可及性
- 背景層帶
aria-hidden,純裝飾不干擾輔助科技朗讀 - 使用者系統開啟「減少動態效果」時,所有色點停止漂移、以靜態漸層渲染,DOM 結構不變
常見問題
可以在 Next.js App Router 使用嗎?
可以。原始碼已有 "use client",在 Server Component 頁面直接 import 即可。首次渲染與伺服器端輸出一致,掛載後才依減少動態效果設定切換成靜態版,不會出現 hydration 不一致。
會不會影響頁面效能?
色點的漂移只改 transform(x、y),不觸發版面重排;動畫由 Motion 驅動,沒有 canvas 或逐像素運算。
怎麼改顏色、速度和底色?
colors 傳入 CSS 色值陣列,speed 調整漂移倍速(非正數時回退為 1)。底色是容器上的 bg-neutral-50 dark:bg-neutral-950,可以用 className 傳入其他 bg-* 覆寫。
前景內容的點擊會被擋住嗎?
不會。漸層層設定為 pointer-events-none 並以 -z-10 放在內容下方,容器有 isolate 建立獨立的堆疊層級。
使用者開啟減少動態效果時會怎樣?
所有色點停止漂移,以靜態漸層顯示,DOM 結構不變。