Bootstrap 实例教程:从零开始构建响应式网站

目录

  1. 第一部分:Bootstrap 是什么?为什么要用它?
  2. 第二部分:准备工作 - 如何引入 Bootstrap?
  3. 第三部分:核心概念 - 布局与栅格系统
    • 1 容器
    • 2 栅格系统详解
  4. 第四部分:常用组件实例 - 快速构建UI
    • 1 导航栏
    • 2 轮播图
    • 3 卡片
    • 4 模态框
    • 5 表单与输入框
  5. 第五部分:实战项目 - 构建一个简单的个人作品集网站
  6. 第六部分:进阶技巧与资源

第一部分:Bootstrap 是什么?为什么要用它?

Bootstrap 是一个由 Twitter 开发的、全球最流行的前端开源工具库,它提供了一套基于 HTML、CSS 和 JavaScript 的设计模板和组件,帮助开发者快速构建美观、响应式且功能完善的网站。

bootstrap使用实例教程
(图片来源网络,侵删)

核心优势:

  • 快速开发: 无需从零开始写样式,直接使用现成的组件和工具类,极大提高开发效率。
  • 响应式设计: 默认支持移动优先,一套代码可以完美适配桌面、平板和手机等各种设备。
  • 跨浏览器兼容: 处理了不同浏览器之间的兼容性问题,让你更专注于业务逻辑。
  • 设计一致性: 提供统一的设计语言和视觉风格,让网站看起来更专业、更规范。
  • 丰富的组件: 包含了导航栏、轮播图、模态框、下拉菜单等大量常用组件。

第二部分:准备工作 - 如何引入 Bootstrap?

有三种主要方式可以在你的项目中使用 Bootstrap:

  1. CDN 链接 (最简单,适合初学者和测试)
  2. 下载文件 (适合离线开发或生产环境)
  3. 包管理器 (适合现代前端项目)

对于初学者,我们强烈推荐使用 CDN 方式,因为它最简单,无需任何配置。

CDN 方式示例:

bootstrap使用实例教程
(图片来源网络,侵删)

在你的 HTML 文件的 <head> 标签内,引入 Bootstrap 的 CSS 和 JavaScript 文件。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">我的第一个 Bootstrap 页面</title>
    <!-- 1. 引入 Bootstrap 的 CSS 文件 -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- 可选:引入 Bootstrap 的 Icons 图标库 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.2/font/bootstrap-icons.min.css">
</head>
<body>
    <!-- 你的页面内容将放在这里 -->
    <!-- 2. 引入 Bootstrap 的 JavaScript 文件 (需要 Popper.js 依赖) -->
    <!-- 注意:通常放在 body 结束标签前,以确保页面元素已加载 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

重要提示: 为了让 Bootstrap 的移动端特性正常工作,必须在 <head> 中设置 viewport 元素


第三部分:核心概念 - 布局与栅格系统

Bootstrap 的灵魂在于其 12 列响应式栅格系统,理解了它,你就掌握了 Bootstrap 布局的精髓。

1 容器

栅格系统需要放置在容器中,Bootstrap 提供了两种容器:

  • .container: 宽度是响应式的,在小屏幕上全宽,在大屏幕上固定宽度并居中。
  • .container-fluid: 宽度始终是 100%,占据整个视口宽度。
<div class="container">
  <h1>我是一个固定宽度的容器</h1>
  <p>在小屏幕上宽度是100%,在中等屏幕以上宽度固定并居中。</p>
</div>
<hr>
<div class="container-fluid">
  <h1>我是一个全宽度的容器</h1>
  <p>宽度始终是100%,占满整个屏幕。</p>
</div>

2 栅格系统详解

栅格系统由行和列组成。

  • : 使用 .row 类来创建一个行,它会自动处理列的清除和负边距,确保列之间有合适的间距。
  • : 使用 .col-* 类来创建列。 可以是一个数字(1-12),代表该列占用的份数。

基本结构:

<div class="container">
  <div class="row">
    <div class="col">列 1</div>
    <div class="col">列 2</div>
    <div class="col">列 3</div>
  </div>
</div>

示例1:等分三列

col 不带数字时,会自动将一行中的所有列等分。

<div class="container">
  <div class="row">
    <div class="col bg-light border p-3">1/3 宽度</div>
    <div class="col bg-light border p-3">1/3 宽度</div>
    <div class="col bg-light border p-3">1/3 宽度</div>
  </div>
</div>

示例2:指定宽度

总份数为12,下面示例中,第一列占4份,第二列占8份。

<div class="container">
  <div class="row">
    <div class="col-4 bg-secondary text-white p-3">4/12 宽度</div>
    <div class="col-8 bg-info text-white p-3">8/12 宽度</div>
  </div>
</div>

示例3:响应式布局 (核心!)

你可以为不同屏幕尺寸指定不同的列宽,格式为 .col-{breakpoint}-{number}

  • xs (Extra small, <576px)
  • sm (Small, ≥576px)
  • md (Medium, ≥768px)
  • lg (Large, ≥992px)
  • xl (Extra large, ≥1200px)
  • xxl (Extra extra large, ≥1400px)

场景: 在小屏幕上(手机),内容垂直堆叠;在中等屏幕以上(平板、桌面),内容水平排列。

<div class="container">
  <h2>响应式布局示例</h2>
  <p>在手机上,这两列会上下堆叠,在平板或电脑上,它们会左右排列。</p>
  <div class="row">
    <!-- 默认 (xs) 垂直堆叠,在 md 及以上屏幕水平排列,各占一半 -->
    <div class="col-12 col-md-6 bg-primary text-white p-3">左侧内容</div>
    <div class="col-12 col-md-6 bg-success text-white p-3">右侧内容</div>
  </div>
</div>

第四部分:常用组件实例 - 快速构建UI

Bootstrap 提供了大量开箱即用的组件。

1 导航栏

导航栏是网站的骨架,Bootstrap 的 .navbar 组件非常强大。

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
  <div class="container-fluid">
    <!-- 品牌/Logo -->
    <a class="navbar-brand" href="#">我的网站</a>
    <!-- 用于折叠的按钮 -->
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <!-- 导航链接 -->
    <div class="collapse navbar-collapse" id="navbarNav">
      <ul class="navbar-nav">
        <li class="nav-item">
          <a class="nav-link active" aria-current="page" href="#">首页</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">lt;/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>
  </div>
</nav>

2 轮播图

轮播图非常适合展示图片或重要信息。

<div id="myCarousel" class="carousel slide" data-bs-ride="carousel">
  <!-- 轮播指标 -->
  <div class="carousel-indicators">
    <button type="button" data-bs-target="#myCarousel" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
    <button type="button" data-bs-target="#myCarousel" data-bs-slide-to="1" aria-label="Slide 2"></button>
    <button type="button" data-bs-target="#myCarousel" data-bs-slide-to="2" aria-label="Slide 3"></button>
  </div>
  <!-- 轮播项目 -->
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img src="https://picsum.photos/seed/slide1/1200/400" class="d-block w-100" alt="Slide 1">
      <div class="carousel-caption d-none d-md-block">
        <h5>第一张幻灯片</h5>
        <p>一些说明文字。</p>
      </div>
    </div>
    <div class="carousel-item">
      <img src="https://picsum.photos/seed/slide2/1200/400" class="d-block w-100" alt="Slide 2">
      <div class="carousel-caption d-none d-md-block">
        <h5>第二张幻灯片</h5>
        <p>更多说明文字。</p>
      </div>
    </div>
    <div class="carousel-item">
      <img src="https://picsum.photos/seed/slide3/1200/400" class="d-block w-100" alt="Slide 3">
      <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="#myCarousel" data-bs-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-bs-target="#myCarousel" data-bs-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Next</span>
  </button>
</div>

3 卡片

卡片是一个灵活的、可扩展的内容容器。

<div class="container">
  <div class="row">
    <div class="col-md-4">
      <div class="card" style="width: 18rem;">
        <img src="https://picsum.photos/seed/card1/300/200" 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>
    <div class="col-md-4">
      <div class="card" style="width: 18rem;">
        <img src="https://picsum.photos/seed/card2/300/200" class="card-img-top" alt="...">
        <div class="card-body">
          <h5 class="card-title">另一个卡片</h5>
          <p class="card-text">这是另一张卡片,同样可以包含各种元素。</p>
          <a href="#" class="btn btn-success">点击这里</a>
        </div>
      </div>
    </div>
    <div class="col-md-4">
      <div class="card bg-warning text-dark" style="width: 18rem;">
        <div class="card-body">
          <h5 class="card-title">无图片卡片</h5>
          <p class="card-text">卡片也可以没有图片,只包含文本和按钮。</p>
          <a href="#" class="btn btn-dark">操作按钮</a>
        </div>
      </div>
    </div>
  </div>
</div>

4 模态框

模态框是一个对话框/弹出窗口,用于显示额外的信息或表单。

触发按钮:

<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
  打开模态框
</button>

模态框 HTML 结构:

<!-- 模态框 -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">模态框标题</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        这里是模态框的内容,你可以放任何东西。
      </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>

5 表单与输入框

Bootstrap 能让原生表单元素变得美观。

<div class="container">
  <form>
    <div class="mb-3">
      <label for="exampleInputEmail1" class="form-label">邮箱地址</label>
      <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
      <div id="emailHelp" class="form-text">我们绝不会将你的邮箱分享给任何人。</div>
    </div>
    <div class="mb-3">
      <label for="exampleInputPassword1" class="form-label">密码</label>
      <input type="password" class="form-control" id="exampleInputPassword1">
    </div>
    <div class="mb-3 form-check">
      <input type="checkbox" class="form-check-input" id="exampleCheck1">
      <label class="form-check-label" for="exampleCheck1">记住我</label>
    </div>
    <button type="submit" class="btn btn-primary">提交</button>
  </form>
</div>

第五部分:实战项目 - 构建一个简单的个人作品集网站

让我们把学到的知识组合起来,创建一个简单的单页网站。

最终效果:

  1. 顶部一个响应式导航栏。
  2. 一个欢迎轮播图。
  3. 一个关于我的简介卡片。
  4. 一个展示项目技能的网格。

完整代码 (index.html):

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">张三的个人作品集</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.2/font/bootstrap-icons.min.css">
    <style>
        /* 自定义一些样式 */
        .carousel-item img {
            object-fit: cover;
            height: 400px;
        }
        .card-img-top {
            height: 200px;
            object-fit: cover;
        }
        footer {
            margin-top: 50px;
        }
    </style>
</head>
<body>
    <!-- 导航栏 -->
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark sticky-top">
        <div class="container">
            <a class="navbar-brand" href="#">张三的作品集</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav ms-auto">
                    <li class="nav-item">
                        <a class="nav-link active" href="#home">首页</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#about">关于我</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#skills">技能</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#contact">联系</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    <main>
        <!-- 轮播图部分 -->
        <section id="home">
            <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"></button>
                    <button type="button" data-bs-target="#heroCarousel" data-bs-slide-to="1"></button>
                    <button type="button" data-bs-target="#heroCarousel" data-bs-slide-to="2"></button>
                </div>
                <div class="carousel-inner">
                    <div class="carousel-item active">
                        <img src="https://picsum.photos/seed/hero1/1200/400" class="d-block w-100" alt="...">
                        <div class="carousel-caption d-none d-md-block">
                            <h1>你好,我是张三</h1>
                            <p>一名充满激情的前端开发者</p>
                        </div>
                    </div>
                    <div class="carousel-item">
                        <img src="https://picsum.photos/seed/hero2/1200/400" class="d-block w-100" alt="...">
                        <div class="carousel-caption d-none d-md-block">
                            <h1>专注于用户体验</h1>
                            <p>创造美观且实用的网站</p>
                        </div>
                    </div>
                    <div class="carousel-item">
                        <img src="https://picsum.photos/seed/hero3/1200/400" class="d-block w-100" alt="...">
                        <div class="carousel-caption d-none d-md-block">
                            <h1>欢迎来到我的世界</h1>
                            <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"></span>
                </button>
                <button class="carousel-control-next" type="button" data-bs-target="#heroCarousel" data-bs-slide="next">
                    <span class="carousel-control-next-icon"></span>
                </button>
            </div>
        </section>
        <!-- 关于我部分 -->
        <section id="about" class="container my-5">
            <h2 class="text-center mb-4">关于我</h2>
            <div class="row">
                <div class="col-md-8">
                    <p>你好!我是一名热爱编程和设计的前端开发工程师,拥有超过5年的行业经验,专注于使用现代Web技术(如 HTML5, CSS3, JavaScript, React, Vue)构建高性能、用户友好的网站和Web应用程序。</p>
                    <p>我相信优秀的设计和流畅的用户体验是产品成功的关键,我不仅在技术上追求卓越,也注重细节,力求为用户带来最佳的交互感受。</p>
                </div>
                <div class="col-md-4">
                    <img src="https://picsum.photos/seed/avatar/300/300" class="img-fluid rounded-circle" alt="张三的头像">
                </div>
            </div>
        </section>
        <!-- 技能部分 -->
        <section id="skills" class="bg-light py-5">
            <div class="container">
                <h2 class="text-center mb-4">我的技能</h2>
                <div class="row">
                    <div class="col-md-4 mb-4">
                        <div class="card h-100">
                            <div class="card-body text-center">
                                <i class="bi bi-code-slash display-1 text-primary"></i>
                                <h5 class="card-title mt-3">前端开发</h5>
                                <p class="card-text">精通 HTML5, CSS3, JavaScript (ES6+), 熟练使用 Bootstrap, Tailwind CSS, React, Vue.js 等主流框架和库。</p>
                            </div>
                        </div>
                    </div>
                    <div class="col-md-4 mb-4">
                        <div class="card h-100">
                            <div class="card-body text-center">
                                <i class="bi bi-palette display-1 text-success"></i>
                                <h5 class="card-title mt-3">UI/UX 设计</h5>
                                <p class="card-text">具备良好的审美和设计感,能够使用 Figma, Sketch 等工具进行原型设计和交互设计。</p>
                            </div>
                        </div>
                    </div>
                    <div class="col-md-4 mb-4">
                        <div class="card h-100">
                            <div class="card-body text-center">
                                <i class="bi bi-gear display-1 text-info"></i>
                                <h5 class="card-title mt-3">工具与协作</h5>
                                <p class="card-text">熟练使用 Git 进行版本控制,了解 CI/CD 流程,有良好的团队协作和沟通能力。</p>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </section>
    </main>
    <!-- 页脚 -->
    <footer class="bg-dark text-white text-center py-3">
        <div class="container">
            <p>&copy; 2025 张三的作品集. All rights reserved. | 使用 Bootstrap 构建</p>
        </div>
    </footer>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

第六部分:进阶技巧与资源

  • 自定义 Bootstrap: 如果你不想使用默认的 Bootstrap 主题,可以通过 Sass 变量 进行深度定制,修改颜色、字体、间距等。
  • 组件定制: 大部分组件都提供了配置选项,例如轮播图的自动播放间隔、模态框的背景点击关闭等,查阅官方文档了解详情。
  • 官方文档是你的圣经: Bootstrap 官方文档 是最权威、最全面的参考资料,几乎所有问题都能在那里找到答案。
  • 更多资源:

希望这份详尽的教程能帮助你顺利入门 Bootstrap!动手实践是最好的学习方式,尝试修改代码,创建你自己的页面吧!