Skip to content

Hover Card

Cho phép người dùng xem trước nội dung có sẵn đằng sau một link.

Chỉ dành cho Web

Component này chỉ khả dụng cho các framework web (Vue, React, Angular). Tương tác hover không có trên nền tảng mobile.

@nextjs

Cài đặt

bash
npx @galaxy-stack/nebula-cli@latest add hover-card
bash
pnpm dlx @galaxy-stack/nebula-cli@latest add hover-card
bash
yarn dlx @galaxy-stack/nebula-cli@latest add hover-card
bash
bunx @galaxy-stack/nebula-cli@latest add hover-card

Sử dụng

Vue

vue
<script setup lang="ts">
import { HoverCard, HoverCardTrigger, HoverCardContent } from '@/components/ui'
</script>

<template>
  <HoverCard>
    <HoverCardTrigger>Di chuột vào</HoverCardTrigger>
    <HoverCardContent>
      <div class="space-y-2">
        <h4 class="text-sm font-semibold">@nextjs</h4>
        <p class="text-sm">React Framework – được tạo và duy trì bởi @vercel.</p>
      </div>
    </HoverCardContent>
  </HoverCard>
</template>

React

tsx
import {
  HoverCard,
  HoverCardTrigger,
  HoverCardContent,
} from "@/components/ui/hover-card"

export default function App() {
  return (
    <HoverCard>
      <HoverCardTrigger asChild>
        <a href="https://nextjs.org">Di chuột vào</a>
      </HoverCardTrigger>
      <HoverCardContent className="w-80">
        <div className="space-y-2">
          <h4 className="text-sm font-semibold">@nextjs</h4>
          <p className="text-sm">
            React Framework – được tạo và duy trì bởi @vercel.
          </p>
        </div>
      </HoverCardContent>
    </HoverCard>
  )
}

Angular

typescript
import { Component } from '@angular/core';
import { HoverCardComponent } from '@/components/ui/hover-card';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [HoverCardComponent],
  template: `
    <ui-hover-card>
      <a trigger href="https://nextjs.org">Di chuột vào</a>
      <div content class="w-80 space-y-2">
        <h4 class="text-sm font-semibold">@nextjs</h4>
        <p class="text-sm">
          React Framework – được tạo và duy trì bởi @vercel.
        </p>
      </div>
    </ui-hover-card>
  `
})
export class AppComponent {}

API Reference

Props

PropKiểuMặc địnhMô tảFrameworks
openboolean-Trạng thái mở được kiểm soátReact, Vue, Angular
defaultOpenbooleanfalseTrạng thái mở ban đầu cho chế độ uncontrolledReact, Vue, Angular
onOpenChange(open: boolean) => void-Được gọi khi trạng thái mở thay đổiReact, Vue, Angular
openDelaynumber700Độ trễ tính bằng milliseconds trước khi mởReact, Vue, Angular
closeDelaynumber300Độ trễ tính bằng milliseconds trước khi đóngReact, Vue, Angular
childrenReactNode-Nội dung composition của hover cardReact, Vue, Angular

Sub-components

HoverCardTrigger

PropKiểuMặc địnhMô tảFrameworks
asChildbooleanfalseRender trigger như một phần tử conReact, Vue
asAsTag | Component'button'Phần tử hoặc component để renderVue only

HoverCardContent

PropKiểuMặc địnhMô tảFrameworks
side'top' | 'right' | 'bottom' | 'left''bottom'Vị trí ưu tiên cho nội dungReact, Vue, Angular
align'start' | 'center' | 'end''center'Căn chỉnh dọc theo cạnhReact, Vue, Angular
sideOffsetnumber5Offset tính bằng pixels từ triggerReact, Vue, Angular
avoidCollisionsbooleantrueTránh va chạm với viewport edgesReact, Vue, Angular
forceMountboolean-Force-mount content ngay cả khi đóngReact, Vue
className / classstring-Tên CSS classReact (className), Vue/Angular (class)

Khả năng truy cập

  • Điều hướng bàn phím: [TODO]
  • Đọc màn hình: [TODO]
  • Quản lý focus: [TODO]
  • Tuân thủ WCAG: Tuân thủ WCAG 2.1 cấp độ AA

Tác giả

Bùi Trọng Hiếu (kevinbui)

Giấy phép

MIT © 2025 Bùi Trọng Hiếu (kevinbui)

Phát hành theo Giấy phép MIT.