Card

Flexible card component for content containers

Overview

The s-card attribute provides a structured container for content with optional header, body, and footer sections.

Basic Usage

<article s-card>
  <div s-card-body>Simple card content</div>
</article>

Full Structure

<article s-card>
  <header s-card-header>
    <h3>Card Title</h3>
  </header>
  <div s-card-body>Main card content goes here.</div>
  <footer s-card-footer>
    <button s-btn="primary" s-size="sm">Action</button>
  </footer>
</article>

Card Sections

AttributePurpose
s-cardMain card container
s-card-headerCard header area
s-card-bodyMain content area
s-card-footerFooter with actions
s-card-mediaImage/media container
s-card-titleCard title text
s-card-subtitleSubtitle/description

Examples

Simple Card

<article s-card>
  <div s-card-body>
    <h4>Simple Card</h4>
    <p>Just a body section with content.</p>
  </div>
</article>

Card with All Sections

<article s-card>
  <header s-card-header>
    <h3>Project Update</h3>
  </header>
  <div s-card-body>
    <p>The project is progressing well with all milestones on track.</p>
  </div>
  <footer s-card-footer>
    <button s-btn="ghost" s-size="sm">Cancel</button>
    <button s-btn="primary" s-size="sm">View Details</button>
  </footer>
</article>

Card with Media

<article s-card>
  <div s-card-media>
    <img src="/image.jpg" alt="Card image" />
  </div>
  <div s-card-body>
    <h4 s-card-title>Card Title</h4>
    <p s-card-subtitle>A brief description</p>
    <p>More detailed content here.</p>
  </div>
</article>

Variants

Flat Card

No shadow, just a border:

<article s-card="flat">
  <div s-card-body>Flat card with border</div>
</article>

Elevated Card

Higher shadow:

<article s-card="elevated">
  <div s-card-body>Elevated card</div>
</article>

Outline Card

Transparent with strong border:

<article s-card="outline">
  <div s-card-body>Outline card</div>
</article>

Modifiers

Interactive Card

Lift effect on hover:

<article s-card s-interactive>
  <div s-card-body>Hover me!</div>
</article>

Horizontal Layout

Side-by-side media and content:

<article s-card s-horizontal>
  <div s-card-media>
    <img src="/image.jpg" alt="Card image" />
  </div>
  <div s-card-body>
    <h4 s-card-title>Horizontal Card</h4>
    <p>Content beside the image.</p>
  </div>
</article>

Make the entire card clickable:

<article s-card s-link s-interactive>
  <div s-card-body>
    <h4 s-card-title>
      <a href="/details">Clickable Card</a>
    </h4>
    <p>Click anywhere on the card.</p>
  </div>
</article>

Card Layouts

Card Grid

Responsive grid with auto-fitting columns:

<div s-card-grid>
  <article s-card>
    <div s-card-body>Card 1</div>
  </article>
  <article s-card>
    <div s-card-body>Card 2</div>
  </article>
  <article s-card>
    <div s-card-body>Card 3</div>
  </article>
</div>

Card Stack

Vertical list of cards:

<div s-card-stack>
  <article s-card>
    <div s-card-body>Stacked card 1</div>
  </article>
  <article s-card>
    <div s-card-body>Stacked card 2</div>
  </article>
</div>

How It Works

Cards use CSS custom properties for consistent styling:

:where([s-card]) {
  --_card-bg: var(--s-surface-raised);
  --_card-border: var(--s-border-muted);
  --_card-radius: var(--s-radius-xl);
  --_card-padding: var(--s-space-4);

  background-color: var(--_card-bg);
  border: 1px solid var(--_card-border);
  border-radius: var(--_card-radius);
}

:where([s-card-body]) {
  padding: var(--_card-padding);
}

Customization Examples

Custom Background

<article s-card style="--_card-bg: var(--s-primary-50);">
  <div s-card-body>Tinted card background</div>
</article>

Sharp Corners

[s-card] {
  --_card-radius: 0;
}

All Attributes

AttributePurposeValues
s-cardCard variant(default), flat, elevated, outline, feature
s-card-headerHeader sectionN/A
s-card-bodyBody sectionN/A
s-card-footerFooter sectionN/A
s-card-mediaMedia containerN/A
s-card-titleTitle elementN/A
s-card-subtitleSubtitle elementN/A
s-interactiveHover lift effectBoolean
s-horizontalHorizontal layoutBoolean
s-linkLink overlayBoolean
s-sizeCard sizesm, lg
s-card-gridGrid containerN/A
s-card-stackStack containerN/A
Search