Bootstrap 卡片组件 #

卡片是一个灵活的容器组件,可以包含图片、标题、正文、按钮等多种内容。Bootstrap 的卡片组件提供了丰富的样式选项和布局方式。

基础卡片 #

基本结构 #

html
<div class="card">
  <div class="card-body">
    <h5 class="card-title">卡片标题</h5>
    <p class="card-text">这是卡片的内容文本,可以包含任意内容。</p>
    <a href="#" class="btn btn-primary">按钮</a>
  </div>
</div>

卡片组成 #

元素 类名 作用
卡片容器 .card 卡片主容器
卡片主体 .card-body 内容区域
卡片标题 .card-title 标题
卡片副标题 .card-subtitle 副标题
卡片文本 .card-text 正文文本
卡片链接 .card-link 链接
卡片头部 .card-header 头部区域
卡片底部 .card-footer 底部区域
卡片图片 .card-img-top 顶部图片
卡片图片 .card-img-bottom 底部图片

卡片内容 #

完整卡片 #

html
<div class="card" style="width: 18rem;">
  <img src="image.jpg" class="card-img-top" alt="...">
  <div class="card-body">
    <h5 class="card-title">卡片标题</h5>
    <h6 class="card-subtitle mb-2 text-muted">卡片副标题</h6>
    <p class="card-text">这是卡片的正文内容,可以包含多行文本。</p>
    <a href="#" class="card-link">链接一</a>
    <a href="#" class="card-link">链接二</a>
  </div>
</div>

仅图片 #

html
<div class="card">
  <img src="image.jpg" class="card-img-top" alt="...">
</div>

图片覆盖 #

html
<div class="card bg-dark text-white">
  <img src="image.jpg" class="card-img" alt="...">
  <div class="card-img-overlay">
    <h5 class="card-title">卡片标题</h5>
    <p class="card-text">图片上的文本内容。</p>
  </div>
</div>

头部和底部 #

html
<div class="card">
  <div class="card-header">
    卡片头部
  </div>
  <div class="card-body">
    <h5 class="card-title">卡片标题</h5>
    <p class="card-text">卡片正文内容。</p>
  </div>
  <div class="card-footer">
    卡片底部
  </div>
</div>

引用卡片 #

html
<div class="card">
  <div class="card-body">
    <blockquote class="blockquote mb-0">
      <p>这是一段引用文本。</p>
      <footer class="blockquote-footer">引用来源 <cite title="来源">作者</cite></footer>
    </blockquote>
  </div>
</div>

卡片尺寸 #

卡片默认宽度为 100%,可以使用栅格系统或设置固定宽度:

html
<!-- 使用栅格系统 -->
<div class="row">
  <div class="col-sm-6">
    <div class="card">
      <div class="card-body">卡片内容</div>
    </div>
  </div>
  <div class="col-sm-6">
    <div class="card">
      <div class="card-body">卡片内容</div>
    </div>
  </div>
</div>

<!-- 固定宽度 -->
<div class="card" style="width: 18rem;">
  <div class="card-body">卡片内容</div>
</div>

卡片样式 #

文本对齐 #

html
<div class="card text-center">
  <div class="card-body">
    <h5 class="card-title">居中对齐</h5>
    <p class="card-text">卡片内容</p>
  </div>
</div>

<div class="card text-end">
  <div class="card-body">
    <h5 class="card-title">右对齐</h5>
    <p class="card-text">卡片内容</p>
  </div>
</div>

导航卡片 #

html
<div class="card text-center">
  <div class="card-header">
    <ul class="nav nav-tabs card-header-tabs">
      <li class="nav-item">
        <a class="nav-link active" href="#">激活</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">链接</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled">禁用</a>
      </li>
    </ul>
  </div>
  <div class="card-body">
    <h5 class="card-title">卡片标题</h5>
    <p class="card-text">卡片内容</p>
    <a href="#" class="btn btn-primary">按钮</a>
  </div>
</div>

胶囊导航 #

html
<div class="card text-center">
  <div class="card-header">
    <ul class="nav nav-pills card-header-pills">
      <li class="nav-item">
        <a class="nav-link active" href="#">激活</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">链接</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled">禁用</a>
      </li>
    </ul>
  </div>
  <div class="card-body">
    <h5 class="card-title">卡片标题</h5>
    <p class="card-text">卡片内容</p>
  </div>
</div>

卡片颜色 #

背景色 #

html
<div class="card text-white bg-primary mb-3">
  <div class="card-header">头部</div>
  <div class="card-body">
    <h5 class="card-title">主要卡片</h5>
    <p class="card-text">卡片内容</p>
  </div>
</div>

<div class="card text-white bg-secondary mb-3">
  <div class="card-body">次要卡片</div>
</div>

<div class="card text-white bg-success mb-3">
  <div class="card-body">成功卡片</div>
</div>

<div class="card text-white bg-danger mb-3">
  <div class="card-body">危险卡片</div>
</div>

<div class="card text-dark bg-warning mb-3">
  <div class="card-body">警告卡片</div>
</div>

<div class="card text-dark bg-info mb-3">
  <div class="card-body">信息卡片</div>
</div>

<div class="card text-dark bg-light mb-3">
  <div class="card-body">浅色卡片</div>
</div>

<div class="card text-white bg-dark mb-3">
  <div class="card-body">深色卡片</div>
</div>

边框色 #

html
<div class="card border-primary mb-3">
  <div class="card-header">头部</div>
  <div class="card-body text-primary">
    <h5 class="card-title">主要边框卡片</h5>
    <p class="card-text">卡片内容</p>
  </div>
</div>

<div class="card border-secondary mb-3">
  <div class="card-body">次要边框卡片</div>
</div>

<div class="card border-success mb-3">
  <div class="card-body">成功边框卡片</div>
</div>

混合样式 #

html
<div class="card border-success mb-3">
  <div class="card-header bg-transparent border-success">头部</div>
  <div class="card-body text-success">
    <h5 class="card-title">混合样式卡片</h5>
    <p class="card-text">卡片内容</p>
  </div>
  <div class="card-footer bg-transparent border-success">底部</div>
</div>

卡片组 #

基础卡片组 #

html
<div class="card-group">
  <div class="card">
    <img src="image1.jpg" class="card-img-top" alt="...">
    <div class="card-body">
      <h5 class="card-title">卡片标题一</h5>
      <p class="card-text">卡片内容</p>
    </div>
    <div class="card-footer">
      <small class="text-muted">底部信息</small>
    </div>
  </div>
  <div class="card">
    <img src="image2.jpg" class="card-img-top" alt="...">
    <div class="card-body">
      <h5 class="card-title">卡片标题二</h5>
      <p class="card-text">卡片内容</p>
    </div>
    <div class="card-footer">
      <small class="text-muted">底部信息</small>
    </div>
  </div>
  <div class="card">
    <img src="image3.jpg" class="card-img-top" alt="...">
    <div class="card-body">
      <h5 class="card-title">卡片标题三</h5>
      <p class="card-text">卡片内容</p>
    </div>
    <div class="card-footer">
      <small class="text-muted">底部信息</small>
    </div>
  </div>
</div>

卡片网格 #

html
<div class="row row-cols-1 row-cols-md-2 g-4">
  <div class="col">
    <div class="card">
      <img src="image.jpg" class="card-img-top" alt="...">
      <div class="card-body">
        <h5 class="card-title">卡片标题</h5>
        <p class="card-text">卡片内容</p>
      </div>
    </div>
  </div>
  <div class="col">
    <div class="card">
      <img src="image.jpg" class="card-img-top" alt="...">
      <div class="card-body">
        <h5 class="card-title">卡片标题</h5>
        <p class="card-text">卡片内容</p>
      </div>
    </div>
  </div>
</div>

三列卡片网格 #

html
<div class="row row-cols-1 row-cols-md-3 g-4">
  <div class="col">
    <div class="card h-100">
      <img src="image.jpg" class="card-img-top" alt="...">
      <div class="card-body">
        <h5 class="card-title">卡片标题</h5>
        <p class="card-text">卡片内容</p>
      </div>
    </div>
  </div>
  <div class="col">
    <div class="card h-100">
      <img src="image.jpg" class="card-img-top" alt="...">
      <div class="card-body">
        <h5 class="card-title">卡片标题</h5>
        <p class="card-text">卡片内容</p>
      </div>
    </div>
  </div>
  <div class="col">
    <div class="card h-100">
      <img src="image.jpg" class="card-img-top" alt="...">
      <div class="card-body">
        <h5 class="card-title">卡片标题</h5>
        <p class="card-text">卡片内容</p>
      </div>
    </div>
  </div>
</div>

卡片布局 #

水平卡片 #

html
<div class="card mb-3" style="max-width: 540px;">
  <div class="row g-0">
    <div class="col-md-4">
      <img src="image.jpg" class="img-fluid rounded-start" alt="...">
    </div>
    <div class="col-md-8">
      <div class="card-body">
        <h5 class="card-title">卡片标题</h5>
        <p class="card-text">这是水平布局的卡片,图片在左侧,内容在右侧。</p>
        <p class="card-text"><small class="text-muted">最后更新于 3 分钟前</small></p>
      </div>
    </div>
  </div>
</div>

等高卡片 #

使用 .h-100 类使卡片等高:

html
<div class="row row-cols-1 row-cols-md-3 g-4">
  <div class="col">
    <div class="card h-100">
      <img src="image.jpg" class="card-img-top" alt="...">
      <div class="card-body">
        <h5 class="card-title">卡片标题</h5>
        <p class="card-text">较短的内容。</p>
      </div>
    </div>
  </div>
  <div class="col">
    <div class="card h-100">
      <img src="image.jpg" class="card-img-top" alt="...">
      <div class="card-body">
        <h5 class="card-title">卡片标题</h5>
        <p class="card-text">这是较长的内容,用于展示等高效果。卡片会自动扩展到相同高度。</p>
      </div>
    </div>
  </div>
  <div class="col">
    <div class="card h-100">
      <img src="image.jpg" class="card-img-top" alt="...">
      <div class="card-body">
        <h5 class="card-title">卡片标题</h5>
        <p class="card-text">中等长度的内容。</p>
      </div>
    </div>
  </div>
</div>

实战案例 #

产品卡片 #

html
<div class="card h-100">
  <img src="product.jpg" class="card-img-top" alt="产品图片">
  <div class="card-body">
    <h5 class="card-title">产品名称</h5>
    <p class="card-text text-danger fw-bold">¥99.00</p>
    <p class="card-text text-muted text-decoration-line-through">¥199.00</p>
    <p class="card-text">产品描述信息,介绍产品的特点和优势。</p>
  </div>
  <div class="card-footer bg-white border-top-0">
    <div class="d-grid">
      <button class="btn btn-primary">加入购物车</button>
    </div>
  </div>
</div>

用户卡片 #

html
<div class="card text-center">
  <div class="card-body">
    <img src="avatar.jpg" class="rounded-circle mb-3" width="80" height="80" alt="头像">
    <h5 class="card-title">用户名称</h5>
    <p class="card-text text-muted">前端开发工程师</p>
    <p class="card-text">用户简介,介绍用户的背景和专长。</p>
    <div class="d-flex justify-content-center gap-2">
      <a href="#" class="btn btn-primary btn-sm">关注</a>
      <a href="#" class="btn btn-outline-secondary btn-sm">私信</a>
    </div>
  </div>
  <div class="card-footer bg-white">
    <div class="row">
      <div class="col">
        <strong>128</strong>
        <small class="d-block text-muted">文章</small>
      </div>
      <div class="col">
        <strong>1.2K</strong>
        <small class="d-block text-muted">粉丝</small>
      </div>
      <div class="col">
        <strong>256</strong>
        <small class="d-block text-muted">关注</small>
      </div>
    </div>
  </div>
</div>

文章卡片 #

html
<div class="card">
  <img src="article.jpg" class="card-img-top" alt="文章封面">
  <div class="card-body">
    <div class="mb-2">
      <span class="badge bg-primary">技术</span>
      <span class="badge bg-secondary">前端</span>
    </div>
    <h5 class="card-title">文章标题</h5>
    <p class="card-text">文章摘要,简要介绍文章的主要内容和观点...</p>
    <div class="d-flex justify-content-between align-items-center">
      <div class="text-muted small">
        <span>作者名</span> · <span>2024-01-15</span>
      </div>
      <div class="text-muted small">
        <span>阅读 1234</span> · <span>评论 56</span>
      </div>
    </div>
  </div>
</div>

统计卡片 #

html
<div class="card bg-primary text-white">
  <div class="card-body">
    <div class="d-flex justify-content-between align-items-center">
      <div>
        <h6 class="card-subtitle mb-2">总用户数</h6>
        <h2 class="card-title mb-0">12,345</h2>
      </div>
      <div>
        <svg width="48" height="48" fill="currentColor" opacity="0.5">
          <use xlink:href="#people-icon"></use>
        </svg>
      </div>
    </div>
    <small class="text-white-50">较上月增长 12%</small>
  </div>
</div>

价格卡片 #

html
<div class="card text-center border-primary">
  <div class="card-header bg-primary text-white">
    <h4 class="my-0">专业版</h4>
  </div>
  <div class="card-body">
    <h1 class="card-title">¥99<small class="text-muted fw-light">/月</small></h1>
    <ul class="list-unstyled mt-3 mb-4">
      <li>10 个用户</li>
      <li>10 GB 存储</li>
      <li>优先支持</li>
      <li>高级功能</li>
    </ul>
    <button class="btn btn-lg btn-primary w-100">立即订阅</button>
  </div>
</div>

登录卡片 #

html
<div class="card shadow" style="max-width: 400px;">
  <div class="card-body p-4">
    <h4 class="card-title text-center mb-4">登录</h4>
    <form>
      <div class="mb-3">
        <label class="form-label">邮箱</label>
        <input type="email" class="form-control" placeholder="请输入邮箱">
      </div>
      <div class="mb-3">
        <label class="form-label">密码</label>
        <input type="password" class="form-control" placeholder="请输入密码">
      </div>
      <div class="d-flex justify-content-between mb-3">
        <div class="form-check">
          <input class="form-check-input" type="checkbox" id="remember">
          <label class="form-check-label" for="remember">记住我</label>
        </div>
        <a href="#" class="text-decoration-none">忘记密码?</a>
      </div>
      <div class="d-grid">
        <button class="btn btn-primary" type="submit">登录</button>
      </div>
    </form>
    <hr>
    <p class="text-center text-muted mb-0">
      还没有账号?<a href="#">立即注册</a>
    </p>
  </div>
</div>

最佳实践 #

1. 使用语义化标签 #

html
<!-- 推荐 -->
<article class="card">
  <header class="card-header">...</header>
  <div class="card-body">...</div>
</article>

<!-- 也可以 -->
<section class="card">...</section>

2. 等高卡片 #

html
<!-- 使用 h-100 确保等高 -->
<div class="card h-100">...</div>

3. 响应式布局 #

html
<!-- 使用栅格系统 -->
<div class="row row-cols-1 row-cols-md-3 g-4">
  <div class="col">
    <div class="card h-100">...</div>
  </div>
</div>

4. 图片比例 #

html
<!-- 使用 object-fit 保持图片比例 -->
<img src="image.jpg" class="card-img-top" style="height: 200px; object-fit: cover;">

下一步 #

现在你已经掌握了卡片组件,接下来学习 模态框组件,了解如何创建弹出对话框!

最后更新:2026-03-28