頁面區塊 Sections

社群貼文牆

以通用社群貼文樣式呈現的評價動態牆,新貼文會定時從頂端滑入、按讚數輕跳,兩欄瀑布排列。

把客戶評價做成一面「正在更新」的社群動態牆。每則評價是一張通用樣式的貼文卡:頭像縮寫、顯示名稱、虛構帳號、相對時間與可選的認證徽章,內文裡的 #標籤 與 @提及 以強調色顯示,底部是回覆、轉貼、喜歡的互動列。開啟 live 時,先顯示前幾則,其餘每隔一段時間從頂端滑入,其他卡片以彈簧下推,超過上限時最舊的一則從底部淡出;喜歡數也會不定時 +1 並輕跳一下。使用者往下捲動閱讀時,新貼文改為累積成「有 N 則新評價」提示,點擊才插入,內容不會在眼前跳動。

把這個效果裝進你的專案

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

npx webberui@latest add social-post-reviews

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

Playground

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

4000
編輯中的呼叫預設屬性
<SocialPostReviews/>

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

安裝

npx webberui@latest add https://webberui.com/r/social-post-reviews.json

或在 components.json 設定 registries 後,改用 @webberui/social-post-reviews 安裝。

使用

import { SocialPostReviews } from "@/components/ui/social-post-reviews";

<SocialPostReviews
  eyebrow="社群回饋"
  title="大家正在說"
  initialCount={6}
  maxVisible={8}
  testimonials={[
    {
      quote: "導入三週,門市備料浪費少了一大截 #門市日常",
      name: "林語晴",
      handle: "yuching.ops",
      role: "營運主管",
      company: "青嶼咖啡",
      postedAt: "2026-10-25T05:10:00Z",
      likes: 128,
      replies: 12,
      reposts: 9,
      verified: true,
    },
    {
      quote: "排班表終於不用每週手動調三輪,謝謝 @beichen.dispatch 幫忙測試!",
      name: "王思妤",
      handle: "szuyu_w",
      company: "北辰物流",
      postedAt: "2026-10-25T03:40:00Z",
      likes: 86,
      replies: 7,
      reposts: 4,
      media: true,
    },
  ]}
/>

Props

Prop型別預設值說明
testimonialsSocialPostReviewsItem[]—評價資料;前 initialCount 則依陣列順序由上而下先顯示,其餘依序排入佇列
eyebrowstring"社群回饋"標題上方的小標
titlestring"大家正在說"區塊標題;同時作為 section 與動態牆的無障礙名稱
subtitlestring—標題下方的說明文字
nowstring最新一則的 postedAt相對時間的基準(ISO 8601);不讀目前時間,伺服器與瀏覽器輸出一致
livebooleantrue是否定時插入新貼文並顯示暫停鈕
intervalnumber4000插入間隔(毫秒);未提供時讀 --wb-social-post-reviews-interval
initialCountnumber6初始顯示則數
maxVisiblenumber8同時顯示上限;超過時最舊的一則從底部淡出
columns1 | 22欄數;容器窄於 640px 時一律 1 欄
loopbooleantrue佇列播完後,把已淡出的貼文重新排入
showMediabooleantrue是否顯示 media 貼文的附圖佔位
pausedboolean—受控的暫停狀態;未提供時由元件內部管理
defaultPausedbooleanfalse非受控模式的初始暫停狀態(減少動態效果時一律先暫停)
onPausedChange(paused: boolean) => void—使用者按下暫停/繼續時回呼
classNamestring—附加到根 section

SocialPostReviewsItem

欄位型別預設值說明
quotestring—評價內文;#標籤(含全形 # 與中文)與 @提及 以強調色顯示
namestring—顯示名稱;頭像縮寫取中文末兩字或拉丁字首
handlestring—虛構帳號,@ 可省略
postedAtstring—發文時間(ISO 8601)
likesnumber—喜歡數
repliesnumber—回覆數
repostsnumber—轉貼數
rolestring—職稱
companystring—公司或單位,與職稱以「·」連接
tagsstring[]—附加在內文後的標籤(不含 #)
mediabooleanfalse顯示附圖佔位(依頭像色相產生的漸層方塊)
verifiedbooleanfalse顯示通用認證徽章
highlightstring—quote 中要以強調底色標記的片段
metric{ value: string; label: string }—貼文底部的成效數字
avatarHuenumber—頭像漸層色相;未提供時依索引以黃金角度分配
ratingnumber—保留欄位,方便與其他評價元件共用資料;此元件不顯示星等

細節

  • 相對時間(「剛剛」「3 小時前」「2 天前」)只用 postedAt 與 now 計算,不在 render 讀目前時間;超過 30 天改顯示 UTC 日期。
  • 兩欄排列時,每則新貼文放進目前估計高度較矮的那一欄,插入後不再換欄,所以卡片只會往下推、不會左右跳。
  • 喜歡數的自動 +1 由決定性的雜湊序列決定時機與對象,不使用亂數;點愛心切換已讚是本地狀態,數字以垂直滾動切換、圖示放大到 1.25 倍再回彈。
  • 動態牆頂端放了一個哨兵元素:它捲出視窗上緣時,新貼文改為累積到「有 N 則新評價」提示列(sticky),點擊後一次插入並捲回頂端。
  • 節奏與顏色可用 CSS 變數覆寫:--wb-social-post-reviews-interval(插入間隔,預設 4000ms,掛載時讀取一次)、--wb-social-post-reviews-accent(強調色,預設亮色 #0d9488、暗色 #2dd4bf,影響標籤、提及、徽章、新卡細條與提示列)。下推動畫是 stiffness 300、damping 30 的彈簧。
  • 滑鼠移入、焦點在動態牆內、分頁切到背景、區塊離開視口時都會自動暫停。

可及性

  • 根元素是 <section aria-labelledby>,指向標題 h2;貼文清單是 role="feed",每則 article 帶 aria-posinset/aria-setsize,可用 Tab 逐則聚焦
  • 每則評價以 figure/blockquote/figcaption 呈現;頭像與附圖佔位對輔助科技隱藏,認證徽章有「已認證」的隱藏文字,回覆與轉貼數附完整說明
  • 新貼文插入時由 aria-live="polite" 區域朗讀「新評價:姓名」,5 秒內最多一次,避免朗讀洗版
  • 提供可見的「暫停自動更新」按鈕(WCAG 2.2.2),hover、focus-within 與分頁隱藏時也會暫停;愛心是帶 aria-pressed 的按鈕
  • 使用者系統開啟「減少動態效果」時,自動更新預設暫停(仍可按「繼續自動更新」),新貼文改為 150ms 直接淡入,不滑動、不彈簧下推,數字與愛心也不滾動、不輕跳