JGuang

眩光悬停

Glare Hover · Magic UI

交互预览
npx shadcn@latest add https://jiguang132.com/r/magic-ui/glare-hover.json

部分上游示例使用在线图片、视频或推文;这些内容依赖网络与第三方服务,不代表本地预览加载失败。

眩光悬停

Magic UI 的独立组件,请不要替换为 JGuang UI/Base UI 的同名 API。

安装

npx shadcn@latest add https://jiguang132.com/r/magic-ui/glare-hover.json

Registry 将复制可编辑源码和依赖到独立命名空间。检查主题变量与 Tailwind CSS v4 配置;不要覆盖已有的项目组件。

使用与验证

在左侧选择组件,在预览中操作它的状态;使用“查看代码”检查真实源码。安装后执行类型检查和构建,再验证键盘焦点、手机布局与深浅色主题。

来源

https://github.com/magicuidesign/magicui/tree/cdb348cb4c72a9b54b554d8617801e479fbc8714 MIT 许可证;不包括付费内容。下方提供上游英文参考内容,中文使用指南已适配;上游详细参考暂保留英文。


适用场景

悬停时在内容上扫过高光。

示例使用的原生参数

从该组件全部本地示例的 JSX 提取,按导入模块及组件区分;包括复合示例中实际使用的其他 Magic UI 组件。不是全部属性清单,也不是宿主通用 variant API。展开对象需结合示例数据声明;完整类型与默认值见下方源码参考。

所属组件参数说明示例来源
GlareHover.className (glare-hover)当前原生组件的样式类,需先配置 Tailwind 与所需 CSS。examples/glare-hover-demo.tsx、examples/glare-hover-demo-cta.tsx、examples/glare-hover-demo-alert.tsx
GlareHover.duration (glare-hover)高光扫过时长,单位毫秒。examples/glare-hover-demo.tsx、examples/glare-hover-demo-cta.tsx、examples/glare-hover-demo-alert.tsx
GlareHover.children (glare-hover)原生子内容,保留所属组件对文本/元素的约束。examples/glare-hover-demo.tsx、examples/glare-hover-demo-cta.tsx、examples/glare-hover-demo-alert.tsx
GlareHover.color (glare-hover)所属特效的原生颜色,保留其颜色格式限制。examples/glare-hover-demo-cta.tsx、examples/glare-hover-demo-alert.tsx
GlareHover.opacity (glare-hover)原生特效透明度,通常为 0–1 比例。examples/glare-hover-demo-alert.tsx

交互与状态检查

  • 眩光悬停 · 默认示例 — glare-hover-demo
  • 眩光悬停 · 行动按钮卡片 — glare-hover-demo-cta
  • 眩光悬停 · 提示卡片 — glare-hover-demo-alert

这些名称是实际示例入口,不是新增组件属性或独立组件数量。选择对应示例后,检查指针/键盘行为、深浅色、手机尺寸和加载失败;纯装饰特效不应伪造禁用、错误或提交状态。完整示例安装包含其真实依赖闭包。

业务接入边界

此处 duration 单位为毫秒,与许多 Motion 组件不同;color 必须是原生解析器接受的十六进制颜色。

宿主与动画配置

初始化 Tailwind CSS v4、语义 CSS 变量及 dark 变体;按本地 Registry 的独立命名空间导入。复用已有 next-themes Provider,不混入 JGuang UI/Base UI/HeroUI API。进入视口再挂载特效,离开后卸载;为 Canvas/WebGL 不可用、网络媒体失败提供静态替代。遵循 prefers-reduced-motion,并验证计时器、RAF、观察器和事件监听已清理;不能仅凭 CSS 停止就宣称引擎已停止。示例不提供后端、登录、支付或真实 AI 流。这里的实用指南为双语,上游详细参考和演示文本仍保留原文。

可用状态与示例

眩光悬停 · 默认示例、眩光悬停 · 行动按钮卡片、眩光悬停 · 提示卡片

组件中的状态与数据为演示用途,不包含后端接口。接入实际项目时请检查源码中的公开参数,再连接业务数据。

Examples

CTA

Alerts

Installation

<Tabs defaultValue="cli"> <TabsList> <TabsTrigger value="cli">CLI</TabsTrigger> <TabsTrigger value="manual">Manual</TabsTrigger> </TabsList> <TabsContent value="cli">
npx shadcn@latest add @magicui/glare-hover
</TabsContent> <TabsContent value="manual"> <Steps>

<Step>Copy and paste the following code into your project.</Step>

<Step>Update the import paths to match your project setup.</Step>

</Steps> </TabsContent> </Tabs>

Usage

The effect is implemented with a ::before pseudo-element: a linear-gradient tile moves from one corner to the opposite on hover. Color is parsed from hex (#rgb or #rrggbb) into rgba for the glare band.

import { GlareHover } from "@/registry/magicui/glare-hover"
<GlareHover className="rounded-lg">
  <Card>
    <CardContent>
      <CardTitle>Hello World</CardTitle>
      <CardDescription>Hover to see the glare sweep</CardDescription>
    </CardContent>
  </Card>
</GlareHover>

Colors and opacity

Use color (hex glare highlight) and opacity (alpha of that highlight). background sets the container background (default #000).

<GlareHover
  className="rounded-lg"
  color="#a78bfa"
  opacity={0.35}
  background="#0a0a0a"
>
  <Card>{/* ... */}</Card>
</GlareHover>

Angle and size

angle is the gradient angle in degrees (default -45). size is the glare tile size as a percentage of the element (default 250), passed to background-size.

<GlareHover className="rounded-lg" angle={-30} size={280}>
  <Card>{/* ... */}</Card>
</GlareHover>

Duration

duration is the transition length in milliseconds (default 650).

<GlareHover className="rounded-lg" duration={500}>
  <Card>{/* ... */}</Card>
</GlareHover>

playOnce

With playOnce (default false), the glare only animates while hovering: transitions are disabled until hover, so the sweep runs each time you enter the element instead of animating on first paint.

<GlareHover className="rounded-lg" playOnce>
  <Card>{/* ... */}</Card>
</GlareHover>

Layout

Optional width and height are merged onto the root style (string values, e.g. "100%"). You can also rely on className (e.g. w-full) and normal style / div props.

Props

GlareHover

PropTypeDefaultDescription
childrenReact.ReactNode—Content inside the wrapper.
classNamestring—Classes on the root div (use rounded-*, overflow-hidden, etc.).
styleCSSProperties—Merged after CSS variables and background.
backgroundstring"#000"Root background color.
colorstring"#ffffff"Glare highlight (hex #rgb / #rrggbb).
opacitynumber0.5Alpha for the parsed glare color.
anglenumber-45Gradient angle in degrees (--gh-angle).
sizenumber250Glare tile size in % (--gh-size).
durationnumber650Transition duration in ms (--gh-duration).
playOncebooleanfalseIf true, animation runs on hover only (no transition until hover).
widthstring—Optional width on the root style.
heightstring—Optional height on the root style.

The root forwards standard div props (onClick, data-*, etc.). The glare is drawn on ::before with z-10 above the content.

Credits

完整示例安装

组件安装命令只安装组件;下列示例命令还包含该示例实际导入的其他组件、原生辅助 UI、工具和固定版本依赖。辅助源码不算独立组件。

眩光悬停 · 默认示例

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/glare-hover/glare-hover-demo.json

默认导入: @/components/magicui/examples/glare-hover-demo

依赖: @radix-ui/react-slot@1.3.0, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

眩光悬停 · 行动按钮卡片

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/glare-hover/glare-hover-demo-cta.json

默认导入: @/components/magicui/examples/glare-hover-demo-cta

依赖: @radix-ui/react-slot@1.3.0, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

眩光悬停 · 提示卡片

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/glare-hover/glare-hover-demo-alert.json

默认导入: @/components/magicui/examples/glare-hover-demo-alert

依赖: class-variance-authority@0.7.1, clsx@2.1.1, lucide-react@1.24.0, tailwind-merge@3.6.0

最小使用与主题

import Demo from '@/components/magicui/examples/glare-hover-demo';
import { ThemeProvider } from 'next-themes';
export default function Example() {
  return <ThemeProvider attribute="class" defaultTheme="system" enableSystem><Demo /></ThemeProvider>;
}

项目须先配置 Tailwind CSS v4、语义颜色变量和 dark 变体。已有 next-themes Provider 时复用它,不要重复嵌套。Next Link 示例需要 Next.js 环境;静态 Vite 项目可保留原生组件代码,并自行将示例的页面链接改为项目路由。部分演示图片、视频和推文依赖网络;示例不包含登录或后端服务。实用指南与示例标签已提供中文,上游详细英文参考及演示数据未宣称全文翻译。

源码参数参考

以下实现签名和类型从本地固定版本源码生成。保留可选属性、原生继承类型、联合分支和 never 限制;不会将其他设计系统的 API 混入。forwardRef 实现中的 ref 属于 React 引用,不是新增业务属性。此区域是原始类型参考,不是上游说明的全文翻译。

GlareHover({
  background = "#000",
  children,
  color = "#ffffff",
  opacity = 0.5,
  angle = -45,
  size = 250,
  duration = 650,
  playOnce = false,
  className,
  style,
  width,
  height,
  ...props
}: GlareHoverProps)
export interface GlareHoverProps extends ComponentProps<"div"> {
  /**
   * Optional CSS width on the root element (e.g. `"100%"`, `"320px"`).
   * @example
   * ```tsx
   * <GlareHover width="100%">...</GlareHover>
   * ```
   */
  width?: string
  /**
   * Optional CSS height on the root element (e.g. `"auto"`, `"200px"`).
   * @example
   * ```tsx
   * <GlareHover height="200px">...</GlareHover>
   * ```
   */
  height?: string
  /**
   * Background color of the wrapper (CSS color string).
   * @example
   * ```tsx
   * <GlareHover background="#0a0a0a">...</GlareHover>
   * ```
   */
  background?: string
  /**
   * Glare highlight as `#rrggbb` or `#rgb`; parsed to `rgba` for the gradient.
   * @example
   * ```tsx
   * <GlareHover color="#a78bfa">...</GlareHover>
   * ```
   */
  color?: Color
  /**
   * Opacity applied to the glare color when converting hex to `rgba` (0–1).
   * @example
   * ```tsx
   * <GlareHover color="#ffffff" opacity={0.35}>...</GlareHover>
   * ```
   */
  opacity?: number
  /**
   * Gradient angle in degrees (`--gh-angle`).
   * @example
   * ```tsx
   * <GlareHover angle={-30}>...</GlareHover>
   * ```
   */
  angle?: number
  /**
   * Glare tile size as a percentage of the element (`--gh-size`, `background-size`).
   * @example
   * ```tsx
   * <GlareHover size={280}>...</GlareHover>
   * ```
   */
  size?: number
  /**
   * Transition duration for the glare sweep in milliseconds (`--gh-duration`).
   * @example
   * ```tsx
   * <GlareHover duration={500}>...</GlareHover>
   * ```
   */
  duration?: number
  /**
   * When `true`, the glare transition only runs on hover (no animation until pointer enters).
   * @example
   * ```tsx
   * <GlareHover playOnce>...</GlareHover>
   * ```
   */
  playOnce?: boolean
}

type Color = `#${string}`

源码中的解构默认值

只列出直接写在参数或 props 解构中的默认表达式。条件表达式、运行时主题和其他计算值请结合源码;这里不是全部行为的默认值清单。

// GlareHover
background = "#000"

// GlareHover
color = "#ffffff"

// GlareHover
opacity = 0.5

// GlareHover
angle = -45

// GlareHover
size = 250

// GlareHover
duration = 650

// GlareHover
playOnce = false

原生与外部类型

以下外部类型仍由 React 或资源自身依赖定义,没有手工展开为虚构属性。实际可用类型以安装版本的 TypeScript 检查为准。

ComponentProps<"div">