WebberUI

Direction-aware Card

依游標進入的方向滑入覆蓋層的 hover 卡片,支援 cover 與 push 兩款動態。

載入預覽⋯

Playground

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

0.4
<DirectionAwareCard />

安裝

npx shadcn@latest add https://webberui.com/r/direction-aware-card.json

或在 components.json 設定 registries 後,改用 @webberui/direction-aware-card 安裝。

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

npm install motion clsx tailwind-merge

使用

import { DirectionAwareCard } from "@/components/ui/direction-aware-card";

<DirectionAwareCard
  className="h-56 w-44"
  overlay={
    <>
      <p className="text-sm font-semibold">立即探索</p>
      <p className="text-xs opacity-80">覆蓋層從游標進入側滑入</p>
    </>
  }
>
  <div className="flex h-full items-end p-4">
    <p className="text-sm font-medium">卡片標題</p>
  </div>
</DirectionAwareCard>

覆蓋層會偵測游標從上/下/左/右哪一側進入卡片,並沿該側滑入;離開時則往離開的那一側滑回。

Props

DirectionAwareCard 繼承原生 <div> 的所有屬性,並額外提供:

Prop型別預設值說明
overlayReact.ReactNodehover / focus 時揭示的覆蓋層內容
childrenReact.ReactNode常態顯示的底層內容
variant"cover" | "push""cover"cover 覆蓋層蓋住底層;push 覆蓋層滑入時把底層往同方向推出
durationnumber0.4覆蓋層滑入/滑出時長(秒)
overlayClassNamestring追加到覆蓋層,可覆蓋預設的背景與置中排版
classNamestring追加到最外層卡片容器

細節

  • 進入方向以游標相對卡片中心的角度判斷,並用卡片較短邊正規化較長邊,長寬比懸殊時判斷仍貼近視覺直覺。
  • 進入時記錄「進入側」、離開時改記錄「離開側」,因此覆蓋層總是沿著游標實際經過的那一側進出。
  • 最外層以 overflow-hidden 裁切滑動中的覆蓋層與底層;push 款式利用 transform 位移,不影響版面高度。

可及性

  • 使用鍵盤 Tab 聚焦(focus-visible)時同樣揭示覆蓋層,覆蓋層內的連結與按鈕因此可被鍵盤操作。
  • 覆蓋層隱藏時加上 inert,將其移出 tab 序並對輔助科技隱藏,避免出現「看不見卻可聚焦」的元素。
  • 開啟系統「減少動態效果」時,方向性滑動退化為單純的淡入淡出,不產生位移感。

On this page