bootstrap 5.3 升级需重点处理 data-bs- 属性替换、css grid 手动启用、深色模式改用 data-bs-theme 属性及 sass 变量声明顺序调整,否则将静默失效。

Bootstrap 5.3 并未破坏 CSS 兼容性,但部分行为变化会直接影响旧代码表现——尤其是 data-bs- 属性、CSS Grid 默认禁用、深色模式启用方式和变量覆盖逻辑。直接升级后样式“看起来没变”,但模态框不弹、网格错位、主题失效,往往是这些隐性变更导致的。
data-bs-toggle 和 data-bs-dismiss 必须替换
这是最常卡住升级的第一步。Bootstrap 5.3 仍沿用 5.0 起的命名空间规范,data-toggle 和 data-dismiss 已彻底无效,且不会报 JS 错误,只是静默失效。
- 所有触发 Modal、Dropdown、Toast 的按钮必须将
data-toggle="modal"改为data-bs-toggle="modal" -
data-target="#id"也需同步改为data-bs-target="#id" - 关闭按钮若用
×手动写,必须确保包裹在data-bs-dismiss="modal"的<button></button>内,否则点击无响应 - 旧项目中通过 jQuery 绑定的
$('[data-toggle="modal"]').modal()类调用,必须重写为bootstrap.Modal.getOrCreateInstance(...)或改用 data 属性驱动
CSS Grid 不会自动生效,.g-col-* 需主动启用
Bootstrap 5.2 引入的 .g-col-* 在 5.3 中依然默认关闭。如果你在 HTML 里写了 <div class="grid"><div class="g-col-4">...</div></div> 却发现每列占满整行,不是语法错,是 Grid 功能根本没开。
- 必须在 Sass 编译前设置
$enable-cssgrid: true,且该声明要放在@import "bootstrap/scss/functions"之后、@import "bootstrap/scss/bootstrap"之前 - CDN 上的
bootstrap.min.css(包括 BootCDN、jsDelivr)均未启用 Grid,仅靠 link 引入无法使用.g-col-* - 启用后,
.grid容器才真正变成display: grid,.g-col-*才按分数计算列宽;否则它们只是普通类,无布局作用 - 注意:启用 Grid 后,
.row和.col仍可用,二者互不干扰,但不要混用同一容器
深色模式从 class 切换变为 data-bs-theme 属性控制
Bootstrap 5.3 彻底移除了 .dark、.navbar-dark 等旧类名。如果页面还保留 或 <nav class="navbar navbar-dark"></nav>,深色样式将完全不生效。
- 全局启用:在
标签加data-bs-theme="dark",如 - 局部启用:对任意元素添加该属性,例如
<div class="card" data-bs-theme="dark"> <li>动态切换需用 JS 修改属性值,并触发 <code>theme.change事件(官方未暴露 API,建议用document.documentElement.setAttribute('data-bs-theme', 'dark')+ 手动重绘关键区域) - 自定义配色必须修改
scss/_variables-dark.scss中的$body-bg、$body-color等变量,而非覆盖旧 class - 错误写法:
@import "bootstrap/scss/bootstrap"; $enable-cssgrid: true;→ 完全被忽略 - 正确顺序示例:
@import "bootstrap/scss/functions"; $enable-cssgrid: true; @import "bootstrap/scss/variables"; @import "bootstrap/scss/bootstrap"; - 所有开关类变量(
$enable-grid-classes、$enable-flex-utilities、$enable-reduced-motion)都遵循此规则 - 如果你用的是预编译 CSS(非 Sass),这些变量无法生效,只能接受默认配置
变量覆盖顺序变了,$enable-* 必须提前声明
Bootstrap 5.3 的 Sass 构建流程更严格:变量必须在 @import "bootstrap/scss/variables" 之前或之后立即覆盖,晚于 @import "bootstrap/scss/mixins" 就无效。
真正麻烦的不是改几行代码,而是那些没报错、没警告、只悄悄失效的行为——比如模态框点不动、Grid 列宽算错、深色模式只在部分组件生效。这些都得靠 DevTools 逐层检查 computed styles 和 HTML 属性,而不是看 console 有没有红字。











