Card
Flexible content containers with multiple variants for displaying grouped information.
Card Variants
Standard Card
Basic card with header, body, and footer
Card Title
Card subtitle text
This is a basic card with standard content. Cards are perfect for grouping related information together.
Card with Image
Image header card
Image Card
Beautiful card design with an image header.
Elevated Card
Shadow-based elevation
Elevated Card
This card uses shadow instead of border for a more elevated appearance.
Compact Card
Reduced padding variant
Compact Card
Less padding for dense layouts.
Card States
Status Cards
Cards with status indicators
Success
Operation completed successfully.
Warning
Please review this information.
Error
An error has occurred.
Information
Important information to note.
Horizontal Card
Side-by-side layout
Horizontal Layout
Image and content arranged side by side.
Real Estate Use Cases
Property Card
New
🏠 Property Image
€850,000
3 Bed
•
2 Bath
•
150m²
Modern apartment in city center with panoramic views.
Agent Card
John Smith
Senior Real Estate Agent
15+ years experience • 200+ properties sold
Implementation Guide
HTML Structure
<!-- Standard Card -->
<div class="lyd-card">
<div class="lyd-card-header">
<h3 class="lyd-card-title">Card Title</h3>
<div class="lyd-card-subtitle">Optional subtitle</div>
</div>
<div class="lyd-card-body">
<p>Your card content goes here.</p>
</div>
<div class="lyd-card-footer">
<button class="lyd-button secondary">Cancel</button>
<button class="lyd-button primary">Confirm</button>
</div>
</div>
<!-- Image Card -->
<div class="lyd-card">
<img src="image.jpg" alt="Description" class="lyd-card-image">
<div class="lyd-card-body">
<h3 class="lyd-card-title">Image Card</h3>
<p>Content below the image.</p>
</div>
</div>
Clickable Card JavaScript
// Make card clickable
document.querySelectorAll('.lyd-card.clickable').forEach(card => {
card.addEventListener('click', () => {
// Navigate to detail page
window.location.href = card.dataset.href;
});
});
// Card hover effects
document.querySelectorAll('.lyd-card').forEach(card => {
card.addEventListener('mouseenter', () => {
card.style.transform = 'translateY(-4px)';
});
card.addEventListener('mouseleave', () => {
card.style.transform = 'translateY(0)';
});
});
React/Next.js Component
// components/Card.tsx
import { ReactNode, HTMLAttributes } from 'react';
interface CardProps extends HTMLAttributes {
title?: string;
subtitle?: string;
image?: string;
footer?: ReactNode;
variant?: 'default' | 'elevated' | 'compact';
status?: 'success' | 'warning' | 'error' | 'info';
horizontal?: boolean;
clickable?: boolean;
children: ReactNode;
}
export const Card = ({
title,
subtitle,
image,
footer,
variant = 'default',
status,
horizontal = false,
clickable = false,
children,
className = '',
...props
}: CardProps) => {
const cardClasses = [
'lyd-card',
variant !== 'default' && variant,
status,
horizontal && 'horizontal',
clickable && 'clickable',
className
].filter(Boolean).join(' ');
return (
<div className={cardClasses} {...props}>
{image && (
<img src={image} alt="" className="lyd-card-image" />
)}
{horizontal ? (
<div className="lyd-card-content">
{(title || subtitle) && (
<div className="lyd-card-header">
{title && <h3 className="lyd-card-title">{title}</h3>}
{subtitle && <div className="lyd-card-subtitle">{subtitle}</div>}
</div>
)}
<div className="lyd-card-body">{children}</div>
{footer && <div className="lyd-card-footer">{footer}</div>}
</div>
) : (
<>
{(title || subtitle) && (
<div className="lyd-card-header">
{title && <h3 className="lyd-card-title">{title}</h3>}
{subtitle && <div className="lyd-card-subtitle">{subtitle}</div>}
</div>
)}
<div className="lyd-card-body">{children}</div>
{footer && <div className="lyd-card-footer">{footer}</div>}
</>
)}
</div>
);
};
API Reference
| Class | Description |
|---|---|
.lyd-card |
Base card container |
.lyd-card-header |
Card header section |
.lyd-card-title |
Card title text |
.lyd-card-subtitle |
Card subtitle text |
.lyd-card-body |
Card body content |
.lyd-card-footer |
Card footer with actions |
.lyd-card-image |
Card image element |
.elevated |
Shadow-based card |
.compact |
Reduced padding variant |
.horizontal |
Horizontal layout |
.clickable |
Interactive card |
.success |
Success status indicator |
.warning |
Warning status indicator |
.error |
Error status indicator |
.info |
Info status indicator |
Accessibility & Best Practices
Semantic HTML
- Use appropriate heading levels
- Ensure content flow is logical
- Article or section elements when appropriate
- Meaningful alt text for images
Keyboard Navigation
- Interactive elements are tabbable
- Clear focus indicators
- Logical tab order
- Enter/Space for clickable cards
Screen Readers
- Clear content structure
- Descriptive headings
- Status announcements
- Link purpose is clear
Visual Design
- Sufficient contrast
- Clear visual hierarchy
- Consistent spacing
- Responsive layout