頁面區塊 Sections

頭像分頁引言

客戶評價區塊 React 元件:左側直列頭像與姓名作為分頁,選中標記沿列滑動,右側引言以模糊交叉淡接切換,頭像同步放大,背景光斑跟著選中者換色相。

把幾則客戶評價收進同一個區塊:左側是一列頭像與姓名,點選或用方向鍵切換;選中標記(3px 強調色指示條+淡底色塊)以彈簧沿列滑動,清單裡的頭像同步放大到 1.1 倍。右側顯示選中者的大頭像、引言、作者與可選的成效數字,切換時舊內容模糊淡出、新內容從模糊中浮現;背景一團 8% 不透明度的柔和光斑依選中者的色相過渡。窄螢幕上清單自動改為橫向捲動的頭像列。頭像不需要照片:預設以姓名縮寫+黃金角度色相的漸層圓產生,也可傳 avatarSrc 換成真圖。

把這個效果裝進你的專案

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

npx webberui@latest add avatar-tab-quotes

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

Playground

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

400
350
6000
編輯中的呼叫預設屬性
<AvatarTabQuotes/>

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

安裝

npx webberui@latest add https://webberui.com/r/avatar-tab-quotes.json

或在 components.json 設定 registries 後,改用 @webberui/avatar-tab-quotes 安裝。

使用

import { AvatarTabQuotes } from "@/components/ui/avatar-tab-quotes";

<AvatarTabQuotes
  eyebrow="客戶怎麼說"
  title="四個團隊,四種上線速度"
  testimonials={[
    {
      quote: "改版後的會員頁一週就上線,門市店員也能自己換季節菜單。",
      name: "林語晴",
      role: "營運主管",
      company: "青嶼咖啡",
      highlight: "一週就上線",
      metric: { value: "7 天", label: "從設計到上線" },
    },
    {
      quote: "貨況追蹤頁的載入時間少了一半,客服電話跟著明顯變少。",
      name: "陳柏宇",
      role: "產品經理",
      company: "北辰物流",
    },
  ]}
/>

Props

Prop型別預設值說明
testimonialsAvatarTabQuotesItem[]—評價資料,依序對應頭像列
eyebrowstring—標題上方的小標
titlestring—區塊標題;同時作為 section 的無障礙名稱
subtitlestring—標題下方的說明文字
valuenumber—受控的選中索引;未提供時由元件內部管理
defaultValuenumber0非受控模式的初始選中索引
onValueChange(index: number) => void—選中索引變動時回呼
autoplaybooleanfalse自動輪播;開啟時顯示暫停鈕與選中列下方的進度線
intervalnumber6000自動輪播間隔(毫秒),最小 1000
orientation"vertical" | "horizontal""vertical"頭像列方向;vertical 在 md 以下自動改為橫向捲動頭像列
pauseLabelstring"暫停自動播放"暫停鈕標籤(輪播中)
playLabelstring"繼續自動播放"暫停鈕標籤(已暫停)
listLabelstring"選擇評價"頭像列(tablist)的無障礙名稱;沒有 title 時也作為 section 的名稱
classNamestring—併入根 section

AvatarTabQuotesItem

欄位型別預設值說明
quotestring—評價內文
namestring—評價者姓名;同時用來產生頭像縮寫(中文取末兩字、拉丁取首字母)
rolestring—職稱
companystring—公司或單位,顯示在清單姓名下方與作者列
ratingnumber—星等(1–5);未提供時不顯示
avatarHuenumber依索引的黃金角度色相頭像漸層與背景光斑的色相(0–360)
highlightstring—quote 中要加強調色底線的片段,需與內文完全相符
metric{ value: string; label: string }—引言下方的成效數字
avatarSrcstring—頭像圖片網址;未提供時用縮寫+漸層圓

CSS 變數

變數預設值說明
--wb-avatar-tab-quotes-accent#0d9488(暗色 #2dd4bf)指示條、大頭像細環、小標、成效數字與底線的強調色
--wb-avatar-tab-quotes-stiffness400選中標記與頭像放大的彈簧剛度(damping 固定 34)
--wb-avatar-tab-quotes-duration350ms右側內容模糊淡出/淡入各自的時長
--wb-avatar-tab-quotes-glow-duration600ms背景光斑換色相的過渡時長

細節

  • 右側內容用 AnimatePresence 的 mode="wait":舊內容先模糊(8px)、上移 8px 並淡出,新內容再從下方 8px、模糊中浮現,兩段都使用 --wb-avatar-tab-quotes-duration。
  • 背景光斑是一個以 currentColor 填色的徑向漸層,切換時只改 color,讓瀏覽器原生的顏色過渡帶動色相變化,不需要逐格重繪。
  • 窄螢幕時頭像列橫向捲動,切換(包括自動輪播)只捲動清單本身、不會拉動整個頁面,選中的頭像會被捲進可視範圍。
  • 自動輪播在滑鼠移入、鍵盤聚焦於區塊內或分頁被隱藏時暫停;暫停時進度線停止,恢復後從頭計時。

可及性

  • 根元素是 <section>,有 title 時以 aria-labelledby 指向標題,否則用 listLabel 作為名稱
  • 頭像列為 role="tablist",aria-orientation 依實際方向(直列或窄螢幕的橫向列)設定;每個頭像是 role="tab" 按鈕,採 roving tabindex
  • 直列時 ↑/↓、橫向時 ←/→ 切換,Home/End 跳到第一則與最後一則;切換後焦點跟著移動
  • 右側是 role="tabpanel",以 aria-labelledby 指向目前的分頁;未自動輪播時內容變化以 aria-live="polite" 朗讀,輪播中則關閉朗讀避免干擾
  • 引言以 figure/blockquote/figcaption 呈現;頭像為裝飾性(aria-hidden),分頁名稱由姓名與公司組成
  • 開啟自動輪播時一定顯示可見的暫停/播放鈕(WCAG 2.2.2)
  • 使用者系統開啟「減少動態效果」時,自動輪播預設關閉(仍可按播放鈕開啟),彈簧滑動、頭像放大、模糊與位移改為 150ms 淡入淡出,內容仍可透過頭像切換