Card

Cardは、関連するコンテンツをグループ化して表示するためのコンテナコンポーネントです。ヘッダー、コンテンツ、フッターの構造で情報を整理し、画像やアクションを含む多様なレイアウトに対応します。

3
Variants
3
Sizes
2
Orientations
Pure
React

Playground

Preview
D

Card Title

Card description goes here.

This is the main content area of the card. It can contain any content.

Variant
Size
Radius
Direction
Options
<Card>
  <Card.Header>
    <Card.Title icon={<Layers />}>Card Title</Card.Title>
    <Card.Description>Card description goes here.</Card.Description>
  </Card.Header>
  <Card.Content>
    <p className="text-sm text-text-muted">
      This is the main content area of the card. It can contain any content.
    </p>
  </Card.Content>
  <Card.Footer>
    <Button size="sm" variant="ghost" className="ml-auto" rightIcon={<ChevronRight />}>
      Learn more
    </Button>
  </Card.Footer>
</Card>

Variants

3つのバリアントで、カードの視覚的な重要度を制御できます。

Default

Default

シャドウで浮き上がるスタイル

メインUI
Outline

Outline

ボーダーのみのフラットなスタイル

リスト・グリッド
Ghost

Ghost

背景・ボーダーなしの最小スタイル

グループ内

Sizes

sm
16px
20px
内部下12px
末尾下20px
default
24px
24px
内部下16px
末尾下24px
lg
32px
32px
内部下16px
末尾下32px

レスポンシブ: default・lgサイズはモバイル(640px未満)で自動的にパディングが一段階小さくなります。smサイズは固定値です。

Features

Orientation

垂直・水平のレイアウト方向を切り替えられます。水平レイアウトでは画像が左側に配置されます。

Vertical (Default)

Image Area

Vertical Card

Image on top, content below.

<Card>
  <Card.Image src="/placeholder.jpg" alt="Preview" />
  <Card.Header>
    <Card.Title>Vertical Card</Card.Title>
    <Card.Description>Image on top, content below.</Card.Description>
  </Card.Header>
</Card>

Horizontal

Preview

Horizontal Card

Image on left, content on right.

<Card direction="horizontal">
  <Card.Image src="/placeholder.jpg" alt="Preview" />
  <Card.Header>
    <Card.Title>Horizontal Card</Card.Title>
    <Card.Description>Image on left, content on right.</Card.Description>
  </Card.Header>
</Card>

Header Action

Notifications

You have 3 unread messages.

<Card>
  <Card.Header>
    <Card.Title>Notifications</Card.Title>
    <Card.Description>You have 3 unread messages.</Card.Description>
    <Card.Action>
      <DropdownMenu>
        <DropdownMenu.Trigger asChild>
          <IconButton variant="ghost" size="sm">
            <MoreHorizontal />
          </IconButton>
        </DropdownMenu.Trigger>
        <DropdownMenu.Content align="end">
          <DropdownMenu.Item>Edit</DropdownMenu.Item>
          <DropdownMenu.Item>Duplicate</DropdownMenu.Item>
          <DropdownMenu.Separator />
          <DropdownMenu.Item>Delete</DropdownMenu.Item>
        </DropdownMenu.Content>
      </DropdownMenu>
    </Card.Action>
  </Card.Header>
</Card>

Image Overlay

Beach

Tropical Beach

Discover the most beautiful beaches.

<Card variant="outline">
  <Card.Image
    src="https://images.unsplash.com/photo-1507525428034-b723cf961d3e?w=600&h=300&fit=crop"
    alt="Beach"
    overlay
    className="h-48"
  />
  <Card.Header>
    <Card.Title>Tropical Beach</Card.Title>
    <Card.Description>Discover the most beautiful beaches.</Card.Description>
  </Card.Header>
</Card>

Customization

overlayOpacityとoverlayClassNameで画像オーバーレイをカスタマイズできます。

透明度の調整

Beach

ライト (30%)

Beach

デフォルト (60%)

Beach

ダーク (80%)

<Card.Image overlay overlayOpacity={30} /> {/* ライト */} <Card.Image overlay /> {/* デフォルト 60% */} <Card.Image overlay overlayOpacity={80} /> {/* ダーク */}

フルカスタマイズ

{/* Change gradient direction */} <Card.Image overlay overlayClassName="from-black/60 bg-gradient-to-b" /> {/* Color overlay */} <Card.Image overlay overlayClassName="from-blue-900/50" />

Tip: overlayClassNameを指定するとoverlayOpacityより優先されます。グラデーション方向や色を自由に変更できます。

API

Component Structure

Card— Radix Slot
.ImageProps.HeaderProps.TitleProps.DescriptionProps.ActionProps.ContentProps.FooterProps

Props

Card

variant"default"
"default" | "outline" | "ghost"

カードのビジュアルスタイル

size"default"
"sm" | "default" | "lg"

コンテンツのパディングスケール(レスポンシブ対応)

radius"xl"
"sm" | "base" | "md" | "lg" | "xl" | "2xl"

角丸の大きさ (2/4/6/8/12/16px)

direction"vertical"
"vertical" | "horizontal"

レイアウト方向

interactivefalse
boolean

ホバー時のシャドウ強化・リフト効果(クリック可能なカード用)

asChildfalse
boolean

Slotパターンで子要素として描画

Card.Title

iconundefined
React.ReactNode

タイトルの先頭に表示するアイコン

Card.Image

overlayfalse
boolean

グラデーションオーバーレイを表示

overlayOpacity60
number

オーバーレイの透明度(10〜90)

overlayClassNameundefined
string

オーバーレイのカスタムクラス(overlayOpacityより優先)

alt""
string

画像の代替テキスト

Card.Header / Card.Content / Card.Footer / Card.Action / Card.Description

標準のHTMLDivAttributes(Card.DescriptionはHTMLParagraphAttributes)を継承。カードのsizeコンテキストに基づいてパディングが自動調整されます。

Anatomy

1
2
3
4
5
Card Title
6
Short description text here
7
8
Cancel
Confirm
Padding X24px
Padding top24px
Radius12px(xl)
1
Root
Card
2
Image
Card.Image
3
Header
Card.Header
4
Icon
Card.Title icon
5
Title
Card.Title
6
Action
Card.Action
7
Content
Card.Content
8
Footer
Card.Footer

Best Practices

推奨

  • 関連するコンテンツを1枚のカードにまとめる
  • 一貫したvariantとsizeを同じセクション内で使用する
  • クリック可能なカードにはinteractive propを使用する
  • 画像にはalt属性を設定する

避けるべき

  • カード内にカードをネストしない
  • 1枚のカードに過剰なコンテンツを詰め込まない
  • interactiveカードの中にボタン等を配置しない(クリックが競合)
  • レイアウトのためだけにカードを使用しない

Accessibility

セマンティクス

asChildリンクカードには<a>を使用
h3Card.Titleはh3要素で出力

ARIA / WCAG

  • Card.Titleのアイコンに aria-hidden="true"
  • Card.Imageに alt 属性サポート
  • 見出し階層(h3)を適切に使用
  • DOM順序がビジュアル順序と一致