05-Bootstrap 组件系统

Bootstrap 是全球最受欢迎的前端框架之一,其核心优势不仅在于强大的栅格系统,还在于覆盖日常开发绝大多数场景的组件系统。组件是可复用的 UI 单元,能够帮助开发者以极低的学习成本快速搭建具备专业视觉与交互体验的网页。本章将以 Bootstrap 5.3.2 为基础,系统讲解常用组件的原理、用法与实战技巧。


一、组件系统概述

1.1 什么是 Bootstrap 组件

Bootstrap 组件(Components)是一套预定义的界面元素集合,包含按钮、导航、卡片、轮播、模态框、折叠、下拉菜单、徽章、进度条、提示框等。它们基于 HTML、CSS 和少量 JavaScript 构建,封装了复杂的结构与样式,开发者只需按照规范组合类名即可快速生成一致、美观且响应式的界面。

1.2 组件系统的价值

  • 提升开发效率:无需从零编写样式和交互,只需复制示例并修改内容即可。
  • 保证设计一致性:统一的色彩、间距、圆角、阴影规范,使页面风格统一。
  • 响应式适配:大多数组件都内置了移动端适配能力,减少额外编码。
  • 可访问性支持:Bootstrap 组件考虑了键盘导航、ARIA 属性等无障碍需求。
  • 生态成熟:文档详尽,社区活跃,遇到问题容易找到解决方案。

1.3 Bootstrap 5 组件的变化

Bootstrap 5 相较于 Bootstrap 4 有以下几点重要变化:

  • 移除了 jQuery 依赖,所有 JavaScript 插件改用原生 JavaScript 实现。
  • 引入更现代的 CSS 自定义属性,便于主题定制。
  • 增强了工具类系统(Utilities),如间距、定位、显示控制等。
  • 组件默认样式更加扁平、现代,移除了部分过时组件。
  • 表单组件全面重构,统一了表单控件的外观。

1.4 本章学习目标

通过本章学习,你将能够:

  • 理解 Bootstrap 组件的核心设计思想。
  • 熟练使用导航、面包屑、分页、卡片、轮播、模态框、折叠、下拉菜单等组件。
  • 能够根据业务需求组合多个组件,搭建真实企业页面。
  • 掌握关键类名的作用与扩展方法。

二、导航与导航栏

2.1 功能说明

导航(Nav)用于在页面内部或页面之间进行切换,是网站信息架构的骨架。Bootstrap 提供了 .nav.nav-tabs.nav-pills 等多种导航样式,以及 .navbar 用于构建顶部响应式导航栏。

2.2 使用场景

  • 内容切换:在同一页面内切换不同 Tab 内容。
  • 页面跳转:链接到网站不同栏目或外部资源。
  • 顶部主导航:几乎所有网站都需要顶部导航栏。
  • 侧边栏导航:后台管理系统、文档站点等。

2.3 基础导航示例

下面是一个使用 .nav.nav-pills 的基础导航示例:

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>基础导航示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">首页</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">产品</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">解决方案</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">暂未开放</a>
</li>
</ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

2.4 响应式导航栏示例

导航栏(Navbar)是网站最常见的组件之一。Bootstrap 提供了折叠菜单机制,在小屏幕下自动收起。

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>响应式导航栏</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand" href="#">企业官网</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false"
aria-label="切换导航">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="mainNavbar">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">首页</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">服务</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">案例</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">关于我们</a>
</li>
</ul>
<form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="搜索" aria-label="搜索">
<button class="btn btn-outline-light" type="submit">搜索</button>
</form>
</div>
</div>
</nav>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

2.5 关键类名解析

类名 作用
.nav 导航容器,初始化 flex 布局并去除列表样式。
.nav-item 导航项容器,通常配合 .nav-link 使用。
.nav-link 导航链接,控制颜色、悬停和激活状态。
.nav-tabs 选项卡式导航样式。
.nav-pills 胶囊式导航样式。
.navbar 导航栏容器,提供基础布局结构。
.navbar-expand-lg 在 lg 断点及以上展开,小屏幕折叠。
.navbar-toggler 折叠按钮,控制导航菜单的显示与隐藏。
.collapse / .navbar-collapse 控制菜单折叠行为。
.navbar-dark / .navbar-light 控制导航栏文字颜色,需配合背景色使用。

三、面包屑与分页

3.1 面包屑 Breadcrumb

3.1.1 功能说明

面包屑用于展示当前页面在网站层级结构中的位置,帮助用户了解自己所处的位置,并快速返回上级页面。

3.1.2 使用场景

  • 电商网站的商品详情页:首页 > 数码 > 手机 > iPhone 15。
  • 后台管理系统的多级菜单。
  • 内容型网站的分类层级展示。

3.1.3 完整 HTML 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>面包屑示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">首页</a></li>
<li class="breadcrumb-item"><a href="#">产品中心</a></li>
<li class="breadcrumb-item"><a href="#">智能手机</a></li>
<li class="breadcrumb-item active" aria-current="page">iPhone 15 Pro</li>
</ol>
</nav>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

3.1.4 关键类名解析

类名 作用
.breadcrumb 面包屑容器,自动添加分隔符样式。
.breadcrumb-item 单个层级项。
.active 当前激活项,不可点击。
aria-label="breadcrumb" 提升可访问性,描述导航用途。

3.2 分页 Pagination

3.2.1 功能说明

分页用于将大量内容分成多个页面,避免单页数据过多,提升加载速度与用户体验。

3.2.2 使用场景

  • 搜索结果列表。
  • 文章列表、商品列表。
  • 数据表格的分页展示。

3.2.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>分页示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<nav aria-label="分页导航">
<ul class="pagination justify-content-center">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="true">上一页</a>
</li>
<li class="page-item active" aria-current="page">
<a class="page-link" href="#">1</a>
</li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">下一页</a>
</li>
</ul>
</nav>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

3.2.4 关键类名解析

类名 作用
.pagination 分页容器。
.page-item 分页项。
.page-link 分页链接样式。
.active 当前页高亮。
.disabled 禁用状态。
.justify-content-center 让分页居中显示。

四、卡片组件 Card

4.1 功能说明

卡片(Card)是 Bootstrap 中最灵活的组件之一,用于展示图片、标题、描述、按钮等内容。它几乎可以用来构建任何内容块,如商品卡片、博客文章摘要、用户信息卡片等。

4.2 使用场景

  • 商品展示列表。
  • 博客文章列表。
  • 团队成员介绍。
  • 仪表盘数据概览。

4.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>卡片组件示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<div class="row g-4">
<div class="col-md-4">
<div class="card h-100 shadow-sm">
<img src="https://via.placeholder.com/400x200" class="card-img-top" alt="产品图片">
<div class="card-body">
<h5 class="card-title">智能手表 Pro</h5>
<p class="card-text">集成了健康监测、运动追踪与消息提醒功能,为您的日常生活提供全方位的智能体验。</p>
<a href="#" class="btn btn-primary">查看详情</a>
</div>
<div class="card-footer text-muted">
已售出 1,200+ 件
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 shadow-sm">
<div class="card-header bg-success text-white">
推荐服务
</div>
<div class="card-body">
<h5 class="card-title">企业官网定制</h5>
<p class="card-text">从设计到上线的一站式服务,响应式布局、SEO 优化、后台管理一应俱全。</p>
<a href="#" class="btn btn-outline-success">立即咨询</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 shadow-sm text-center">
<div class="card-body">
<h5 class="card-title">用户评价</h5>
<p class="card-text">"设计专业,交付及时,完全符合我们的品牌调性。"</p>
<a href="#" class="btn btn-link">阅读更多评价</a>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

4.4 关键类名解析

类名 作用
.card 卡片容器,提供边框、圆角和背景。
.card-body 卡片主体内容区域。
.card-title 卡片标题。
.card-text 卡片正文。
.card-img-top 顶部图片。
.card-header 卡片头部。
.card-footer 卡片底部。
.h-100 让卡片高度占满列,便于对齐。
.shadow-sm 添加轻微阴影,提升层次感。

5.1 功能说明

轮播(Carousel)是一种循环播放图片或内容的组件,常用于网站首页的横幅广告、产品展示、新闻头条等位置。Bootstrap 的轮播组件支持自动播放、手动切换、指示器和标题说明。

5.2 使用场景

  • 首页横幅 Banner。
  • 产品图片展示。
  • 客户评价轮播。
  • 新闻热点推荐。

5.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>轮播组件示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<div id="heroCarousel" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-indicators">
<button type="button" data-bs-target="#heroCarousel" data-bs-slide-to="0" class="active"
aria-current="true" aria-label="幻灯片 1"></button>
<button type="button" data-bs-target="#heroCarousel" data-bs-slide-to="1"
aria-label="幻灯片 2"></button>
<button type="button" data-bs-target="#heroCarousel" data-bs-slide-to="2"
aria-label="幻灯片 3"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="https://via.placeholder.com/1200x400/0d6efd/ffffff?text=创新科技" class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>引领数字化转型</h5>
<p>为企业提供全方位的技术解决方案,助力业务高速增长。</p>
</div>
</div>
<div class="carousel-item">
<img src="https://via.placeholder.com/1200x400/198754/ffffff?text=绿色能源" class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>可持续发展的未来</h5>
<p>以绿色科技推动产业升级,共建低碳环保社会。</p>
</div>
</div>
<div class="carousel-item">
<img src="https://via.placeholder.com/1200x400/dc3545/ffffff?text=智能生活" class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>智慧生活触手可及</h5>
<p>智能家居、可穿戴设备,让科技服务于每一天。</p>
</div>
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#heroCarousel" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">上一张</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#heroCarousel" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">下一张</span>
</button>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

5.4 关键类名解析

类名 作用
.carousel 轮播容器。
.carousel-inner 轮播项的父容器。
.carousel-item 单个轮播项。
.carousel-indicators 底部指示器。
.carousel-control-prev/next 左右切换按钮。
.carousel-caption 图片上的文字说明。
data-bs-ride="carousel" 启用自动轮播。
data-bs-slide-to 指示器点击跳转目标。

六、模态框 Modal

6.1 功能说明

模态框(Modal)是一种覆盖在当前页面之上的弹出窗口,用于展示重要信息、确认操作或承载表单。模态框出现时,背景通常会被遮罩,用户必须处理完模态框内容后才能继续操作。

6.2 使用场景

  • 用户登录/注册弹窗。
  • 删除确认提示。
  • 表单填写:提交反馈、预约演示。
  • 展示详细信息,如商品详情、用户协议。

6.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>模态框示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#contactModal">
预约演示
</button>

<div class="modal fade" id="contactModal" tabindex="-1" aria-labelledby="contactModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="contactModalLabel">预约产品演示</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="关闭"></button>
</div>
<div class="modal-body">
<form>
<div class="mb-3">
<label for="name" class="form-label">姓名</label>
<input type="text" class="form-control" id="name" placeholder="请输入您的姓名">
</div>
<div class="mb-3">
<label for="phone" class="form-label">联系电话</label>
<input type="tel" class="form-control" id="phone" placeholder="请输入您的手机号">
</div>
<div class="mb-3">
<label for="company" class="form-label">公司名称</label>
<input type="text" class="form-control" id="company" placeholder="请输入公司名称">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary">提交预约</button>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

6.4 关键类名解析

类名 作用
.modal 模态框容器。
.modal-dialog 模态框对话框。
.modal-content 模态框内容区域。
.modal-header 头部区域。
.modal-body 主体区域。
.modal-footer 底部按钮区域。
.fade 淡入淡出动画。
data-bs-toggle="modal" 触发模态框显示。
data-bs-target 指定目标模态框的 ID。

七、折叠 Collapse 与手风琴

7.1 折叠 Collapse

7.1.1 功能说明

折叠组件用于隐藏或显示内容,常用于 FAQ、详情展开、移动端菜单等场景。通过点击按钮或链接,可以平滑地展开或收起目标区域。

7.1.2 使用场景

  • 常见问题解答(FAQ)。
  • 商品详情展开。
  • 文章评论展开。
  • 过滤条件面板。

7.1.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>折叠组件示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<p>
<a class="btn btn-primary" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
查看更多信息
</a>
</p>
<div class="collapse" id="collapseExample">
<div class="card card-body">
这里是折叠区域的内容。Bootstrap 的折叠组件支持平滑的展开与收起动画,非常适合用于 FAQ、详情展示等场景。
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

7.1.4 关键类名解析

类名 作用
.collapse 折叠目标容器。
data-bs-toggle="collapse" 触发折叠行为。
hrefdata-bs-target 指向折叠目标的 ID。
.show 默认展开状态。

7.2 手风琴 Accordion

7.2.1 功能说明

手风琴是折叠组件的扩展,允许多个折叠项组合在一起,但通常一次只展开一个项目,其余项目会自动收起。

7.2.2 使用场景

  • FAQ 页面。
  • 设置项分类展示。
  • 长表单分组。

7.2.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>手风琴示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<div class="accordion" id="faqAccordion">
<div class="accordion-item">
<h2 class="accordion-header" id="headingOne">
<button class="accordion-button" type="button" data-bs-toggle="collapse"
data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
如何注册账号?
</button>
</h2>
<div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne"
data-bs-parent="#faqAccordion">
<div class="accordion-body">
点击网站右上角的"注册"按钮,填写邮箱和密码,完成验证后即可成功注册。
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="headingTwo">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
支持哪些支付方式?
</button>
</h2>
<div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo"
data-bs-parent="#faqAccordion">
<div class="accordion-body">
我们支持支付宝、微信支付、银联卡以及主流信用卡支付。
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="headingThree">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
如何联系客服?
</button>
</h2>
<div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree"
data-bs-parent="#faqAccordion">
<div class="accordion-body">
您可以通过在线客服、客服邮箱 service@example.com 或拨打 400-123-4567 联系我们。
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

7.2.4 关键类名解析

类名 作用
.accordion 手风琴容器。
.accordion-item 单个折叠项。
.accordion-header 标题区域。
.accordion-button 可点击的折叠按钮。
.accordion-collapse 内容折叠区域。
.accordion-body 内容主体。
data-bs-parent 指定父容器,实现互斥展开效果。

八、下拉菜单 Dropdown

8.1 功能说明

下拉菜单(Dropdown)用于在有限空间内展示一组相关操作或选项,点击按钮后向下展开菜单列表。它常用于导航栏、操作按钮组、表单筛选等位置。

8.2 使用场景

  • 导航栏中的多级菜单。
  • 表格行的操作菜单(编辑、删除、查看)。
  • 用户头像下拉菜单。
  • 表单选项分组展示。

8.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>下拉菜单示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown"
aria-expanded="false">
用户中心
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">个人资料</a></li>
<li><a class="dropdown-item" href="#">我的订单</a></li>
<li><a class="dropdown-item" href="#">消息通知</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">退出登录</a></li>
</ul>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

8.4 关键类名解析

类名 作用
.dropdown / .btn-group 下拉菜单容器。
.dropdown-toggle 触发按钮,添加下拉箭头。
.dropdown-menu 下拉菜单列表。
.dropdown-item 菜单项。
.dropdown-divider 分隔线。
data-bs-toggle="dropdown" 触发下拉显示。

九、其他常用组件

9.1 徽章 Badge

9.1.1 功能说明

徽章是一种小型计数或状态标识,通常依附于按钮、导航、列表等元素之上,用于提示数量、状态或分类。

9.1.2 使用场景

  • 购物车商品数量提示。
  • 未读消息数量。
  • 文章标签分类。
  • 状态标记:成功、警告、危险等。

9.1.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>徽章示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h5>通知 <span class="badge bg-primary">9</span></h5>
<button type="button" class="btn btn-success position-relative">
消息
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">
99+
<span class="visually-hidden">未读消息</span>
</span>
</button>
<div class="mt-3">
<span class="badge rounded-pill bg-secondary">Bootstrap</span>
<span class="badge rounded-pill bg-info text-dark">前端开发</span>
<span class="badge rounded-pill bg-warning text-dark">教程</span>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

9.1.4 关键类名解析

类名 作用
.badge 徽章基础样式。
.bg-primary/secondary/success/danger/warning/info 背景色。
.rounded-pill 胶囊形徽章。
.position-relative/absolute 定位徽章位置。

9.2 进度条 Progress

9.2.1 功能说明

进度条用于直观展示任务完成比例、加载状态、技能掌握度等信息。

9.2.2 使用场景

  • 文件上传进度。
  • 表单完成度。
  • 技能水平展示。
  • 任务完成百分比。

9.2.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>进度条示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<p>项目进度</p>
<div class="progress mb-3" role="progressbar" aria-label="项目进度" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
<div class="progress-bar bg-success" style="width: 75%">75%</div>
</div>
<p>文件上传</p>
<div class="progress mb-3" role="progressbar" aria-label="文件上传" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100">
<div class="progress-bar progress-bar-striped progress-bar-animated" style="width: 45%">45%</div>
</div>
<p>多段进度</p>
<div class="progress" role="progressbar" aria-label="多段进度" aria-valuenow="70" aria-valuemin="0" aria-valuemax="100">
<div class="progress-bar" style="width: 30%">设计</div>
<div class="progress-bar bg-success" style="width: 25%">开发</div>
<div class="progress-bar bg-info" style="width: 15%">测试</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

9.2.4 关键类名解析

类名 作用
.progress 进度条外层容器。
.progress-bar 进度条实际填充部分。
.progress-bar-striped 条纹样式。
.progress-bar-animated 条纹动画。
aria-valuenow/valuemin/valuemax 可访问性属性,描述进度值。

9.3 警告框 Alert

9.3.1 功能说明

警告框用于向用户展示重要提示信息,支持多种颜色主题,可以手动关闭。

9.3.2 使用场景

  • 操作成功提示。
  • 错误信息展示。
  • 系统公告。
  • 表单验证结果提示。

9.3.3 完整 HTML 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>警告框示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<div class="alert alert-success alert-dismissible fade show" role="alert">
<strong>操作成功!</strong> 您的信息已保存。
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="关闭"></button>
</div>
<div class="alert alert-warning d-flex align-items-center" role="alert">
<div>
<strong>注意:</strong> 您的账号尚未完成实名认证,部分功能可能受限。
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

9.3.4 关键类名解析

类名 作用
.alert 警告框容器。
.alert-success/warning/danger/info/primary 不同主题色。
.alert-dismissible 可关闭警告框。
.fade .show 关闭时的淡出动画。
data-bs-dismiss="alert" 触发关闭。

9.4 列表组 List group

9.4.1 功能说明

列表组用于展示一系列内容项,如菜单、文章列表、消息列表等。支持激活状态、禁用状态和徽章组合。

9.4.2 使用场景

  • 后台管理菜单。
  • 消息通知列表。
  • 文件列表。
  • 设置选项列表。

9.4.3 完整 HTML 示例

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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>列表组示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<div class="list-group">
<a href="#" class="list-group-item list-group-item-action active" aria-current="true">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">订单已发货</h5>
<small>3 天前</small>
</div>
<p class="mb-1">您的订单 #20240816001 已通过顺丰速运发出。</p>
<small>物流单号:SF1234567890</small>
</a>
<a href="#" class="list-group-item list-group-item-action">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">账户安全提醒</h5>
<small class="text-muted">1 周前</small>
</div>
<p class="mb-1">检测到您的账号在新设备上登录,请确认是否为本人操作。</p>
<small class="text-muted">IP:192.168.1.1</small>
</a>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

9.4.4 关键类名解析

类名 作用
.list-group 列表组容器。
.list-group-item 单个列表项。
.list-group-item-action 让列表项具备点击交互样式。
.active 当前激活项。
.disabled 禁用项。

十、实战:企业官网组件组合

10.1 实战目标

通过一个完整的企业官网首页,综合运用导航栏、轮播、卡片、模态框、折叠等组件,展示 Bootstrap 组件组合的实际开发流程。

10.2 页面结构说明

页面从上到下分为以下几个区域:

  1. 顶部响应式导航栏。
  2. 全屏轮播 Banner。
  3. 服务特色卡片展示。
  4. 关于我们折叠介绍。
  5. 客户评价轮播。
  6. 页脚联系信息与订阅表单。

10.3 完整 HTML 示例

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>企业官网首页 - Bootstrap 组件实战</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
.hero-section {
background: linear-gradient(135deg, #0d6efd 0%, #6610f2 100%);
color: white;
padding: 80px 0;
}
.feature-icon {
width: 64px;
height: 64px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
margin-bottom: 16px;
}
</style>
</head>
<body>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
<div class="container">
<a class="navbar-brand" href="#">创智科技</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mainNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="mainNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item"><a class="nav-link active" href="#">首页</a></li>
<li class="nav-item"><a class="nav-link" href="#services">服务</a></li>
<li class="nav-item"><a class="nav-link" href="#about">关于我们</a></li>
<li class="nav-item"><a class="nav-link" href="#contact">联系我们</a></li>
</ul>
<button class="btn btn-primary ms-lg-3" data-bs-toggle="modal" data-bs-target="#demoModal">预约演示</button>
</div>
</div>
</nav>

<!-- 轮播 Banner -->
<header class="hero-section text-center pt-5 mt-5">
<div class="container pt-5">
<h1 class="display-4 fw-bold">让企业数字化转型更简单</h1>
<p class="lead mb-4">提供从咨询、设计到开发、运维的一站式技术服务</p>
<a href="#services" class="btn btn-light btn-lg me-2">了解服务</a>
<button class="btn btn-outline-light btn-lg" data-bs-toggle="modal" data-bs-target="#demoModal">免费咨询</button>
</div>
</header>

<!-- 服务卡片 -->
<section id="services" class="py-5">
<div class="container">
<div class="text-center mb-5">
<h2>核心服务</h2>
<p class="text-muted">专注企业级解决方案,助力业务增长</p>
</div>
<div class="row g-4">
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm text-center p-3">
<div class="feature-icon bg-primary text-white mx-auto">🌐</div>
<div class="card-body">
<h5 class="card-title">网站建设</h5>
<p class="card-text">响应式企业官网、电商平台、门户系统设计与开发。</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm text-center p-3">
<div class="feature-icon bg-success text-white mx-auto">📱</div>
<div class="card-body">
<h5 class="card-title">移动应用</h5>
<p class="card-text">iOS 与 Android 原生及跨平台应用开发,覆盖主流场景。</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm text-center p-3">
<div class="feature-icon bg-warning text-dark mx-auto">☁️</div>
<div class="card-body">
<h5 class="card-title">云服务</h5>
<p class="card-text">云端架构设计、容器化部署、DevOps 流程搭建。</p>
</div>
</div>
</div>
</div>
</div>
</section>

<!-- 关于我们折叠 -->
<section id="about" class="py-5 bg-light">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6">
<h2>关于创智科技</h2>
<p>我们是一支由资深工程师和设计师组成的技术团队,致力于为企业提供高质量的数字化产品。</p>
<p>
<a class="btn btn-primary" data-bs-toggle="collapse" href="#companyDetail" role="button">
查看更多详情
</a>
</p>
<div class="collapse" id="companyDetail">
<div class="card card-body">
公司成立于 2015 年,服务客户超过 500 家,涵盖金融、教育、医疗、制造等多个行业。我们坚持技术创新与用户体验并重,为客户创造长期价值。
</div>
</div>
</div>
<div class="col-lg-6">
<img src="https://via.placeholder.com/600x400/0d6efd/ffffff?text=Team" class="img-fluid rounded" alt="团队">
</div>
</div>
</div>
</section>

<!-- 客户评价轮播 -->
<section class="py-5">
<div class="container">
<h2 class="text-center mb-5">客户评价</h2>
<div id="testimonialCarousel" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner text-center">
<div class="carousel-item active">
<blockquote class="blockquote">
<p>"创智科技帮助我们完成了核心系统的升级,项目交付非常专业。"</p>
<footer class="blockquote-footer">张经理,某金融机构</footer>
</blockquote>
</div>
<div class="carousel-item">
<blockquote class="blockquote">
<p>"响应速度快,沟通顺畅,设计效果超出了我们的预期。"</p>
<footer class="blockquote-footer">李总监,某教育公司</footer>
</blockquote>
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#testimonialCarousel" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#testimonialCarousel" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
</button>
</div>
</div>
</section>

<!-- 模态框 -->
<div class="modal fade" id="demoModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">预约免费咨询</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="关闭"></button>
</div>
<div class="modal-body">
<form>
<div class="mb-3">
<label class="form-label">姓名</label>
<input type="text" class="form-control" placeholder="请输入姓名">
</div>
<div class="mb-3">
<label class="form-label">手机号</label>
<input type="tel" class="form-control" placeholder="请输入手机号">
</div>
<div class="mb-3">
<label class="form-label">需求描述</label>
<textarea class="form-control" rows="3" placeholder="请简单描述您的需求"></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary">提交</button>
</div>
</div>
</div>
</div>

<!-- 页脚 -->
<footer id="contact" class="bg-dark text-white py-5">
<div class="container">
<div class="row">
<div class="col-md-6">
<h5>创智科技</h5>
<p>专注企业数字化转型,让技术创造价值。</p>
</div>
<div class="col-md-6">
<h5>订阅动态</h5>
<form class="d-flex">
<input type="email" class="form-control me-2" placeholder="您的邮箱">
<button type="submit" class="btn btn-primary">订阅</button>
</form>
</div>
</div>
<div class="text-center mt-4 pt-3 border-top border-secondary">
<small>&copy; 2024 创智科技 版权所有</small>
</div>
</div>
</footer>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

10.4 关键类名解析

类名 作用
.fixed-top 导航栏固定在顶部。
.hero-section 自定义首页横幅样式。
.feature-icon 自定义圆形图标样式。
.border-0 移除卡片边框。
.shadow-sm 添加轻阴影。
.img-fluid 图片响应式。
.rounded 圆角。
.blockquote 引用样式。

十、补充:组件使用进阶技巧

10.5 组件组合的最佳实践

在实际项目中,单个组件往往无法满足复杂页面的需求,开发者需要将多个组件进行合理组合。例如,导航栏中可以嵌套下拉菜单,卡片组可以配合轮播展示,模态框中可以放入表单和手风琴。组合时需要注意以下几点:

  • 保持结构清晰:避免过度嵌套,确保 HTML 结构语义化。
  • 统一视觉风格:使用同一主题色和间距工具类,避免页面风格混乱。
  • 控制组件数量:过多组件会增加页面复杂度和加载时间,应适度使用。
  • 优先使用官方示例:官方文档中的组合示例经过了充分测试,能够减少兼容性问题。

10.6 可访问性优化

Bootstrap 组件在设计时已经考虑了可访问性,但开发者在使用过程中仍需注意:

  • 为图片添加有意义的 alt 属性,避免使用空或无意义的描述。
  • 为交互元素添加 aria-labelaria-expandedaria-controls 等属性。
  • 确保模态框打开时焦点正确进入,关闭时焦点返回触发按钮。
  • 使用 .visually-hidden 隐藏对视觉用户无用但对屏幕阅读器必要的信息。
  • 检查颜色对比度,确保文字在背景上清晰可读。

10.7 性能优化建议

虽然 Bootstrap 组件功能强大,但在大型项目中需要注意性能:

  • 使用 Bootstrap 的自定义构建工具,只引入需要的组件和工具类,减少 CSS 和 JS 体积。
  • 对于不常用的组件,可以考虑按需加载或延迟加载。
  • 避免在轮播中使用过大的图片,应使用适当尺寸和压缩后的图片。
  • 减少不必要的 JavaScript 事件监听,避免页面卡顿。
  • 使用浏览器开发者工具定期检测渲染性能和网络请求。

10.8 主题定制与自定义样式

Bootstrap 5 提供了丰富的 CSS 自定义属性,开发者可以通过修改变量实现主题定制。例如:

1
2
3
4
5
6
7
:root {
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-body-bg: #f8f9fa;
--bs-body-color: #212529;
}

此外,开发者还可以通过覆盖类名、使用工具类或编写自定义 CSS 来扩展组件样式。建议在自定义样式时优先使用 Bootstrap 提供的工具类,保持代码的一致性和可维护性。

10.9 常见问题与解决方案

问题一:导航栏折叠按钮无法展开菜单。
解决方案:检查是否正确引入了 Bootstrap 的 JS 文件,确认 data-bs-target 的值与折叠菜单的 id 一致。

问题二:轮播组件无法自动播放。
解决方案:确保轮播容器包含 data-bs-ride="carousel" 属性,并且 bootstrap.bundle.min.js 已正确加载。

问题三:模态框打开后背景滚动。
解决方案:Bootstrap 5 默认会处理 body 滚动,如果自定义内容导致异常,可手动为 body 添加 .modal-open 类或调整 CSS。

问题四:下拉菜单被其他元素遮挡。
解决方案:检查父元素是否有 overflow: hidden,必要时调整 z-index 或更改下拉菜单的父容器结构。

10.10 学习资源推荐

  • Bootstrap 官方文档:最权威的学习和参考资源。
  • Bootstrap 图标库:为组件添加统一的图标风格。
  • 社区示例和模板:通过阅读优秀项目代码提升实战能力。
  • 前端开发调试工具:Chrome DevTools、Firefox Developer Tools 等。

十一、本章小结

本章系统讲解了 Bootstrap 5 中常用的组件系统,从导航、面包屑、分页等基础导航组件,到卡片、轮播、模态框等复杂交互组件,再到折叠、下拉菜单、徽章、进度条、警告框、列表组等实用工具组件。每个组件都从功能说明、使用场景、完整 HTML 示例和关键类名解析四个维度进行了深入讲解。

此外,本章还补充了组件组合的最佳实践、可访问性优化、性能优化、主题定制、常见问题解决方案以及学习资源推荐,帮助读者在实际项目中更加高效地使用 Bootstrap 组件。

学习 Bootstrap 组件的关键在于:

  • 理解类名的语义:类名往往直接表达其功能,如 .navbar 表示导航栏,.card 表示卡片。
  • 善用文档与示例:Bootstrap 官方文档提供了大量可直接使用的示例,是学习的最佳资源。
  • 注重组合与扩展:组件可以相互嵌套组合,配合栅格系统和工具类,可以构建出复杂的页面。
  • 关注可访问性:合理使用 ARIA 属性和键盘交互,提升页面的无障碍体验。
  • 持续优化性能:根据项目需求定制组件加载,避免引入不必要的资源。

掌握这些组件后,开发者可以快速搭建出专业、美观、响应式的现代网页,为后续深入学习 JavaScript 插件、自定义主题和大型项目开发打下坚实基础。