Bootstrap 卡片
概述
Bootstrap 卡片(Cards)是一个灵活且可扩展的内容容器,包含页眉、页脚、图像、标题、文本等多种选项。卡片是现代 Web 设计中最常用的组件之一。
基本卡片
使用 .card 类创建基本卡片:
html
<div class="card" style="width: 18rem;">
<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">
<div class="card-body">
这是卡片主体的内容。
</div>
</div>标题、文本和链接
html
<div class="card" style="width: 18rem;">
<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">链接 1</a>
<a href="#" class="card-link">链接 2</a>
</div>
</div>图像
html
<!-- 顶部图像 -->
<div class="card" style="width: 18rem;">
<img src="..." class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
<a href="#" class="btn btn-primary">查看详情</a>
</div>
</div>
<!-- 底部图像 -->
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
<a href="#" class="btn btn-primary">查看详情</a>
</div>
<img src="..." class="card-img-bottom" alt="...">
</div>列表组
html
<div class="card" style="width: 18rem;">
<ul class="list-group list-group-flush">
<li class="list-group-item">列表项 1</li>
<li class="list-group-item">列表项 2</li>
<li class="list-group-item">列表项 3</li>
</ul>
</div>页眉和页脚
html
<div class="card">
<div class="card-header">
特色
</div>
<div class="card-body">
<h5 class="card-title">特殊标题处理</h5>
<p class="card-text">卡片内容文本。</p>
<a href="#" class="btn btn-primary">查看详情</a>
</div>
</div>
<div class="card">
<div class="card-header">
引用
</div>
<div class="card-body">
<blockquote class="blockquote mb-0">
<p>这是一段引用文本。</p>
<footer class="blockquote-footer">来自 <cite title="来源标题">著名人物</cite></footer>
</blockquote>
</div>
</div>
<div class="card text-center">
<div class="card-header">
特色
</div>
<div class="card-body">
<h5 class="card-title">特殊标题处理</h5>
<p class="card-text">卡片内容文本。</p>
<a href="#" class="btn btn-primary">查看详情</a>
</div>
<div class="card-footer text-muted">
2 天前
</div>
</div>尺寸
卡片默认没有固定宽度,可以使用网格系统或自定义样式:
html
<!-- 使用网格系统 -->
<div class="row">
<div class="col-sm-6">
<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>
</div>
<div class="col-sm-6">
<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>
</div>
</div>
<!-- 使用工具类 -->
<div class="card w-75">
<div class="card-body">
<h5 class="card-title">卡片标题</h5>
<p class="card-text">75% 宽度的卡片。</p>
<a href="#" class="btn btn-primary">按钮</a>
</div>
</div>
<div class="card w-50">
<div class="card-body">
<h5 class="card-title">卡片标题</h5>
<p class="card-text">50% 宽度的卡片。</p>
<a href="#" class="btn btn-primary">按钮</a>
</div>
</div>文本对齐
html
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">特殊标题处理</h5>
<p class="card-text">卡片内容文本。</p>
<a href="#" class="btn btn-primary">查看详情</a>
</div>
</div>
<div class="card text-center" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">特殊标题处理</h5>
<p class="card-text">居中对齐的卡片内容。</p>
<a href="#" class="btn btn-primary">查看详情</a>
</div>
</div>
<div class="card text-end" style="width: 18rem;">
<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-tabs card-header-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="true" 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>
<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>
<a href="#" class="btn btn-primary">查看详情</a>
</div>
</div>图像覆盖
将图像转换为卡片背景并覆盖文本:
html
<div class="card bg-dark text-white">
<img src="..." class="card-img" alt="...">
<div class="card-img-overlay">
<h5 class="card-title">卡片标题</h5>
<p class="card-text">这是一个更宽的卡片,支持下面的自然内容作为额外内容的引导。</p>
<p class="card-text"><small>最后更新于 3 分钟前</small></p>
</div>
</div>水平卡片
html
<div class="card mb-3" style="max-width: 540px;">
<div class="row g-0">
<div class="col-md-4">
<img src="..." 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>卡片样式
背景和颜色
html
<div class="card text-white bg-primary mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body">
<h5 class="card-title">Primary 卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>
<div class="card text-white bg-secondary mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body">
<h5 class="card-title">Secondary 卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>
<div class="card text-white bg-success mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body">
<h5 class="card-title">Success 卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>
<div class="card text-white bg-danger mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body">
<h5 class="card-title">Danger 卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>
<div class="card text-dark bg-warning mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body">
<h5 class="card-title">Warning 卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>
<div class="card text-dark bg-info mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body">
<h5 class="card-title">Info 卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>
<div class="card text-dark bg-light mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body">
<h5 class="card-title">Light 卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>
<div class="card text-white bg-dark mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body">
<h5 class="card-title">Dark 卡片标题</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>边框
html
<div class="card border-primary mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body text-primary">
<h5 class="card-title">Primary 边框卡片</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>
<div class="card border-secondary mb-3" style="max-width: 18rem;">
<div class="card-header">页眉</div>
<div class="card-body text-secondary">
<h5 class="card-title">Secondary 边框卡片</h5>
<p class="card-text">卡片内容文本。</p>
</div>
</div>卡片布局
卡片组
html
<div class="card-group">
<div class="card">
<img src="..." class="card-img-top" alt="...">
<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 class="card">
<img src="..." class="card-img-top" alt="...">
<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 class="card">
<img src="..." class="card-img-top" alt="...">
<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>网格卡片
html
<div class="row row-cols-1 row-cols-md-3 g-4">
<div class="col">
<div class="card">
<img src="..." 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="..." 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="..." 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="..." class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">卡片标题</h5>
<p class="card-text">这是一个更长的卡片。</p>
</div>
</div>
</div>
</div>实际示例
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap 卡片示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container my-5">
<h1>Bootstrap 卡片示例</h1>
<!-- 产品卡片 -->
<h2>产品卡片</h2>
<div class="row row-cols-1 row-cols-md-3 g-4 mb-5">
<div class="col">
<div class="card h-100">
<img src="https://via.placeholder.com/300x200" class="card-img-top" alt="产品1">
<div class="card-body">
<h5 class="card-title">产品名称 1</h5>
<p class="card-text">这是产品的简要描述信息。</p>
<p class="text-primary fw-bold">¥99.00</p>
</div>
<div class="card-footer">
<button class="btn btn-primary w-100">加入购物车</button>
</div>
</div>
</div>
<div class="col">
<div class="card h-100">
<img src="https://via.placeholder.com/300x200" class="card-img-top" alt="产品2">
<div class="card-body">
<h5 class="card-title">产品名称 2</h5>
<p class="card-text">这是产品的简要描述信息。</p>
<p class="text-primary fw-bold">¥149.00</p>
</div>
<div class="card-footer">
<button class="btn btn-primary w-100">加入购物车</button>
</div>
</div>
</div>
<div class="col">
<div class="card h-100">
<img src="https://via.placeholder.com/300x200" class="card-img-top" alt="产品3">
<div class="card-body">
<h5 class="card-title">产品名称 3</h5>
<p class="card-text">这是产品的简要描述信息。</p>
<p class="text-primary fw-bold">¥199.00</p>
</div>
<div class="card-footer">
<button class="btn btn-primary w-100">加入购物车</button>
</div>
</div>
</div>
</div>
<!-- 用户资料卡片 -->
<h2>用户资料卡片</h2>
<div class="row mb-5">
<div class="col-md-4">
<div class="card">
<img src="https://via.placeholder.com/300x300" class="card-img-top" alt="用户头像">
<div class="card-body text-center">
<h5 class="card-title">张三</h5>
<p class="card-text text-muted">前端开发工程师</p>
<p class="card-text">
<small>北京 · 5年经验</small>
</p>
<div class="d-grid gap-2">
<button class="btn btn-primary">关注</button>
<button class="btn btn-outline-secondary">发消息</button>
</div>
</div>
</div>
</div>
</div>
<!-- 文章卡片 -->
<h2>文章卡片</h2>
<div class="card mb-5">
<div class="row g-0">
<div class="col-md-4">
<img src="https://via.placeholder.com/400x300" 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">发布于 2024-01-15 · 阅读时间 5 分钟</small>
</p>
<a href="#" class="btn btn-primary">阅读全文</a>
</div>
</div>
</div>
</div>
<!-- 统计卡片 -->
<h2>统计卡片</h2>
<div class="row mb-5">
<div class="col-md-3">
<div class="card text-white bg-primary">
<div class="card-body">
<h5 class="card-title">总用户数</h5>
<p class="card-text display-4">1,234</p>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-white bg-success">
<div class="card-body">
<h5 class="card-title">今日订单</h5>
<p class="card-text display-4">56</p>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-white bg-warning">
<div class="card-body">
<h5 class="card-title">待处理</h5>
<p class="card-text display-4">12</p>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-white bg-danger">
<div class="card-body">
<h5 class="card-title">异常订单</h5>
<p class="card-text display-4">3</p>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>最佳实践
1. 保持一致性
html
<!-- 在同一页面使用相同的卡片样式 -->
<div class="row row-cols-1 row-cols-md-3 g-4">
<div class="col">
<div class="card h-100">
<!-- 内容 -->
</div>
</div>
<!-- 更多卡片... -->
</div>2. 使用合适的图像比例
html
<!-- 保持图像比例一致 -->
<div class="card">
<img src="..." class="card-img-top" alt="..." style="aspect-ratio: 16/9; object-fit: cover;">
<div class="card-body">
<!-- 内容 -->
</div>
</div>3. 响应式设计
html
<!-- 使用响应式网格 -->
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-4">
<div class="col">
<div class="card">
<!-- 内容 -->
</div>
</div>
</div>下一步
现在你已经掌握了 Bootstrap 卡片的使用方法,接下来我们将学习下拉菜单。