Display a structured surface with a header, body, and optional footer.
Enter your email below to login to your account.
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.
.card
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.
.card-body
.card-title
.card-subtitle
.card-text
.card-header
.card-footer
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.
.card-img-top
.card-img-bottom
Use size="sm" to tighten the card rhythm for compact surfaces. Sections and the inline inset share one spacing token.
size="sm"
Weekly snapshots. No more manual exports.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76<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's new <i class="lucide lucide-arrow-right" data-icon="inline-end" aria-hidden="true"></i> </button> </div> </div>
<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's new <i class="lucide lucide-arrow-right" data-icon="inline-end" aria-hidden="true"></i> </button> </div> </div>
The card exposes --moo-card-spacing so a consumer can retune the section gap and part inset in one place.
--moo-card-spacing
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69<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>
<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>
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-scroll
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20<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>
<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>
Add an image before the card header to create a featured card. The image clips to the card's top corners.
A practical talk on component APIs, accessibility, and shipping faster.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23<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>
<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>
Compare Arabic, Hebrew, and English login cards in an RTL shell.
أدخل بريدك الإلكتروني أدناه لتسجيل الدخول إلى حسابك.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32<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">أدخل بريدك الإلكتروني أدناه لتسجيل الدخول إلى حسابك.</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>
הזן את כתובת הדוא"ל שלך להתחברות לחשבון שלך.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32<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-he-email">דוא"ל</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>
<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-he-email">דוא"ל</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>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32<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>
<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>
For Bootstrap-native card semantics and options, see the Bootstrap Card documentation.
No matching pages.
Restore the default appearance.