卡片與網格

Electric Border

抖動電流能量邊框並發光,用 SVG 噪點位移扭曲描邊,能量從輪廓向外滲出。

用 feTurbulence 產生噪點、逐幀捲動再由 feDisplacementMap 扭曲描邊,讓邊框像高壓電流般不斷抖動,並以雙層光暈向外發光。把任何內容包進去即可。

把這個效果裝進你的專案

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

npx webberui@latest add electric-border

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

Electric Border 是用 React 與 SVG 濾鏡做的電流邊框(發光邊框、glowing border)元件,抖動動畫由 SVG 內建的 animate 驅動,不使用 JavaScript 逐幀迴圈;Motion 只用來偵測「減少動態效果」設定。

Playground

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

1
1
2
16
編輯中的呼叫預設屬性
<ElectricBorder/>

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

適用情境

  • 定價頁中凸顯推薦方案的卡片
  • 遊戲、電競或活動頁的主視覺按鈕與報名卡
  • 產品頁上標示新功能、限定版本的區塊
  • 深色主題儀表板裡需要被注意到的警示卡片
  • 不適合:同一頁需要大量並排的邊框效果,或想要較低調的光效,可以改用 Border Beam

安裝

npx webberui@latest add https://webberui.com/r/electric-border.json

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

使用

import { ElectricBorder } from "@/components/ui/electric-border";

<ElectricBorder color="#5b8cff" speed={1} chaos={1} borderRadius={18}>
  <div className="rounded-[16px] bg-neutral-950 p-6 text-neutral-100">
    Power Surge
  </div>
</ElectricBorder>

內容背景建議用實色並將圓角設為比 borderRadius 略小,讓抖動的描邊能露在內容外緣。

範例

做成推薦方案卡

內容用實色背景,圓角比 borderRadius 小一點,並用 padding 留出讓描邊抖動的空間。

<ElectricBorder color="#22d3ee" borderRadius={20} padding={3} className="w-72">
  <div className="rounded-[17px] bg-neutral-950 p-6 text-neutral-100">
    <p className="text-sm text-cyan-300">推薦方案</p>
    <h3 className="mt-1 text-xl font-semibold">團隊版</h3>
    <ul className="mt-4 space-y-1 text-sm text-neutral-300">
      <li>最多 20 位成員</li>
      <li>共用元件庫與權限管理</li>
    </ul>
  </div>
</ElectricBorder>

包住按鈕

ElectricBorder 外層是一般的 div,可以包住任何元素;描邊與光暈層不接收滑鼠事件,按鈕照常可點。

<ElectricBorder color="#f43f5e" thickness={1.5} borderRadius={999} chaos={0.6}>
  <button className="rounded-full bg-neutral-950 px-6 py-2.5 text-sm font-medium text-white">
    立即報名
  </button>
</ElectricBorder>

依狀態開關電流

speed 為 0 時電流停止,只留下靜態發光邊框,可以用來表示「啟用中/未啟用」。

<ElectricBorder color="#a3e635" speed={isActive ? 1.5 : 0} chaos={isActive ? 1.2 : 1}>
  <div className="rounded-[14px] bg-neutral-900 p-5 text-neutral-100">
    {isActive ? "同步進行中" : "已暫停同步"}
  </div>
</ElectricBorder>

Props

Prop型別預設值說明
colorstring"#5b8cff"電流邊框與光暈顏色
speednumber1動畫速度倍率,0 時靜止
chaosnumber1電流亂度(位移量倍率)
thicknessnumber2邊框粗細(px)
borderRadiusnumber16圓角半徑(px)
paddingnumber2內容與邊框的內距(px)
childrenReactNode—邊框內的內容
contentClassNamestring—內容容器的 className

可及性

  • 使用者系統開啟「減少動態效果」時,電流停止抖動並保留靜態發光邊框
  • 描邊與光暈皆為 aria-hidden 且 pointer-events-none,不影響內容的互動與朗讀

常見問題

可以在 Next.js App Router 使用嗎?

可以。元件檔案開頭已有 "use client",在 Server Component 頁面中照常 import 即可。電流動畫在掛載後才啟用,首次渲染是靜態邊框,與 SSR 輸出一致。

怎麼調整顏色、速度與亂度?

color 控制描邊與光暈顏色,speed 是速度倍率(0 為靜止),chaos 是位移量倍率(越大越亂),thickness 調整描邊粗細。背景暈染會在 color 後面接上透明度,所以建議用六位數的十六進位色碼,例如 "#5b8cff"。

元件尺寸改變時電流會不會脫框?

不會。元件以 ResizeObserver 監聽外層尺寸,依實際寬高更新噪點的捲動距離,讓電流維持無縫循環。

對效能有影響嗎?

動畫由 SVG 的 animate 元素在瀏覽器內執行,沒有 requestAnimationFrame 迴圈。不過位移濾鏡需要逐幀重繪,同一頁放很多個時建議只在重點區塊使用。

減少動態效果時會怎樣?

使用者開啟「減少動態效果」時,位移量歸零、抖動停止,保留較淡的靜態發光邊框。