跳到主要内容

从 Bootstrap 4 迁移到 5

Bootstrap 5 带来了许多重大变化,本指南汇总了从 v4 升级到 v5 的核心差异。

注意:Bootstrap 5 与 v4 不完全向下兼容,升级需要进行一些代码迁移工作。

重大变化

不再依赖 jQuery

Bootstrap 5 使用纯 JavaScript 重写了所有插件,彻底移除了对 jQuery 的依赖。这意味着:

  • 页面加载更轻量,不需要额外加载 jQuery
  • JavaScript 插件可以使用 ES 模块方式导入
  • 如果你的项目仍在使用 jQuery,升级后可以减少一个依赖

CSS 自定义属性

Bootstrap 5 广泛使用 CSS 自定义属性(CSS 变量)来管理主题和样式,使得自定义变得更加灵活:

:root {
    --bs-primary: #0d6efd;
    --bs-body-font-family: system-ui;
    --bs-body-bg: #fff;
}

组件变更

已移除的组件

Bootstrap 4Bootstrap 5 替代方案
.jumbotron.bg-light .p-5 .rounded 组合
.mediaFlexbox 工具类 .d-flex .align-items-start
.list-inline.d-flex .gap-*
.btn-block.d-block .w-100
.card-deck网格系统 .row-cols-*
.form-group.mb-3

命名变化

Bootstrap 4Bootstrap 5
.badge.badge(不再有独立的定位上下文)
.custom-select.form-select
.custom-file原生文件输入 + .form-control
.close.btn-close
.float-left / .float-right.float-start / .float-end
.ml-* / .mr-*.ms-* / .me-*
.pl-* / .pr-*.ps-* / .pe-*
.font-weight-bold.fw-bold
.font-italic.fst-italic

网格系统升级

  • 新增 .col-xxl-* 断点(≥1400px)
  • 不再支持 IE10/IE11,CSS 不再包含 IE 兼容代码
  • .no-gutters 改为 .g-0

表单系统

Bootstrap 5 的表单系统经过全面重写:

  • 所有表单控件使用统一的 .form-control 样式
  • 新增 .form-label 替代 .col-form-label
  • 表单校验样式使用 CSS 伪类 :valid:invalid
  • 移除了自定义表单控件(custom-*),全部使用原生组件

升级建议

  1. 先更新 Bootstrap 4 到最新的 v4.x 版本
  2. 使用 Bootstrap 5 迁移工具 scanner 检查代码
  3. npm install [email protected] 安装新版本
  4. 全局替换已变更的 CSS 类名
  5. 移除 jQuery 相关的代码和依赖
  6. 测试所有组件的显示和交互效果

jQuery 转原生 JS 对比

以下对比展示了从 jQuery 迁移到 Bootstrap 5 原生 JavaScript 的常见模式:

场景jQuery(Bootstrap 4)原生 JS(Bootstrap 5)
初始化 Tooltip $('[data-toggle="tooltip"]').tooltip() new bootstrap.Tooltip(element)
初始化 Modal $('#myModal').modal('show') bootstrap.Modal.getOrCreateInstance(el).show()
关闭 Modal $('#myModal').modal('hide') bootstrap.Modal.getOrCreateInstance(el).hide()
监听事件 $('#myModal').on('shown.bs.modal', fn) el.addEventListener('shown.bs.modal', fn)
获取元素 $('.my-class') document.querySelectorAll('.my-class')
添加/移除类 $(el).addClass('active')
$(el).removeClass('active')
el.classList.add('active')
el.classList.remove('active')
切换类 $(el).toggleClass('active') el.classList.toggle('active')

CSS 变量迁移

Bootstrap 5 大量使用 CSS 自定义属性(CSS 变量),覆盖颜色、间距、字体等核心设计系统:

/* Bootstrap 4 — 使用 Sass 变量覆盖 */
$primary: #007bff;
$body-bg: #f8f9fa;
$font-family-base: 'Segoe UI', sans-serif;

/* Bootstrap 5 — 使用 CSS 变量覆盖(无需重新编译) */
:root {
    --bs-primary: #0d6efd;
    --bs-body-bg: #f8f9fa;
    --bs-body-font-family: 'Segoe UI', system-ui, sans-serif;
    --bs-border-radius: 0.5rem;
    --bs-link-color: #0d6efd;
    --bs-link-hover-color: #0a58ca;
}

Sass 变量仍然可以用于自定义编译,但 CSS 变量方式更方便在运行时动态修改主题:

/* 通过 CSS 变量动态切换主题 */
.dark-theme {
    --bs-body-bg: #212529;
    --bs-body-color: #dee2e6;
    --bs-primary: #6ea8fe;
}

/* 在 JS 中动态更新 */
document.documentElement.style.setProperty('--bs-primary', '#ff6b6b');

组件变更详解

Navbar 变化

特性Bootstrap 4Bootstrap 5
导航条收缩断点navbar-expand-lgnavbar-expand-lg(不变)
导航内联表单form-inline.d-flex
导航项激活.active(无 a 标签包含).active 必须在 <a>

表单控件命名变化

Bootstrap 4Bootstrap 5
.form-control.form-control(保持一致)
.form-control-file.form-control
.form-control-range.form-range
.custom-control.form-check
.custom-select.form-select
.custom-switch.form-check form-switch

常见迁移问题

Bootstrap 5 不再内置 Glyphicons 图标。需要单独引入图标库,推荐使用 bootstrap-iconsnpm install bootstrap-icons),或使用 Font Awesome、Material Icons 等第三方图标库。

确保 HTML 结构中 data-bs-toggle="dropdown" 替代了旧的 data-toggle="dropdown"。Bootstrap 5 要求所有 data 属性加入 -bs- 前缀,注意检查所有 data 属性是否已更新。

Bootstrap 5 本身不再需要 jQuery,但如果项目中使用了依赖 jQuery 的第三方插件,可以保留 jQuery 并单独加载。建议逐步替换这些第三方插件为原生 JS 版本,最终完全移除 jQuery。

本网站使用 Cookie 来提升您的浏览体验。隐私政策