CodeConnect Design System

Card

コンテンツをグループ化し、視覚的に区別するカードコンポーネント。

基本的な使い方

Preview

コンポーネント構成

Cardは以下のサブコンポーネントで構成されています。

Card

カード全体のコンテナ。

CardHeader

カードのヘッダー部分。CardTitleとCardDescriptionを含みます。

CardTitle

カードのタイトル(<h3> 要素)。

CardDescription

カードの説明文。

CardContent

カードのメインコンテンツ部分。

CardFooter

カードのフッター部分。アクションボタンなどを配置します。

完全な構成

すべてのサブコンポーネントを使用した例。

Preview

シンプルなカード

ヘッダーとコンテンツのみのシンプルな構成。

Preview

コンテンツのみ

ヘッダーなしでコンテンツのみを表示。

Preview

カードのグリッド

複数のカードをグリッドレイアウトで配置。

Preview

カスタムスタイル

className propでカスタムスタイルを適用できます。

Preview

ホバースタイルの適用

Cardコンポーネントはデフォルトではホバースタイルを持ちません。クリック可能なカードには、className propで明示的にホバースタイルを追加してください。

推奨ホバースタイル

  • hover:shadow-lg - シャドウを強調
  • hover:scale-[1.01] - 控えめな拡大(1%)
  • hover:border-brand/20 - ブランドカラーのボーダー
  • transition-all - スムーズなトランジション(Cardにデフォルト設定済み)

クリック可能なカードの例

Preview

静的カードの例

Preview

Props

Card

PropTypeDefaultDescription
classNamestring-追加のCSSクラス
childrenReactNode-カードの内容

CardHeader

PropTypeDefaultDescription
classNamestring-追加のCSSクラス
childrenReactNode-ヘッダーの内容

CardTitle

PropTypeDefaultDescription
classNamestring-追加のCSSクラス
childrenReactNode-タイトルテキスト

CardDescription

PropTypeDefaultDescription
classNamestring-追加のCSSクラス
childrenReactNode-説明文

CardContent

PropTypeDefaultDescription
classNamestring-追加のCSSクラス
childrenReactNode-コンテンツ

CardFooter

PropTypeDefaultDescription
classNamestring-追加のCSSクラス
childrenReactNode-フッターの内容

アクセシビリティ

  • セマンティックHTML: 適切なHTML要素を使用(<h3>, <p>, <div>
  • 階層構造: 明確なコンテンツ階層を提供
  • 柔軟性: さまざまなコンテンツタイプに対応

使用例

サービス紹介カードの実装例:

import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, Button } from '@codeconnect-llc/design-system'
export function ServiceCards() {
const services = [
{
title: 'Webアプリ開発',
description: 'モダンなWebアプリケーション',
content: 'React, TypeScript, Tailwind CSSを使用した高品質な開発',
},
{
title: 'UIデザイン',
description: 'ユーザー体験を重視',
content: 'Figmaを使用したプロトタイプ作成から実装まで',
},
{
title: 'コンサルティング',
description: '技術戦略の立案',
content: 'アーキテクチャ設計からチーム育成まで',
},
]
return (
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{services.map((service) => (
<Card key={service.title}>
<CardHeader>
<CardTitle>{service.title}</CardTitle>
<CardDescription>{service.description}</CardDescription>
</CardHeader>
<CardContent>
<p className="text-text-secondary">{service.content}</p>
</CardContent>
<CardFooter>
<Button variant="outline" size="sm">
詳しく見る
</Button>
</CardFooter>
</Card>
))}
</div>
)
}