Skip to component content

Display a structured surface with a header, body, and optional footer.

Login to your account

Enter your email below to login to your account.

Usage

Use .card as a flexible content container for one object, setting, summary, or workflow step. Bootstrap cards are built with minimal markup, use flexbox, have no default margin, and fill the width of their parent unless you constrain them with grid, width utilities, or local layout rules.

Place padded primary content in .card-body, use .card-title and .card-subtitle for the object heading and secondary label, and keep longer copy in .card-text. Use .card-header and .card-footer only when those regions add clear structure rather than decorative framing.

Cards can contain images, list groups, links, and actions, but the card should still describe one thing. Use .card-img-top or .card-img-bottom for media attached to the card edge, keep action buttons close to the content they affect, and use external spacing utilities between cards instead of adding unrelated margin inside the card.

Size

Use size="sm" to tighten the card rhythm for compact surfaces. Sections and the inline inset share one spacing token.

Card

Scheduled reports

Weekly snapshots. No more manual exports.

  • Choose a schedule (daily, or weekly).
  • Send to channels or specific teammates.
  • Include charts, tables, and key metrics.
<div class="card card--sm">
  <div class="card-header">
    <div class="card-header__text">
      <h3 class="card-title">Scheduled reports</h3>
      <p class="card-subtitle">Weekly snapshots. No more manual exports.</p>
    </div>
  </div>
  <div class="card-body">
    <ul class="moo-card-list">
      <li>
        <span class="moo-card-list__icon">
          <svg
            data-icon=""
            data-lucide="chevron-right"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
            aria-hidden="true"
          >
            <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 18l6-6l-6-6"/>
          </svg>
        </span>
        Choose a schedule (daily, or weekly).
      </li>
      <li>
        <span class="moo-card-list__icon">
          <svg
            data-icon=""
            data-lucide="chevron-right"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
            aria-hidden="true"
          >
            <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 18l6-6l-6-6"/>
          </svg>
        </span>
        Send to channels or specific teammates.
      </li>
      <li>
        <span class="moo-card-list__icon">
          <svg
            data-icon=""
            data-lucide="chevron-right"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
            aria-hidden="true"
          >
            <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 18l6-6l-6-6"/>
          </svg>
        </span>
        Include charts, tables, and key metrics.
      </li>
    </ul>
  </div>
  <div class="card-footer flex-column gap-2">
    <button class="btn btn-primary w-100" type="button">
      Set up scheduled reports
      <i class="lucide lucide-arrow-right" data-icon="inline-end" aria-hidden="true"></i>
    </button>
    <button class="btn btn-secondary w-100" type="button">
      See what&#39;s new
      <i class="lucide lucide-arrow-right" data-icon="inline-end" aria-hidden="true"></i>
    </button>
  </div>
</div>

Spacing

The card exposes --moo-card-spacing so a consumer can retune the section gap and part inset in one place.

Card

Login to your account

Enter your email below to login to your account.

<div data-card-spacing>
  <div class="toggle-group d-inline-flex gap-2 mb-3" role="group" aria-label="Card spacing">
    <input
            type="radio"
            class="btn-check"
            name="card-spacing"
            id="card-spacing-16"
            value="16px"
            autocomplete="off" checked>
    <label class="btn btn-ghost" for="card-spacing-16">16px</label>
    <input
            type="radio"
            class="btn-check"
            name="card-spacing"
            id="card-spacing-20"
            value="20px"
            autocomplete="off">
    <label class="btn btn-ghost" for="card-spacing-20">20px</label>
    <input
            type="radio"
            class="btn-check"
            name="card-spacing"
            id="card-spacing-24"
            value="24px"
            autocomplete="off">
    <label class="btn btn-ghost" for="card-spacing-24">24px</label>
    <input
            type="radio"
            class="btn-check"
            name="card-spacing"
            id="card-spacing-32"
            value="32px"
            autocomplete="off">
    <label class="btn btn-ghost" for="card-spacing-32">32px</label>
  </div>
  <div class="card card-spacing-demo">
    <div class="card-header">
      <div class="card-header__text">
        <h3 class="card-title">Login to your account</h3>
        <p class="card-subtitle">Enter your email below to login to your account.</p>
      </div>
      <div class="card-action">
        <button class="btn btn-ghost" type="button">Sign up</button>
      </div>
    </div>
    <div class="card-body">
      <div class="field-group">
        <div class="field">
          <label class="form-label" for="card-email">Email</label>
          <input class="form-control" id="card-email" type="email" placeholder="you@example.com">
        </div>
        <div class="field">
          <label class="form-label d-flex align-items-center justify-content-between" for="card-password">
            Password
            <a href="#" class="text-decoration-none">Forgot your password?</a>
          </label>
          <input class="form-control" id="card-password" type="password">
        </div>
      </div>
    </div>
    <div class="card-footer flex-column gap-2">
      <button class="btn btn-primary w-100" type="button">Login</button>
      <button class="btn btn-secondary w-100" type="button">
        <i class="lucide lucide-chrome" data-icon="inline-start" aria-hidden="true"></i>
        Login with Google
      </button>
    </div>
  </div>
</div>

Scrollable

Scroll long body content inside a card-scroll strip that bleeds to the card edges. Above a footer, the strip sits flush against the divider.

Card

Terms of Service

Review the terms before accepting the agreement.

These terms govern your use of the workspace, including access to shared documents, project files, and collaboration tools.

You are responsible for the content you upload and for ensuring that your team has the appropriate permissions to view or edit it.

We may update features or limits as the service evolves. When those changes materially affect your workflow, we will notify your workspace administrators.

By continuing, you agree to keep your account credentials secure and to follow your organization's acceptable use policies.

<div class="card">
  <div class="card-header">
    <div class="card-header__text">
      <h3 class="card-title">Terms of Service</h3>
      <p class="card-subtitle">Review the terms before accepting the agreement.</p>
    </div>
  </div>
  <div class="card-body">
    <div class="card-scroll">
      <p class="mb-0">These terms govern your use of the workspace, including access to shared documents, project files, and collaboration tools.</p>
      <p class="mb-0">You are responsible for the content you upload and for ensuring that your team has the appropriate permissions to view or edit it.</p>
      <p class="mb-0">We may update features or limits as the service evolves. When those changes materially affect your workflow, we will notify your workspace administrators.</p>
      <p class="mb-0">By continuing, you agree to keep your account credentials secure and to follow your organization's acceptable use policies.</p>
    </div>
  </div>
  <div class="card-footer justify-content-end gap-2">
    <button class="btn btn-secondary" type="button">Decline</button>
    <button class="btn btn-primary" type="button">Accept</button>
  </div>
</div>

Image

Add an image before the card header to create a featured card. The image clips to the card's top corners.

Card
Design systems meetup illustration

Design systems meetup

A practical talk on component APIs, accessibility, and shipping faster.

Featured

A practical talk on component APIs, accessibility, and shipping faster.

<div class="card">
  <div class="card-image">
    <img class="card-img-top" src="../../assets/images/placeholder.webp" alt="Design systems meetup illustration">
  </div>
  <div class="card-header">
    <div class="card-header__text">
      <h3 class="card-title">Design systems meetup</h3>
      <p class="card-subtitle">A practical talk on component APIs, accessibility, and shipping faster.</p>
    </div>
    <div class="card-action">
      <span class="badge text-bg-secondary">Featured</span>
    </div>
  </div>
  <div class="card-body">
    <p class="mb-0">A practical talk on component APIs, accessibility, and shipping faster.</p>
  </div>
  <div class="card-footer">
    <button class="btn btn-primary" type="button">
      View event
      <i class="lucide lucide-arrow-right" data-icon="inline-end" aria-hidden="true"></i>
    </button>
  </div>
</div>

RTL

Compare Arabic, Hebrew, and English login cards in an RTL shell.

تسجيل الدخول إلى حسابك

أدخل بريدك الإلكتروني أدناه لتسجيل الدخول إلى حسابك.

<div dir="rtl">
  <div class="card">
    <div class="card-header">
      <div class="card-header__text">
        <h3 class="card-title">تسجيل الدخول إلى حسابك</h3>
        <p class="card-subtitle">أدخل بريدك الإلكتروني أدناه لتسجيل الدخول إلى حسابك.</p>
      </div>
      <div class="card-action">
        <button class="btn btn-ghost" type="button">إنشاء حساب</button>
      </div>
    </div>
    <div class="card-body">
      <div class="field-group">
        <div class="field">
          <label class="form-label" for="card-rtl-ar-email">البريد الإلكتروني</label>
          <input class="form-control" id="card-rtl-ar-email" type="email" placeholder="you@example.com">
        </div>
        <div class="field">
          <label class="form-label d-flex align-items-center justify-content-between" for="card-rtl-ar-password">
            كلمة المرور
            <a href="#" class="text-decoration-none">نسيت كلمة المرور؟</a>
          </label>
          <input class="form-control" id="card-rtl-ar-password" type="password">
        </div>
      </div>
    </div>
    <div class="card-footer flex-column gap-2">
      <button class="btn btn-primary w-100" type="button">تسجيل الدخول</button>
      <button class="btn btn-secondary w-100" type="button">تسجيل الدخول باستخدام Google</button>
    </div>
  </div>
</div>

התחברות לחשבון שלך

הזן את כתובת הדוא"ל שלך להתחברות לחשבון שלך.

<div dir="rtl">
  <div class="card">
    <div class="card-header">
      <div class="card-header__text">
        <h3 class="card-title">התחברות לחשבון שלך</h3>
        <p class="card-subtitle">הזן את כתובת הדוא&#34;ל שלך להתחברות לחשבון שלך.</p>
      </div>
      <div class="card-action">
        <button class="btn btn-ghost" type="button">יצירת חשבון</button>
      </div>
    </div>
    <div class="card-body">
      <div class="field-group">
        <div class="field">
          <label class="form-label" for="card-rtl-he-email">דוא&#34;ל</label>
          <input class="form-control" id="card-rtl-he-email" type="email" placeholder="you@example.com">
        </div>
        <div class="field">
          <label class="form-label d-flex align-items-center justify-content-between" for="card-rtl-he-password">
            סיסמה
            <a href="#" class="text-decoration-none">שכחת את הסיסמה?</a>
          </label>
          <input class="form-control" id="card-rtl-he-password" type="password">
        </div>
      </div>
    </div>
    <div class="card-footer flex-column gap-2">
      <button class="btn btn-primary w-100" type="button">התחברות</button>
      <button class="btn btn-secondary w-100" type="button">התחברות עם Google</button>
    </div>
  </div>
</div>

Login to your account

Enter your email below to login to your account.

<div dir="ltr">
  <div class="card">
    <div class="card-header">
      <div class="card-header__text">
        <h3 class="card-title">Login to your account</h3>
        <p class="card-subtitle">Enter your email below to login to your account.</p>
      </div>
      <div class="card-action">
        <button class="btn btn-ghost" type="button">Sign up</button>
      </div>
    </div>
    <div class="card-body">
      <div class="field-group">
        <div class="field">
          <label class="form-label" for="card-rtl-en-email">Email</label>
          <input class="form-control" id="card-rtl-en-email" type="email" placeholder="you@example.com">
        </div>
        <div class="field">
          <label class="form-label d-flex align-items-center justify-content-between" for="card-rtl-en-password">
            Password
            <a href="#" class="text-decoration-none">Forgot your password?</a>
          </label>
          <input class="form-control" id="card-rtl-en-password" type="password">
        </div>
      </div>
    </div>
    <div class="card-footer flex-column gap-2">
      <button class="btn btn-primary w-100" type="button">Login</button>
      <button class="btn btn-secondary w-100" type="button">Login with Google</button>
    </div>
  </div>
</div>

Component reference

Status
Accepted
Runtime
native HTML/CSS
Markup
Bootstrap/native HTML
Reference

For Bootstrap-native card semantics and options, see the Bootstrap Card documentation.

Settings

Theme
Choose how Moo UI looks on this device.
Sidebar
Choose how the sidebar sits on the page.
Theme Builder
Tune catalog tokens and chart colors for this browser.
Base color
Theme color
Chart color
Heading font
Body font
Radius
Direction
Choose the reading direction. RTL flips the layout live.
Reset

Restore the default appearance.