WebberUI

Depth Mask Hero

鎖屏景深主視覺:去背主體局部遮擋大字標題,捲動時主體、標題與背景以不同速率分離產生真實深度。

載入預覽⋯

Playground

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

1
20
<DepthMaskHero />

安裝

npx shadcn@latest add https://webberui.com/r/depth-mask-hero.json

或在 components.json 設定 registries 後,改用 @webberui/depth-mask-hero 安裝。

安裝依賴後,從 registry JSON(/r/depth-mask-hero.jsonfiles[0].content)複製 depth-mask-hero.tsx 原始碼到你的 components/ui/ 目錄:

npm install motion clsx tailwind-merge

使用

import { DepthMaskHero } from "@/components/ui/depth-mask-hero";

<DepthMaskHero
  title="OUTSIDE"
  kicker="夏季特輯"
  date="7月13日 週一"
  time="9:41"
  subject="/people/hiker.png"
  subjectAlt="登山者"
>
  <section className="px-6 py-16">內文從這裡開始…</section>
</DepthMaskHero>

未提供 subject 時會渲染內建的中性色人像剪影,因此無外部素材也能直接展示遮罩構圖。主視覺以 position: sticky 吸頂,捲動穿越後才把 children 內文遞補上來;若放在巢狀 overflow 容器內捲動,記得把該容器的 ref 傳入 container

Props

Prop型別預設值說明
titleReact.ReactNode主標題,大字級、被主體局部遮擋
titleAs"h1" | "h2" | "h3""h1"主標題的語意標籤,避免與頁面標題衝突
kickerReact.ReactNode眉題(小標),顯示於主標題上方
subjectstring去背主體圖 URL(建議透明 PNG)
subjectAltstring主體替代文字;未提供時視為裝飾
backgroundstring背景圖 URL;未提供時以中性色漸層填底
timeReact.ReactNode鎖屏時間文字,例如 "9:41"
dateReact.ReactNode鎖屏日期文字,顯示於時間上方
heightstring"100svh"主視覺面板高度(任意 CSS 長度)
scrollDistancestring"80vh"深度分離所需的額外捲動距離
stickyTopnumber0面板吸頂位置(px)
depthnumber1各層深度分離的位移倍率,越大分層越明顯
pointerParallaxbooleantrue是否啟用滑鼠視差
parallaxStrengthnumber20滑鼠視差的最大位移量(px)
springConfigSpringOptions{ stiffness: 140, damping: 20, mass: 0.4 }視差回彈的 spring 參數
containerReact.RefObject<HTMLElement | null>巢狀捲動容器的 ref;預設以視窗為捲動容器
childrenReact.ReactNode捲動穿越主視覺後顯露的內文
heroClassNamestring套用在主視覺面板上的 class
titleClassNamestring套用在主標題上的 class

細節

  • 三層深度分離:背景(z-0)位移最小且與游標反向,標題(z-10)居中,去背主體(z-20)位移最大且與游標同向;捲動時三層以不同速率移動,速率差即是深度。
  • 深度遮罩:主體為去背圖(透明 PNG)時,透明區自然露出後方標題、不透明區把標題遮住,形成鎖屏般的「文字繞到主體之後」效果,無需額外的 mask 資源。
  • 鎖屏細節timedate 以鎖屏樣式置頂顯示,並隨捲動先行淡出。
  • 容器查詢排版:面板以 container-type: size 建立容器脈絡,標題與細節皆採 cqw 單位,能在任意面板尺寸下等比縮放。
  • 計時器/監聽清理:滑鼠視差以 motionMotionValueuseSpring 驅動,捲動進度以 useScroll 綁定;事件僅在 pointermove / pointerleave 上註冊,卸載時由 React 自動移除。

可及性

  • 使用者系統開啟「減少動態效果」時,停用捲動視差與滑鼠視差,主視覺以靜態層疊呈現,版面結構不變。
  • 主標題以真實的標題標籤(titleAs)輸出,預設 h1;置於已有主標的頁面時可下修為 h2 / h3
  • 主體圖提供 subjectAlt 時作為有意義影像朗讀,未提供時以 aria-hidden 視為純裝飾。
  • 背景、暈影、鎖屏時間等純視覺層皆標記 aria-hidden,不干擾輔助科技的閱讀順序。

On this page