Bootstrap - 教程

Bootstrap 作为全球最受欢迎的前端组件库,始终是开发者快速搭建高质量Web项目的首选工具,Bootstrap 是一套开源的 HTML、CSS 和 JavaScript 工具集,核心定位是 响应式布局、移动设备优先 的Web开发框架。而 Bootstrap5 作为其最新稳定版本,在保留核心优势的基础上,进行了全面升级——更快的样式渲染、更简洁的代码结构、更强大的原生JavaScript支持,让前端开发效率大幅提升。

Bootstrap5 作为现代前端开发的“效率神器”,其核心价值在于:降低响应式开发门槛、统一开发规范、大幅缩短开发周期。无论是个人项目、企业官网还是大型Web应用,都能通过Bootstrap5快速搭建出美观、兼容的前端界面。

如果你是前端新手,建议先掌握HTML/CSS/JS基础,再通过本文的实例动手实践,很快就能上手;如果你是资深开发者,Bootstrap5的自定义能力和高效工具集,能让你从重复的CSS编写中解放出来,聚焦核心业务逻辑。

一、基础布局:容器与网格系统

1. 容器(Container)

核心说明:容器是布局的基础,用于包裹页面内容,提供响应式固定宽度或全屏宽度。

  • container:固定宽度,随屏幕尺寸变化(移动端全屏,桌面端固定宽度)
  • container-fluid:全屏宽度,占满整个视口

代码示例:

<!-- 固定宽度容器 -->
    <div class="container bg-light p-3 border">
  <h3>固定宽度容器</h3>
  <p>随屏幕尺寸自适应固定宽度(移动端自动全屏)</p>
  </div>
  <!-- 全屏宽度容器 -->
      <div class="container-fluid bg-primary text-white p-3 mt-3">
    <h3>全屏宽度容器</h3>
    <p>占满整个视口宽度,无左右边距</p>
    </div>

2. 网格系统(Grid)

核心说明:基于 12 列布局,支持响应式断点(xs、sm、md、lg、xl、xxl),可快速实现复杂布局。

  • 核心结构:container → row → col-*
  • 响应式前缀:col-[断点]-[列数](如 col-md-6 表示中等屏幕及以上占 6 列)

代码示例(响应式 2-1 列布局):

<div class="container mt-4">
    <div class="row">
    <!-- 移动端占12列,中等屏幕及以上占6列 -->
        <div class="col-12 col-md-6 bg-success text-white p-3">
        左侧区域(移动端全屏,桌面端半屏)
      </div>
      <!-- 移动端占12列,中等屏幕及以上占6列 -->
          <div class="col-12 col-md-6 bg-danger text-white p-3">
          右侧区域(移动端全屏,桌面端半屏)
        </div>
      </div>
      <!-- 不等分列 + 偏移 -->
          <div class="row mt-3">
        <div class="col-8 col-lg-4 bg-warning p-3">占8列(大屏占4列)</div>
        <div class="col-4 col-lg-4 offset-lg-4 bg-info text-white p-3">占4列(大屏占4列,偏移4列)</div>
        </div>
      </div>

关键知识点:

  • 列数总和不超过 12,超过则自动换行;
  • offset-[断点]-[列数]:实现列偏移;
  • row-cols-[数量]:快速设置一行的列数(如 row-cols-3 表示一行 3 列)。

二、排版与颜色系统

1. 文字排版

核心说明:内置标题、段落、文本对齐、字号等样式,无需自定义 CSS。

代码示例:

<div class="container mt-4">
  <!-- 标题(h1-h6 自带样式,也可使用 .h1-.h6 类) -->
  <h1>h1 标题(默认最大)</h1>
  <h2>h2 标题</h2>
  <p class="h3">用 .h3 类实现 h3 样式的段落</p>
    <!-- 文本样式 -->
    <p class="lead">这是引导文本(比普通段落更大更粗)</p>
    <p>普通文本 - 内置行高和间距,可读性更佳</p>
      <!-- 文本对齐 -->
      <p class="text-start">左对齐(默认)</p>
      <p class="text-center">居中对齐</p>
      <p class="text-end">右对齐</p>
        <!-- 文本换行与截断 -->
        <p class="text-wrap" style="width: 150px;">强制换行(即使内容超长也不截断)</p>
        <p class="text-nowrap bg-light" style="width: 150px; overflow: hidden;">文本不换行(超长部分隐藏)</p>
        <p class="text-truncate bg-light" style="width: 150px;">文本截断(超长部分显示...)</p>
        </div>

2. 颜色系统

核心说明:提供文本颜色、背景颜色、边框颜色,支持主题色和状态色(成功、警告、危险等)。

代码示例:

<div class="container mt-4">
  <!-- 文本颜色 -->
  <p class="text-primary">主色调文本(蓝色)</p>
  <p class="text-success">成功色文本(绿色)</p>
  <p class="text-warning">警告色文本(黄色)</p>
  <p class="text-danger">危险色文本(红色)</p>
  <p class="text-muted">次要文本(灰色,用于辅助说明)</p>
    <!-- 背景颜色 -->
    <div class="bg-primary text-white p-2 mt-2">主色调背景</div>
    <div class="bg-success text-white p-2 mt-2">成功色背景</div>
    <div class="bg-warning text-dark p-2 mt-2">警告色背景(深色文字更清晰)</div>
      <!-- 边框颜色 -->
      <div class="border border-primary p-2 mt-3">蓝色边框</div>
      <div class="border border-danger rounded p-2 mt-2">红色边框 + 圆角</div>
      </div>

三、组件:表格、图像与形状

1. 表格

核心说明:内置表格样式、条纹、hover 效果、响应式表格等,支持自定义颜色和边框。

代码示例(带样式的响应式表格):

<div class="container mt-4">
<h3>响应式表格(移动端可横向滚动)</h3>
    <div class="table-responsive">
      <table class="table table-striped table-hover table-bordered">
        <thead class="table-dark">
        <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>职位</th>
        <th>部门</th>
        </tr>
      </thead>
      <tbody>
        <tr>
        <td>1</td>
        <td>张三</td>
        <td>25</td>
        <td>前端开发</td>
        <td>技术部</td>
        </tr>
          <tr class="table-success">
        <td>2</td>
        <td>李四</td>
        <td>30</td>
        <td>后端开发</td>
        <td>技术部</td>
        </tr>
        <tr>
        <td>3</td>
        <td>王五</td>
        <td>28</td>
        <td>产品经理</td>
        <td>产品部</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

关键类说明:

  • table-striped:条纹表格;
  • table-hover:hover 时高亮;
  • table-bordered:带边框;
  • table-responsive:响应式表格(移动端横向滚动);
  • table-[颜色]:设置表头或行的背景色(如 table-dark、table-success)。

2. 图像与形状

核心说明:快速设置图片响应式、圆角、阴影、形状等样式,无需自定义 CSS。

代码示例:

<div class="container mt-4">
  <!-- 响应式图片(自动适应容器宽度) -->
      <img src="https://picsum.photos/800/400" class="img-fluid rounded shadow-sm" alt="响应式图片">
      <!-- 圆形图片 + 边框 -->
          <img src="https://picsum.photos/300/300" class="rounded-circle border border-3 border-primary mt-3" style="width: 150px;" alt="圆形图片">
          <!-- 缩略图样式 -->
              <img src="https://picsum.photos/200/200" class="img-thumbnail mt-3" alt="缩略图">
              <!-- 图片对齐 -->
                  <div class="text-center mt-3">
                    <img src="https://picsum.photos/200/150" class="img-fluid d-inline-block" alt="居中图片">
                  </div>
                </div>

关键类说明:

  • img-fluid:响应式图片(max-width: 100%,height: auto);
  • rounded:圆角图片(rounded-0 无圆角,rounded-pill 胶囊形);
  • rounded-circle:圆形图片(需确保图片为正方形);
  • img-thumbnail:缩略图样式(带边框和内边距);
  • shadow-[sm/md/lg]:设置阴影效果。

四、交互组件:按钮、按钮组与提示框

1. 按钮(Buttons)

核心说明:内置多种样式、尺寸、状态的按钮,支持图标按钮和链接伪装按钮。

代码示例:

<div class="container mt-4">
  <!-- 基础按钮样式 -->
  <button class="btn btn-primary">主按钮</button>
  <button class="btn btn-success">成功按钮</button>
  <button class="btn btn-warning">警告按钮</button>
  <button class="btn btn-danger">危险按钮</button>
  <button class="btn btn-outline-dark">边框按钮</button>
    <!-- 按钮尺寸 -->
    <button class="btn btn-primary btn-sm mt-2">小按钮</button>
    <button class="btn btn-primary mt-2">默认尺寸</button>
    <button class="btn btn-primary btn-lg mt-2">大按钮</button>
      <!-- 状态按钮 -->
      <button class="btn btn-primary mt-2" disabled>禁用按钮</button>
      <button class="btn btn-primary mt-2 active">激活状态</button>
        <!-- 链接伪装按钮 -->
        <a href="#" class="btn btn-info mt-2">链接按钮(无跳转)</a>
          <!-- 图标按钮(需引入Font Awesome) -->
              <button class="btn btn-dark mt-2">
            <i class="bi bi-search"></i> 搜索(需引入Bootstrap Icons)
            </button>
          </div>

关键说明:

  • 核心类:btn + 样式类(btn-[主题色]);
  • 尺寸类:btn-sm(小)、btn-lg(大);
  • 禁用状态:直接添加 disabled 属性;
  • 图标支持:需引入 Bootstrap Icons 或 Font Awesome(如 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">)。

2. 按钮组(Button Groups)

核心说明:将多个按钮组合成一个整体,支持水平/垂直排列、尺寸统一。

代码示例:

<div class="container mt-4">
  <!-- 水平按钮组 -->
      <div class="btn-group" role="group" aria-label="水平按钮组">
    <button class="btn btn-primary">左</button>
    <button class="btn btn-secondary">中</button>
    <button class="btn btn-primary">右</button>
    </div>
    <!-- 垂直按钮组 -->
        <div class="btn-group-vertical mt-3" role="group" aria-label="垂直按钮组">
      <button class="btn btn-success">上</button>
      <button class="btn btn-success">中</button>
      <button class="btn btn-success">下</button>
      </div>
      <!-- 带下拉菜单的按钮组 -->
          <div class="btn-group mt-3">
        <button class="btn btn-warning">操作</button>
            <button class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
          <span class="visually-hidden">下拉菜单</span>
          </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>
          </ul>
        </div>
      </div>

3. 提示框(Tooltips)

核心说明:鼠标悬浮时显示提示信息,需通过 Bootstrap JS 初始化(依赖 bootstrap.bundle.min.js)。

代码示例:

<div class="container mt-4">
    <button type="button" class="btn btn-primary" data-bs-toggle="tooltip" data-bs-title="这是提示框内容" data-bs-placement="top">
    上方提示框
  </button>
    <button type="button" class="btn btn-secondary ms-3" data-bs-toggle="tooltip" data-bs-title="右侧提示信息" data-bs-placement="right">
    右侧提示框
  </button>
</div>
<!-- 必须引入Bootstrap JS(含Popper.js,提示框依赖) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
  <script>
    // 初始化所有提示框
    const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
    const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
  </script>

关键属性:

  • data-bs-toggle="tooltip":标记为提示框组件;
  • data-bs-title:提示框内容;
  • data-bs-placement:提示框位置(top/bottom/left/right)。

五、进度与列表组件

1. 进度条(Progress)

核心说明:展示任务完成进度,支持动态更新、多段进度、条纹和动画效果。

代码示例:

<div class="container mt-4">
  <!-- 基础进度条 -->
      <div class="progress mb-3" style="height: 20px;">
    <div class="progress-bar" role="progressbar" style="width: 60%" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100">60%</div>
    </div>
    <!-- 带颜色的进度条 -->
        <div class="progress mb-3" style="height: 20px;">
      <div class="progress-bar bg-success" role="progressbar" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">成功(75%)</div>
      </div>
      <!-- 条纹进度条 -->
          <div class="progress mb-3" style="height: 20px;">
        <div class="progress-bar bg-warning progress-bar-striped" role="progressbar" style="width: 50%" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">条纹(50%)</div>
        </div>
        <!-- 动画条纹进度条 -->
            <div class="progress mb-3" style="height: 20px;">
          <div class="progress-bar bg-danger progress-bar-striped progress-bar-animated" role="progressbar" style="width: 80%" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100">动画条纹(80%)</div>
          </div>
          <!-- 多段进度条 -->
              <div class="progress" style="height: 20px;">
            <div class="progress-bar bg-primary" style="width: 30%" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100">30%</div>
            <div class="progress-bar bg-info" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">25%</div>
            <div class="progress-bar bg-secondary" style="width: 20%" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">20%</div>
            </div>
          </div>

2. 列表(List Groups)

核心说明:用于展示系列项目(如导航、通知),支持激活状态、徽章、链接列表等。

代码示例:

<div class="container mt-4">
  <!-- 基础列表组 -->
      <ul class="list-group mb-3" style="width: 200px;">
    <li class="list-group-item">首页</li>
    <li class="list-group-item active" aria-current="true">博客</li>
    <li class="list-group-item">项目</li>
    <li class="list-group-item disabled">联系我(禁用)</li>
    </ul>
    <!-- 链接列表组 -->
        <div class="list-group mb-3" style="width: 200px;">
      <a href="#" class="list-group-item list-group-item-action">链接1</a>
      <a href="#" class="list-group-item list-group-item-action list-group-item-primary"> primary 链接</a>
      <a href="#" class="list-group-item list-group-item-action list-group-item-danger"> danger 链接</a>
      </div>
      <!-- 带徽章的列表组 -->
          <ul class="list-group" style="width: 200px;">
            <li class="list-group-item d-flex justify-content-between align-items-center">
            未读消息
          <span class="badge bg-primary rounded-pill">5</span>
          </li>
            <li class="list-group-item d-flex justify-content-between align-items-center">
            待办任务
          <span class="badge bg-danger rounded-pill">3</span>
          </li>
        </ul>
      </div>

六、高级组件:卡片、折叠、下拉菜单与轮播

1. 卡片(Cards)

核心说明:Bootstrap5 最常用的组件之一,用于展示内容块(如文章、产品),支持图片、标题、文本、按钮等组合。

代码示例:

<div class="container mt-4">
    <div class="card" style="width: 18rem;">
    <!-- 卡片图片 -->
        <img src="https://picsum.photos/300/200" 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 text-danger">编辑</a>
          </div>
          <!-- 卡片底部 -->
              <div class="card-footer text-muted">
              发布时间:2024-05-20
            </div>
          </div>
        </div>

关键结构:

  • card:卡片容器;
  • card-img-top:卡片顶部图片;
  • card-body:卡片内容区域(标题、文本、按钮);
  • card-footer:卡片底部(辅助信息)。

2. 折叠(Collapse)

核心说明:点击触发内容显示/隐藏,常用于折叠面板、详情展开等场景。

代码示例:

<div class="container mt-4">
  <!-- 折叠触发按钮 -->
      <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
      点击展开/隐藏内容
    </button>
    <!-- 折叠内容 -->
        <div class="collapse mt-2" id="collapseExample">
          <div class="card card-body">
          这是折叠后的内容,支持任意HTML结构(文本、图片、表格等)。Bootstrap5 的折叠组件基于原生JS实现,无需额外依赖,动画流畅。
        </div>
      </div>
    </div>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

关键属性:

  • 触发元素:data-bs-toggle="collapse" + data-bs-target="#目标ID";
  • 折叠内容:class="collapse" + 唯一ID。

3. 下拉菜单(Dropdowns)

核心说明:点击按钮显示下拉选项,支持分组、分隔线、禁用选项等。

代码示例:

<div class="container mt-4">
    <div class="dropdown">
      <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">
      下拉菜单
    </button>
      <ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
    <li><a class="dropdown-item" href="#">选项1</a></li>
    <li><a class="dropdown-item" href="#">选项2</a></li>
    <li><a class="dropdown-item disabled" 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.0/dist/js/bootstrap.bundle.min.js"></script>

4. 轮播(Carousel)

核心说明:用于展示多张图片或内容的轮播组件,支持自动播放、手动切换、指示器等。

代码示例:

<div class="container mt-4">
    <div id="carouselExampleIndicators" class="carousel slide" data-bs-ride="true">
    <!-- 轮播指示器 -->
        <div class="carousel-indicators">
      <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
      <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2"></button>
      <button type="button" data-bs-target="#carouselExampleIndicators" 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/1200/400?random=1" class="d-block w-100" alt="轮播图1">
                <div class="carousel-caption d-none d-md-block">
              <h5>第一张轮播图标题</h5>
              <p>轮播图描述信息1</p>
              </div>
            </div>
              <div class="carousel-item">
                <img src="https://picsum.photos/1200/400?random=2" class="d-block w-100" alt="轮播图2">
                  <div class="carousel-caption d-none d-md-block">
                <h5>第二张轮播图标题</h5>
                <p>轮播图描述信息2</p>
                </div>
              </div>
                <div class="carousel-item">
                  <img src="https://picsum.photos/1200/400?random=3" class="d-block w-100" alt="轮播图3">
                    <div class="carousel-caption d-none d-md-block">
                  <h5>第三张轮播图标题</h5>
                  <p>轮播图描述信息3</p>
                  </div>
                </div>
              </div>
              <!-- 轮播控制按钮 -->
                  <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" 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="#carouselExampleIndicators" 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.0/dist/js/bootstrap.bundle.min.js"></script>

关键属性:

  • data-bs-ride="true":页面加载后自动播放;
  • carousel-item active:默认显示的轮播项(必须有一个 active);
  • d-none d-md-block:轮播标题仅在中等屏幕及以上显示。

七、导航与表单

1. 导航栏(Navbar)

核心说明:响应式导航组件,支持桌面端横向导航、移动端折叠菜单,是网站顶部导航的首选。

代码示例(响应式导航栏):

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <div class="container">
    <!-- 品牌Logo -->
    <a class="navbar-brand" href="#">MyBlog</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 ms-auto"> <!-- ms-auto 右对齐 -->
                <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 dropdown">
                  <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                  更多
                </a>
                  <ul class="dropdown-menu">
                <li><a class="dropdown-item" href="#">关于我</a></li>
                <li><a class="dropdown-item" href="#">联系我</a></li>
                </ul>
              </li>
            </ul>
          </div>
        </div>
      </nav>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

关键类说明:

  • navbar-expand-lg:中等屏幕及以上展开导航,移动端折叠;
  • ms-auto:导航菜单右对齐;
  • navbar-dark bg-dark:深色导航栏(可替换为 bg-primary 等主题色)。

2. 表单(Forms)

核心说明:内置表单样式、验证、布局,支持输入框、下拉选择、复选框、文件上传等常用元素。

代码示例(带验证的表单):

<div class="container mt-4">
    <form class="row g-3 needs-validation" novalidate style="max-width: 600px;">
    <!-- 用户名 -->
        <div class="col-md-6">
      <label for="username" class="form-label">用户名</label>
          <input type="text" class="form-control" id="username" required>
        <div class="invalid-feedback">请输入用户名</div>
        </div>
        <!-- 邮箱 -->
            <div class="col-md-6">
          <label for="email" class="form-label">邮箱</label>
              <input type="email" class="form-control" id="email" required>
            <div class="invalid-feedback">请输入有效的邮箱地址</div>
            </div>
            <!-- 密码 -->
                <div class="col-md-12">
              <label for="password" class="form-label">密码</label>
                  <input type="password" class="form-control" id="password" minlength="6" required>
                <div class="invalid-feedback">密码长度不少于6位</div>
                </div>
                <!-- 下拉选择 -->
                    <div class="col-md-6">
                  <label for="category" class="form-label">博客分类</label>
                      <select class="form-select" id="category" required>
                    <option value="">请选择</option>
                    <option value="1">前端开发</option>
                    <option value="2">后端开发</option>
                    <option value="3">生活分享</option>
                    </select>
                  <div class="invalid-feedback">请选择分类</div>
                  </div>
                  <!-- 复选框 -->
                      <div class="col-md-6">
                        <div class="form-check mt-4">
                          <input class="form-check-input" type="checkbox" id="agree" required>
                            <label class="form-check-label" for="agree">
                            同意用户协议
                          </label>
                        <div class="invalid-feedback">请勾选用户协议</div>
                        </div>
                      </div>
                      <!-- 文件上传 -->
                          <div class="col-md-12">
                        <label for="file" class="form-label">上传头像</label>
                            <input class="form-control" type="file" id="file" accept="image/*">
                          </div>
                          <!-- 提交按钮 -->
                              <div class="col-12">
                            <button class="btn btn-primary" type="submit">提交表单</button>
                            </div>
                          </form>
                        </div>
                      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
                        <script>
                          // 表单验证逻辑
                          (function () {
                          'use strict'
                          const forms = document.querySelectorAll('.needs-validation')
                          Array.from(forms).forEach(form => {
                          form.addEventListener('submit', event => {
                          if (!form.checkValidity()) {
                          event.preventDefault()
                          event.stopPropagation()
                          }
                          form.classList.add('was-validated')
                          }, false)
                          })
                          })()
                        </script>

关键说明:

  • form-control:统一表单元素样式(输入框、下拉框等);
  • needs-validation + novalidate:启用自定义验证;
  • invalid-feedback:验证失败时显示的提示信息;
  • row g-3:表单网格布局,g-3 为列间距。

八、核心依赖与资源引入

所有示例均基于 CDN 引入 Bootstrap5 资源,无需本地配置,直接复制到 HTML 文件即可运行:

<!-- Bootstrap5 CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- Bootstrap5 JS(含Popper.js,支持下拉菜单、提示框等组件) -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
      <!-- 可选:Bootstrap Icons(图标支持) -->
          <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">

附上官方资源:

posted @ 2026-02-07 13:32  yangykaifa  阅读(78)  评论(0)    收藏  举报