升级
Bootstrap 6 是一个重大版本,包含许多重大变更,以现代化我们的代码库,采用更新的构建工具,并改善自定义功能。继续阅读以获取从 v5 迁移到 v6 的指南,以及完整的新功能更新日志。
使用 AI 编程助手进行迁移? Bootstrap 提供了一个 v5 到 v6 迁移功能 (skills/bootstrap-v5-v6-migration),可以引导编程助手逐步完成升级阶段。Bootstrap 4 项目应从 v4 到 v6 迁移功能 开始。将你的代理指向相应的 SKILL.md 文件,然后根据本指南检查其更改。
升级你的 Bootstrap 依赖项:
{ "dependencies": { "bootstrap": "^6.0.0" } }替换
@popperjs/core与@floating-ui/dom. 如果你使用日期选择器,请添加vanilla-calendar-pro. 打包的 JavaScript 包含两个同级依赖。独立的 JavaScript 需要已安装的包或导入映射。如果使用所有的 Bootstrap Sass 文件,请在你的 Sass 中包含它
@use:@use "bootstrap/scss/bootstrap";通过这个,你就可以轻松地覆盖 Bootstrap 的 Sass 变量和映射:
@use "bootstrap/scss/bootstrap" with ( $spacer: 1rem, $enable-reduced-motion: true, );如果只使用 Bootstrap 的 Sass 文件的某些部分,你可以使用
@use单独导入它们。请注意,我们的 Sass 文件结构已经更改,你可能需要相应地调整导入。@use "bootstrap/scss/forms";根据更新日志和文档中的更新修改 HTML 和 CSS。
重新编译你的 Sass 以查看更改。
请先检查你的浏览器支持情况。 Bootstrap 6 大幅提高了最低浏览器版本要求:Chrome 和 Edge 为 130,Firefox 为 132,macOS 和 iOS 上的 Safari 为 18。Bootstrap 5 支持的版本为 Chrome 和 Firefox 60,以及 Safari 12。我们基于 light-dark()、:has()、容器查询、content-visibility 以及原生 <dialog> 元素构建,并且 v6 不提供低版本的回退、前缀或 Polyfill。在旧版浏览器中页面将无法正确渲染。升级前请先检查你的分析数据,并参阅 浏览器 & 设备 页面以了解完整政策及每个版本更改的原因。
更新日志
CSS
- 澄清并简化的 CSS-Sass 设置。 了解更多关于我们的信息 方法 关于我们如何将 Sass 和 CSS 一起使用,以构建和定制适合你特定需求的项目,特别是我们如何在 Sass map中使用 CSS 变量作为我们的第一层定制层。
- 已实现的 CSS 层 在
_root.scss并将它们应用到我们所有的Sass文件中。- 图层已设置
_root.scss然后在不同的 Sass 部分中使用。 - 不幸的是,我们不能打包
@use或@forward中的声明@layer——Sass 期望这些始终处于顶层。此外,虽然 CSS 允许@import "file.css" layer(name)Sass 也不支持那种。
- 图层已设置
- 全新简化的颜色模式和主题设置。
- 已移除
_maps.scss - 已移除
_variables-dark.scss - 已添加
_colors.scss, 将颜色拆分到它们自己的文件中 - 已移除
_variables.scss,将所有变量合并到_config.scss - 已添加
_theme.scss我们设置所有全局主题以应用颜色的地方
- 已移除
- 更新了 lg、xl 和 2xl 的断点和容器。
- 增加了
lg断点从 992px 到 1024px;其容器保持在 960px 不变。 - 增加了
xl断点从1200像素到1280像素,其容器从1140像素到1200像素。 - 已重命名
xxl到2xl为了更好地适应额外的自定义断点进行缩放 - 增加了
2xl断点从1400像素到1536像素,其容器从1320像素到1440像素。
- 增加了
- 采用了现代 CSS 颜色函数。 所有 Sass 颜色变量现在使用
oklch()符号(例如,$blue: oklch(60% 0.24 240)) 并且生成了色调/明暗比例color-mix(in oklch, ...)默认情况下。使用以下方式配置色彩空间$color-mix-space. 第五版$*-rgbCSS 自定义属性和rgba()模式已被移除。这需要浏览器支持color-mix()和oklch(). - 带有新主题令牌系统
.theme-*课程。 每个组件的颜色变体类(例如.alert-primary,.badge.bg-primary,.btn-primary,.table-primary) 被一个可组合对象替换.theme-{name}图案。添加.theme-primary到组件集合--theme-bg,--theme-fg,--theme-border,--theme-contrast以及组件读取的其他语义 CSS 自定义属性。这适用于按钮、徽章、警报、表格、卡片、折叠面板等。使用.theme-reset在嵌套子树上返回到组件默认值。 - 根代币现在开始发射
:root, :host. 自定义属性存在于两个选择器上,因此采用 Bootstrap 样式表的 shadow root 可以读取这些令牌。如果你覆盖:root只有 Web 组件不会看到这些覆盖——请在...上重复它们:host,或者使用一个同时覆盖两者的选择器。 - 响应式和状态类现在使用前缀,而不是中缀或后缀。 类名遵循 Tailwind 风格
prefix:class模式(例如,md:d-none而不是d-md-none,hover:opacity-50而不是opacity-50-hover). 在 HTML 中,使用未转义的冒号:class="md:d-none"这适用于工具类、网络、拟州变体以及所有响应式组件。
| 类别 | 之前(v5) | 之后(v6) |
|---|---|---|
| 工具类 | .d-md-none, .p-lg-3 | .md:d-none, .lg:p-3 |
| 州变体 | .opacity-50-hover | .hover:opacity-50 |
| 网格列 | .col-md-6 | .md:col-6 |
| 行列 | .row-cols-md-3 | .md:row-cols-3 |
| 偏移 | .offset-md-2 | .md:offset-2 |
| 槽宽 | .g-md-3, .gx-md-3 | .md:g-3, .md:gx-3 |
| CSS 网格 | .g-col-md-4 | .md:g-col-4 |
| 容器 | .container-sm | .sm:container |
| 导航栏 | .navbar-expand-md | .md:navbar-expand |
| 抽屉 | .offcanvas-md | .md:drawer |
| 表格 | .table-responsive-md | .md:table-responsive |
| 列表组 | .list-group-horizontal-md | .md:list-group-horizontal |
| 粘的 | .sticky-md-top | .md:sticky-top |
| 堆栈 | .vstack-md | .md:vstack |
| 对话 | .dialog-fullscreen-sm-down | .sm-down:dialog-fullscreen |
| 打印 | .d-print-none | .print:d-none |
前缀语法不会识别查询类型。工具类、网格列、容器、抽屉和响应式表格使用视口查询。堆栈、CSS 网格列、导航栏扩展、水平列表组、卡片组和堆叠表格使用容器查询。添加每个组件文档所需的查询容器。
- 新的运动工具。 已添加
.transition-none和.animation-none关闭单个元素上的组件过渡或关键帧动画,以及装饰性动画.animation-shake和.animation-pop助手。请参阅 运动工具 页面。装饰性动画在以下情况下会自我禁用prefers-reduced-motion. - 复选框、单选按钮和开关现在会对它们的标记进行动画处理。 复选框勾选、单选圆点和开关滑块通过轻微的超调缓入,由共享驱动
--control-transition-duration和--control-transition-timing令牌,使所有三个同步移动。对于喜欢减少动画的用户,将跳过此动作,并且不需要更改任何标记。 - 拆分淡入淡出和折叠的过渡标记。 v5 的单曲
$transition-fade和$transition-collapse值现在是 CSS 自定义属性对——--transition-fade-duration/--transition-fade-timing和--transition-collapse-duration/--transition-collapse-timing——因此持续时间和缓动可以独立调整。覆盖组件(对话框、抽屉、菜单)也共享一个新的--transition-timing-overlay逐步令牌。将任何旧值的覆盖更新为新的令牌名称。 - 新
.hover-lift助手 在悬停和键盘聚焦时,通过变换和更深的阴影提升元素,可通过以下方式自定义--hover-lift-*支持令牌和减少动画。见 悬浮升降 助手 - 已移除组合
--*-transition代币。 按钮、导航链接、折叠面板、表单控件、范围滑块和浮动标签各自降低了它们的组合--*-transition值。每一个现在声明一个--*-transition-property/--*-transition-duration/--*-transition-timing三重奏。旧的令牌将整个属性列表和一个持续时间打包到transition速记,其中持续时间仅绑定到最后一个属性——所以按钮的color,background-color,和border-color从未真正动画化。这些组件现在设置transition-property,transition-duration,和transition-timing-function它们自身,会在每个列出的属性上重复一次持续时间和缓动。替换重写的--bs-btn-transition以及配套的朋友-duration和-timing代币。 - 过渡现在通过选择加入
prefers-reduced-motion: no-preference. 我们的过渡混入以前用于触发一次过渡,然后在其中关闭它prefers-reduced-motion: reduce查询。他们现在只在内部发出它no-preference查询。因此,不支持该媒体特性的浏览器根本不会有任何过渡。强制的规则transition: none保持在查询之外,因此它们仍然可以到达每个浏览器。 - 现在每个动画组件都暴露了一个
-property令牌。 对话框、抽屉、菜单和消息提示加入了按钮和折叠面板原本已有的三件组合,因此--bs-dialog-transition-property,--bs-drawer-transition-property,--bs-menu-transition-property,和--bs-toast-transition-property在不重写整个动画的情况下为动画添加属性transition声明。折叠面板面板也获得了它自己的--bs-accordion-panel-transition-*trio,它替换了硬编码的.2s看新的 过渡 完整模型的页面。
Sass
- 停止支持 Node Sass,包括不再使用它测试我们的任何源 CSS。
- 在此过程中重新整理了几个 Sass 文件。
- 已移除
add()和subtract()功能。使用calc()取而代之 - 已移除
create-css-vars()mixin(未使用)。 - 已重命名
breakpoint-infix()到breakpoint-prefix(). 该函数现在返回一个前缀字符串(例如,"md\:") 而不是中缀 (例如,"-md")。那loop-breakpoints-up和loop-breakpoints-down混入现在暴露$prefix而不是$infix更新调用这些函数或混入的任何自定义 Sass。 - CSS 变量前缀现在由 PostCSS 处理。 这
$prefixSass 变量已被移除。CSS 自定义属性现在在 Sass 源码中无需前缀编写,并通过自动添加前缀postcss-prefix-custom-properties在构建过程中。要自定义前缀,请更新你的 PostCSS 配置,而不是 Sass。 - 已移除 RFS(响应式字体尺寸)。 这
scss/vendor/_rfs.scss文件和所有 RFS 混入已被移除。排版现在使用固定值rem价值观和clamp()用于响应式尺寸。如果你依赖 RFS 来自动调整字体大小,你将需要实现自己的响应式排版或使用clamp()直接地。 - 已重命名 Sass 文件以保持一致性。
_placeholders.scss现在是_placeholder.scss和_spinners.scss现在是_spinner.scss. 更新任何个人@use导入这些文件。 - 带有标准化焦点样式
focus-ring混入 所有组件特定*-focus-box-shadowSass 变量(例如,$btn-focus-box-shadow,$input-focus-box-shadow,$accordion-button-focus-box-shadow) 已被移除。焦点样式现在由共享处理@mixin focus-ring()使用--focus-ring,--focus-ring-width,--focus-ring-offset,和--focus-ring-colorCSS 自定义属性。通过覆盖这些标记来自定义焦点样式_root.scss而不是单独的 Sass 变量。 - 已重命名
$grid-breakpoints到$breakpoints. - 主题和配置映射现在通过合并
defaults().$theme-colors,$theme-bgs,$theme-fgs,$theme-borders,$badge-variants,而其他全球地图接受部分@use ... with ()覆盖。v5 需要完全替换地图。设置一个键为null丢弃它。嵌套的主题颜色映射会在一层深度合并——传递整个子映射以更改一个角色。参见 萨斯. - 已移除
$enable-dark-mode. 深色模式支持始终被编译;可在运行时通过控制它data-bs-theme(或者color-mode()混入)而不是切换 Sass 标志。 - 已移除
$enable-caret以及插入点混入。 当菜单移至浮动界面时,菜单切换失去了自动箭头,因此该标志没有效果。caret(),caret-down(),caret-up(),caret-end(),和caret-start()混入物scss/mixins/_caret.scss文件,以及$caret-width,$caret-vertical-align,和$caret-spacing变量也消失了。如果你想要一个小箭头,请在切换标记中添加一个图标。 - 删除所有已弃用的 Sass 变量和值:
- 已移除
$nested-kbd-font-weight,不替换。 - 已移除
muted,black-50,和white-50来自文本颜色工具类映射 - 已移除轮播深色 Sass 变量 (
$carousel-dark-indicator-active-bg,$carousel-dark-control-icon-filter) 和.carousel-dark类——它们不会被重新赋值。深色旋转木马现在使用data-bs-theme="dark"(请参见下方的旋转木马更改)。旋转木马的标题也被完全移除了。 - 已移除
$btn-close-white-filter关闭按钮不再使用过滤器——它的图标是用 CSS 遮罩绘制的currentcolor,所以它会自动适应深色背景。 - 已全部移除
$border-radius-*变量 (-xs,-sm默认,-lg,-xl,-xxl,-pill)支持数字的$radii地图和--radius-*令牌—参见 边框半径令牌 在工具类下。 - 已移除
$text-muted用于次要颜色。 - 已移除
$hr-bg-color为了$hr-border-color和$hr-height为$hr-border-width. - 已重命名
$zindex-dropdown到$zindex-menu. - 已移除未使用的
$dropdown-header-padding为了-x/-y拆分变量。 - 已移除未使用的
$accordion-button-focus-border-color. - 已移除未使用的
$tooltip-arrow-color. - 已移除未使用的
$popover-arrow-color和$popover-arrow-outer-color - 已移除未使用的
$alert-bg-scale,$alert-border-scale,和$alert-color-scale(被主题标记替换) - 已移除未使用的
$list-group-item-bg-scale和$list-group-item-color-scale(被主题标记替换)
- 已移除
- 已删除表单验证的 Sass 变量和文件。
- 已移除
scss/forms/_form-variables.scss. 反馈/提示的 Sass 变量和验证图标 SVG 数据 URI 已消失。验证样式现在使用来自主题的 CSS 自定义属性。 - 已重命名
scss/mixins/_forms.scss到scss/mixins/_form-validation.scss. 仅包含form-validation-state-selector混入 - 已移除
$enable-validation-icons从scss/_config.scss. - 已替换
$form-validation-states与$validation-states(州名称到主题键映射)。
- 已移除
JavaScript
show(),hide(),toggle(),和close()现在返回一个承诺。 当过渡结束时,承诺会解决,所以你可以await这些方法而不是等待shown.bs.*或hidden.bs.*事件。在 v5 中他们回来了undefined事件仍然会触发,所以现有代码仍然可以运行。这涵盖了提示(Alert)、折叠(Collapse)、组合框(Combobox)、日期选择器(Datepicker)、对话框(Dialog)、抽屉(Drawer)、菜单(Menu)、弹出框(Popover)、标签页(Tab)、消息提示(Toast)和工具提示(Tooltip)。轮播(Carousel)的next(),prev(),和to()保持不变。之前(v5):
myCollapseEl.addEventListener('shown.bs.collapse', () => { // Runs once the collapsible area is expanded }) collapse.show()在(v6)之后:
await collapse.show() // The collapsible area is now expanded该承诺会在没有值的情况下解决,即使调用什么也不做时也会解决——例如当组件已经打开或监听器阻止时
show.bs.*事件。如果你需要知道组件是否发生了变化,请自己检查组件状态。Bootstrap 的 JavaScript 现在仅支持 ESM。 我们不再运输 UMD 捆绑包。所有分发文件 (
bootstrap.js,bootstrap.bundle.js,以及它们的压缩版本)是原生 ES 模块。加载模型已更改,并且多个组件 API 已如下面所列发生更改。内容分发网络
<script>必须添加标签type="module":<script type="module" src="bootstrap.bundle.min.js"></script>在 v5 中,UMD 包会自动创建一个
window.bootstrap全局的。ES 模块不会这样做,所以不再有一个bootstrap全局对象。如果你通过全局命名空间调用插件 API,你必须更新为显式导入:之前(v5):
const tooltip = bootstrap.Tooltip.getOrCreateInstance(el)在(v6)之后:
import { Tooltip } from './bootstrap.bundle.min.js' const tooltip = Tooltip.getOrCreateInstance(el)数据 API 初始化仍然会自动运行。 添加
type="module"到 script 标签。你还必须按照本指南应用组件和数据属性的重命名。对于现代基于 ESM 的打包工具(Vite、Webpack 5、Parcel 2、Rollup 等),
import { Tooltip } from 'bootstrap'仍然有效并支持 tree shaking。安装@floating-ui/dom用于定位组件和vanilla-calendar-pro用于日期选择器。使用 CommonJS 的项目require()调用必须更改为 ESMimport语法。这
bootstrap.bundle.js文件包括 Floating UI 和 Vanilla Calendar Pro。独立的bootstrap.js文件将这些对等依赖保持为外部,因此直接在浏览器中加载需要使用导入映射。
Bootstrap 的 JavaScript 源代码现在是 TypeScript。 这
js/src文件使用.ts扩展。该包内置类型声明随包一同发布js/dist/*.d.ts,所以你不再需要@types/bootstrap深.js导入仍然有效:bootstrap/js/src/alert.js现在解析为编译后的文件在js/dist. 要导入原始 TypeScript 源代码,请使用bootstrap/js/src/alert.ts.我们现在使用 Rolldown 构建,而不是使用 Rollup 和 Babel。 这只会影响如果你从源码构建 Bootstrap 的情况。Rolldown 会去掉 TypeScript 类型并降级语法,所以 Babel 就不需要了,连同
.babelrc.mjs和那个@rollup/plugin-*包。已发布的文件位于dist/和js/dist/格式保持不变。如果你在自己的项目中打包 Bootstrap,继续使用你喜欢的打包工具——Rollup 仍然是一个不错的选择,而且import { Tooltip } from 'bootstrap'工作原理相同。参见 贡献指南 详情请参阅。当 Tab 的元素没有 tab-panel 祖先时,Tab 会抛出异常。 在 v5 中,构造函数会提前返回,并给你一个无效实例,这隐藏了标记错误。将你的制表符触发器包裹在
.list-group,.nav,或者[role="tablist"]容器,作为 导航文档 展示。移除了单独的
bootstrap.esm.js和bootstrap.esm.min.js文件 —bootstrap.js现在是 ESM 入口点。已移除
js/index.umd.js入口点。已移除 jQuery 支持和
js-test-jquery测试目标。移除了内部
util/backdrop,util/focustrap,和util/scrollbar助手。 现在它们已经过时了,因为 Dialog 和 Drawer 基于原生构建<dialog>元素——浏览器提供了背景(::backdrop)、聚焦陷阱,以及惰性顶层,并且主体滚动锁定在 CSS 中处理(:root.dialog-open与scrollbar-gutter: stable). 如果你直接从这些模块中导入了任何内容bootstrap/js/src/util/,他们走了。将下拉组件替换为菜单。 全部
.dropdown-*现在是课程时间.menu-*课程,以及data-bs-toggle="dropdown"现在是data-bs-toggle="menu". 参见 菜单文档 详情请参阅。菜单
shown.bs.menu和hidden.bs.menu现在在 CSS 过渡完成后触发,而不是在…时同步show()/hide()被称为——匹配的对话框和抽屉。菜单在关闭过渡过程中也会继续保持在 DOM 中的定位,而不是立即被销毁。将任何假定旧的同步时序(或菜单立即被移除)的逻辑移开hide()返回)到shown/hidden事件处理器。- 已重命名的 CSS 类:
.dropdown-menu到.menu,.dropdown-item到.menu-item,.dropdown-divider到.menu-divider,.dropdown-header到.menu-header,.dropdown-submenu到.submenu. - 已移除方向包裹器:
.dropstart,.dropend,和.dropup. 使用data-bs-placement改为控制方向(例如,.dropup变成data-bs-placement="top"). - 已移除
.dropdown-toggle类——菜单切换不再需要切换类。 - 已移除
.dropdown包装器——不需要包装器元素。切换和.menu是直系兄弟姐妹。 - 来自简化标记
<ul><li><a class="dropdown-item">到一套公寓<div class="menu"><a class="menu-item">结构。 - 已移除
.dropdown-toggle-split— 分割菜单的按钮组边框半径现在通过自动方式处理:has(+ .menu). - 已将 JavaScript 导出重命名为
Dropdown到Menu— 更新导入到import { Menu } from 'bootstrap'. - 已重命名的事件:
show.bs.dropdown到show.bs.menu,shown.bs.dropdown到shown.bs.menu,hide.bs.dropdown到hide.bs.menu,hidden.bs.dropdown到hidden.bs.menu. - 已将数据键重命名为
bs.dropdown到bs.menu(影响Menu.getInstance()和Menu.getOrCreateInstance()).
- 已重命名的 CSS 类:
添加了新的下拉列表组件。 一个基于菜单构建的可搜索选择组件,支持单选和多选。请参阅 下拉框文档.
已替换 Popper.js (
@popperjs/core) 与 Floating UI (@floating-ui/dom) 用于菜单、工具提示和弹出层的位置。popperConfigTooltip、Popover 和菜单(原下拉菜单)上的选项已被重命名为floatingConfig请相应更新任何自定义定位配置。已添加 Vanilla Calendar Pro (
vanilla-calendar-pro) 作为新日期选择器组件的同级依赖。弹出式日期选择器在外部交互时关闭,点击 Escape,或者当焦点离开输入框和日历时。已移除
jspm来自配置package.json.已添加
"sideEffects"元数据到package.json在启用打包器中的树摇优化的同时,保留 Bootstrap 插件在顶层注册的 Data API 事件监听器。已添加
"exports"映射到package.json用于对源文件、分发文件和 Sass 文件的显式子路径访问。重写了 ScrollSpy,使其具有确定性并
IntersectionObserver-本地的 检测现在完全由激活线驱动(没有滚动位置轮询),因此活动部分始终是你正在阅读的部分,并且在容器的顶部和底部行为稳定。- 已移除长期弃用的
offset和method选项(自 v5.1.3 起已弃用)。它们不再被解析。 - 添加了
topMargin选项(默认12%) 将激活线定位为友好%或者px从滚动根部顶部的值(例如96px坐在粘性导航栏下面)。 rootMargin现在是一个优先于…的高级覆盖topMargin并直接传递给观察者;其默认值是null(激活线来源于topMargin).- 更改了默认设置
threshold从[0.1, 0.5, 1]到[0]. - 与
smoothScroll启用后,现在点击链接会恢复 URL 哈希(通过history.replaceState)并在滚动稳定后将焦点移到目标部分,从而改善键盘和辅助技术的导航。 - 目标
id与…解决getElementById因此,包含点、冒号、斜杠或百分号编码字符的ID现在可以在无需手动转义的情况下使用。
- 已移除长期弃用的
组件
将 Modal 组件替换为 Dialog。 对话建立在本地基础上
<dialog>元素,使用showModal()/show()/close()浏览器 API。标记、类、数据属性、事件、CSS 变量以及 JavaScript API 都已发生变化:- 标记:The
.modal>.modal-dialog>.modal-content包装器结构已被单个取代<dialog class="dialog">元素。正文部分使用.dialog-header,.dialog-body,和.dialog-footer直接在里面<dialog>. - CSS 类:
.modal→.dialog,.modal-header→.dialog-header,.modal-body→.dialog-body,.modal-footer→.dialog-footer,.modal-title→.dialog-title。那.modal-dialog和.modal-content包装类已被完全移除。 - 尺码:
.modal-sm→.dialog-sm,.modal-lg→.dialog-lg,.modal-xl→.dialog-xl,.modal-fullscreen→.dialog-fullscreen. - 数据属性:
data-bs-toggle="modal"→data-bs-toggle="dialog",data-bs-dismiss="modal"→data-bs-dismiss="dialog". - JavaScript:
Modal→Dialog— 更新导入到import { Dialog } from 'bootstrap'. - 事件:
show.bs.modal→show.bs.dialog,shown.bs.modal→shown.bs.dialog,hide.bs.modal→hide.bs.dialog,hidden.bs.modal→hidden.bs.dialog,hidePrevented.bs.modal→hidePrevented.bs.dialog. - 数据密钥:
bs.modal→bs.dialog(影响Dialog.getInstance()和Dialog.getOrCreateInstance()). - CSS 变量:
--modal-*→--dialog-*. - 背景:这个
.modal-backdropDOM 元素和遗留util/backdrop助手消失了——对话使用本地的::backdrop带有伪元素backdrop-filter: blur()支持 - 滚动防护:
.modal-open开<body>→.dialog-open在根上(<html>) 元素,因此它与scrollbar-gutter: stable当对话框打开时,页面不会移动。 - 新变体类别:
.dialog-slide-up,.dialog-slide-down(幻灯片动画),.dialog-instant(无动画),.dialog-static(静态背景反弹),.dialog-nonmodal(非模态定位),.dialog-scrollable. - 非模态支持:设置
modal: false或data-bs-modal="false"用于非对话框。 - 对话切换:在打开的对话框内的触发器可以打开一个新对话框并自动关闭当前对话框。
- 看见这个 对话文档 详情请参阅。
- 标记:The
Offcanvas 已重命名为 Drawer。 所有类名、数据属性、事件、CSS 变量和 JavaScript API 都已被重命名:
- 元素:
<div class="offcanvas">→<dialog class="drawer">. 抽屉需要本地的<dialog>元素。 - CSS 类:
.offcanvas→.drawer,.offcanvas-start→.drawer-start,.offcanvas-header→.drawer-header等等 - 数据属性:
data-bs-toggle="offcanvas"→data-bs-toggle="drawer",data-bs-dismiss="offcanvas"→data-bs-dismiss="drawer" - JavaScript:
Offcanvas→Drawer - 事件:
show.bs.offcanvas→show.bs.drawer,hidePrevented.bs.offcanvas→hidePrevented.bs.drawer等等 - CSS 变量:
--offcanvas-*→--drawer-* - Sass:
$zindex-offcanvas→$zindex-drawer
- 元素:
新
.drawer-sheet变体 适用于无嵌入、无边框圆角和无阴影的贴边面板。滑动以关闭 Drawer 组件在触摸设备上支持手势操作。Drawer 会自动检测其放置位置,并在适当的滑动方向上关闭。
对话框和抽屉共享
DialogBase—— 显示/隐藏/切换的生命周期、键盘处理、背景点击以及静态背景弹跳都整合在一个共享的基类中。Toast 过渡已移至 CSS。 褪色现在使用
@starting-style带有离散的display过渡,因此组件不再切换辅助类来驱动动画:- 已移除
animation选项和data-bs-animation. 添加.toast-instant跳过动画,匹配.dialog-instant和.drawer-instant. - 已移除
.showing类和已弃用的.hide班级。仅.show现在已切换。替换依赖它们的任何 CSS 或测试。 - 消息提示不再得到通用的
.fade课程。过渡仍在延续.toast自身,调整为--toast-transition-duration和--toast-transition-timing. isShown()返回false一……就……hide()被调用,而不是在淡出结束时。
- 已移除
警报、标签、工具提示和弹出框也已迁移到 CSS,因此不需要任何东西
.fade再也不。 每一个都声明它自己的过渡和它自己的--bs-{component}-transition-*代币,就像消息提示已经做的那样。.fade保留为你自己的标记的通用类,它放在哪里都无害,但没有组件依赖它:- 警报会自动消失。
close()添加.hiding在过渡期间,然后移除该元素,所以.fade和.show在标记中不再需要。以前从未有过的警报.fade现在也动画了,这会延迟closed.bs.alert通过过渡。添加.alert-instant保持旧的即时删除。 - 标签面板会自行淡入。 该插件添加
.active和.show在同一帧中而不是对它们进行排序,并且 CSS 从中进行动画@starting-style你离开的面板会立即隐藏,因为两个流入的面板不能交叉淡入淡出。shown.bs.tab现在在传入窗格完成后触发。添加.tab-pane-instant立即交换。 - 工具提示和弹出框从…动画显示
@starting-style. 该插件不再添加.fade到尖端。animation: false添加.tooltip-instant或.popover-instant相反,你也可以将其写入自定义template. - 悬停和聚焦提示会保持在提示上打开。 在 v5 中,当指针离开触发器时,工具提示会立即隐藏。v6 在指针或焦点位于提示本身时保持其打开,因此工具提示内的链接是可以访问的(WCAG 1.4.13). 按下 Escape 或离开触发器和提示即可隐藏它。见 工具提示.
- 警报会自动消失。
占位符加载动画现在更倾向于闪光效果。 使用
.placeholder-wave用于标准加载动画。旧的透明度动画已移至.placeholder-pulse. 这个.placeholder-glow类仍作为兼容别名.placeholder-pulse.Collapse 会原生地动画其尺寸。 插件切换
.show而别无其他。CSS 使用动画来改变大小interpolate-size,就像折叠面板已经做的那样:- 已移除
.collapsing类,以及随之而来的内联height和width用于编写的插件。替换任何依赖其中任何一项的 CSS、测试或选择器。 - 没有浏览器
interpolate-size一次性打开和关闭元素。值得关注的是 Firefox。 .collapse现在始终剪辑动画轴,因此内容不再会溢出盒子。A.collapse-horizontal而是裁剪内联轴。shown.bs.collapse和hidden.bs.collapse现在启动 CSS 过渡,并进行调优--bs-transition-collapse-property,--bs-transition-collapse-duration,和--bs-transition-collapse-timing.- 一个同时针对多个崩塌的触发器
data-bs-parent仍然会一起打开它们。父元素只会关闭触发器未针对的折叠项。
- 已移除
组件 JavaScript 读取计算得出的过渡持续时间。 警报、折叠、标签页、工具提示和弹出框不再寻找一个类来决定是否等待过渡,就像菜单已经做的那样。零持续时间——从
.transition-none,一个-instant类别,减少运动,或$enable-transitions: false—同时解决承诺并触发事件。重新设计的按钮变体。 像 v5 每色类这样的
.btn-primary,.btn-outline-primary,.btn-secondary等等被替换为同一元素上变体类 + 主题类的组合:.btn-primary→class="btn-solid theme-primary".btn-outline-primary→class="btn-outline theme-primary"- 新变体类别:
.btn-solid,.btn-outline,.btn-subtle,.btn-text,加.btn-styled用于渐变/阴影深度和.btn-link用于链接样式的按钮。 - 颜色通过...应用
.theme-*工具类(例如,.theme-primary,.theme-danger,.theme-success) 而不是内置在每个按钮类中。 - 共享尺寸标记:按钮和输入现在共享
--btn-input-*用于一致尺寸的CSS变量。 - 新
.btn-icon用于方形仅图标按钮的类,带有aspect-ratio: 1. - 已添加
xs按钮大小 (.btn-xs).
在本地重建折叠面板
<details>/<summary>. 标记结构已发生根本性变化:- v5:
.accordion-item>.accordion-header>button.accordion-button+.accordion-collapse>.accordion-body,由 Collapse JavaScript 插件控制。 - v6:
<details class="accordion-item">><summary class="accordion-header">+<div class="accordion-body">,使用浏览器的原生展开小部件。基本的打开/关闭行为无需依赖 JavaScript。 - 独占折叠面板组(仅打开一个项目)通过 HTML 处理
name属性开启<details>元素,替换data-bs-parent方法。 - 这
.accordion-button和.accordion-collapse课程已被取消。 - 展开/折叠图标现在使用了一个
.accordion-icon在摘要内的元素(通常是 SVG),替换 CSSbackground-image方法。 - 打开状态样式使用
details[open]而不是由 JavaScript 切换的类。 - 通过主题着色
.theme-*关于……的课程.accordion包装纸。 - 新修饰符:
.accordion-sm用于紧凑的填充和类型,以及.accordion-gap将项目作为独立的圆角卡片分隔开(--accordion-gap).
- v5:
重建了关闭按钮的标记。
.btn-close现在通过 CSS 渲染它的图标mask-image(--btn-close-icon) 带有…色调background-color: currentcolor,所以按钮是自包含的——没有子元素<svg>是必需的。基于滤镜的暗模式方法($btn-close-white-filter) 已被替换为currentcolor继承,以及.btn-close-white类已被移除。在深色主题的界面上,图标现在会自动继承对比颜色。已移除
.alert-dismissible. 可关闭的提醒不再需要.alert-dismissible修饰符类。放置一个.btn-close直接在警报内部——警报的弹性布局会自动定位它。移除任何.alert-dismissible来自你的标记的类。重组卡片。 外边界依然存在
.card. 页眉和页脚仅保留分隔线边框。使用.list-group-flush在卡片里面——.card-list已消失。已添加--card-box-shadow和--card-body-gap代币。新变体类别:.card-translucent(磨砂玻璃效果)和.card-subtle(以细微背景为主题)。水平卡使用了新的.card-row类。已移除.card-link班级.card-body现在是一个可选的弹性列,它会移除直接子元素的块级外边距并使用--card-body-gap用于间距。添加.flex-row对于一个水平的身体。.card-title和.card-text仍作为项目钩子可用,但不再添加样式;.card-subtitle仍然会减小字幕上方的间距。卡片组现在使用容器查询。
.card-group切换到其附加的、等宽的行布局,并带有@container使用查询而不是视口@media查询,因此它响应的是父查询容器的宽度,而不是视口。将卡片组包装在查询容器中——例如添加.contains-inline工具类对于父元素——否则卡片将保持堆叠状态。列表组水平变体现在使用容器查询。 这
.*:list-group-horizontal类在垂直和水平布局之间切换@container查询而不是视口@media查询,响应父查询容器而不是视口。将列表组包装在查询容器中(例如.contains-inline) 以使响应式变体生效。重新设计的徽章变体。 替换 v5
.bg-primary带有实用模式的.theme-*徽章上的等级。例如,class="badge bg-primary"变成class="badge theme-primary"用于默认的实心样式。添加.badge-subtle或.badge-outline对于其他变体。为分页添加了主题变体支持。 添加一个
.theme-{color}类到.pagination(e.g.,.pagination.theme-primary) 使用语义主题颜色为链接、悬停、聚焦和活动页面项目着色,以匹配警报和折叠面板已经使用的模式。已更新面包屑标记。 面包屑现在使用
.breadcrumb-link作为具有内边距、最小高度、悬停背景和明确性的交互元素.breadcrumb-divider元素作为项目之间的分隔符。一个空的.breadcrumb-divider通过 CSS 渲染默认的箭头mask-image(--breadcrumb-divider-icon) 带有…色调background-color: currentcolor; 在其中添加你自己的 SVG、文本或标记以覆盖。这将替换 v5--bs-breadcrumb-divider关于的内容字符串.breadcrumb-item::before伪元素。默认的底部外边距消失了(v5 使用了$spacer/1rem如果你仍然希望在轨迹下方留有空隙,请添加一个间隔工具类。导航栏响应式折叠现在使用抽屉,而不是折叠组件。 v5 可折叠导航栏——
.navbar-toggler切换一个.collapse.navbar-collapse通过 Collapse 插件的区域——已被替换为 抽屉在窄视口上,导航滑入显示为<dialog class="drawer">; 从你的.{breakpoint}:navbar-expand断点向上它像以前一样以内联形式显示。有三件事发生变化:切换器针对一个抽屉(data-bs-toggle="drawer") 而不是折叠;可折叠区域变成了一个<dialog class="drawer">与.drawer-header/.drawer-body; 和.navbar-expand-{bp}中缀变成了.{bp}:navbar-expand前缀。v5.navbar-light/.navbar-darkcolor-scheme 类也已被移除——可以使用背景工具来设置表面,例如.bg-1并让 颜色模式 处理明亮和黑暗。之前(v5):
<nav class="navbar navbar-expand-md navbar-light bg-light"> <div class="container-fluid"> <a class="navbar-brand" href="#">Navbar</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="#">Home</a></li> <li class="nav-item"><a class="nav-link" href="#">Link</a></li> </ul> </div> </div> </nav>在(v6)之后:
<nav class="navbar md:navbar-expand bg-1"> <div class="container-fluid"> <a class="navbar-brand" href="#">Navbar</a> <button class="btn-icon navbar-toggler" type="button" data-bs-toggle="drawer" data-bs-target="#navbarDrawer" aria-controls="navbarDrawer" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon" aria-hidden="true"></span> </button> <dialog class="drawer drawer-end" tabindex="-1" id="navbarDrawer" aria-labelledby="navbarDrawerLabel"> <div class="drawer-header"> <h5 class="drawer-title" id="navbarDrawerLabel">Menu</h5> <button type="button" class="btn-close" data-bs-dismiss="drawer" aria-label="关闭"></button> </div> <div class="drawer-body"> <ul class="nav navbar-nav me-auto"> <li class="nav-item"><a class="nav-link active" aria-current="page" href="#">Home</a></li> <li class="nav-item"><a class="nav-link" href="#">Link</a></li> </ul> </div> </dialog> </div> </nav>折叠触发器现在使用
aria-expanded作为状态信号。 Bootstrap v6 不再添加或移除一个.collapsed关于折叠触发元素的类。如果你使用样式或查询触发器状态.collapsed,将那些选择器迁移到[aria-expanded="false"]以及打开状态选择器到[aria-expanded="true"].已移除折叠
toggle选项。 构造函数现在保持你的标记声明的状态,而不是切换它。丢弃toggle: false从你的配置来看,这就是你已经得到的行为。如果你依赖旧的toggle: true默认在初始化时更改状态,请改为调用匹配的方法。// v5 new bootstrap.Collapse(el) // opened a closed element new bootstrap.Collapse(el, { toggle: false }) // v6 new bootstrap.Collapse(el).show() new bootstrap.Collapse(el)现在取消触发器会找到响应式抽屉。
data-bs-dismiss="drawer"解析带有断点前缀的抽屉,例如.lg:drawer,因此响应式抽屉内的关闭按钮不再需要data-bs-target. 已存在data-bs-target属性继续工作。切换按钮获得默认值
aria-pressed. 一个切换按钮需要aria-pressed以便辅助技术将其宣布为开关,因此 Bootstrap 现在将该属性添加到每一个[data-bs-toggle="button"]缺少它在DOMContentLoaded,阅读.active选择该值。写aria-pressed="false"在你的标记中,以便在我们的 JavaScript 运行之前状态是正确的。导航栏不再计算高度。 v5 衍生
$navbar-brand-height和$navbar-brand-padding-y从导航链接的字体大小、行高和内边距来看,使品牌与链接匹配。v6 取消了这种计算。.navbar是一个将其子元素居中的弹性容器,因此填充和内容决定高度。--navbar-brand-padding-y现在是.375rem,这与导航链接块的内边距相匹配,因此品牌和链接保持相同的点击目标。一个新的--navbar-min-height代币给酒吧一个3.5rem地板,所以默认 导航栏 高 56 像素。较高的内容,如徽标,仍会使工具栏超出底部。设置--navbar-padding-y或--navbar-min-height控制杆的高度。导航栏切换图标现在使用了 CSS 遮罩。
.navbar-toggler-icon通过呈现mask-image(--navbar-toggler-icon) 带有…色调background-color: currentcolor而不是嵌入式的background-imageSVG。标记保持为空<span class="navbar-toggler-icon">但图标现在会继承当前文本颜色(包括深色模式),因此不再需要单独的浅色/深色切换 SVG。在 CSS 滚动捕捉上重建了旋转木马。 滑动引擎不再使用
float+translateX类级别的轮换处理或自定义滑动处理器——.carousel-inner现在是一个原生水平滚动捕捉容器,因此滑动、触摸拖动、惯性以及键盘滚动都来自浏览器。标记保持不变(.carousel→.carousel-inner→.carousel-item)以及公共 JavaScript API(next,prev,to,cycle,pause) 加上slide.bs.carousel/slid.bs.carousel事件被保留。- 新功能: 一次显示多个幻灯片,显示相邻幻灯片的“预览”,间隙,居中模式,以及可变宽度幻灯片——所有这些都通过 CSS 自定义属性实现(
--carousel-items,--carousel-items-gap,--carousel-items-peek) 和.carousel-center/.carousel-auto变体。 - 已移除过渡课程
.carousel-item-start,.carousel-item-end,.carousel-item-next,和.carousel-item-prev,加上.carousel.pointer-event助手——浏览器跟踪滚动位置而不是一个.active布局类。(活动幻灯片仍然获得.active用于样式。) .carousel-fade现在是一个叠加不透明度(网格)交叉淡入淡出,通过 CSS 不透明度过渡实现动画--bs-carousel-fade-duration(在减少运动下,它会立即转换)- 已移除
touch选项。 因为.carousel-inner是原生的 scroll-snap 容器,水平触摸拖动是浏览器原生滚动的一部分,不再由 JavaScript 切换。 - 活动幻灯片同步使用一个
IntersectionObserver;因此slid.bs.carousel当新幻灯片进入视图时触发,以及多幻灯片to()跳跃可能会发出中间音slid随着它滚动而发生的事件。
- 新功能: 一次显示多个幻灯片,显示相邻幻灯片的“预览”,间隙,居中模式,以及可变宽度幻灯片——所有这些都通过 CSS 自定义属性实现(
已重命名旋转木马
ride选项到autoplay,并将其变为布尔值。 自动播放现在必须严格选择加入:只有在轮播图被选择加入时才会自动播放autoplay是true(通过设置data-bs-autoplay="true"). 旧的ride选项及其字符串"carousel"值已被删除,其也已被删除ride="true"只开始自动播放的行为 之后 第一次用户互动。data-bs-ride="carousel"→data-bs-autoplay="true"data-bs-ride="true"→data-bs-autoplay="true"(它现在在加载时自动播放,就像任何其他自动播放的旋转木马一样,而不是等待第一次互动)- JavaScript:
new bootstrap.Carousel(el, { ride: 'carousel' })→new bootstrap.Carousel(el, { autoplay: true }) - 自动加载时的自动初始化选择器相应地从
[data-bs-ride="carousel"]到[data-bs-autoplay="true"].
当用户与其互动时,自动播放的轮播现在会停止。 点击控件或指示器、使用键盘导航或滑动会永久停止自动播放,而不是恢复自动播放,从而尊重访问者的意图(WCAG 2.2.2以前,这些互动保持了旋转木马的循环。
新
.carousel-control-play-pause控制 提供一个可被发现且可访问的按钮,用于暂停和恢复自动播放的轮播——这是 WCAG 2.2.2 要求的机制(仅悬停暂停不符合要求)。它通过 CSS 遮罩呈现暂停/播放图标(--carousel-control-pause-icon/--carousel-control-play-icon),交换它的图标并aria-label具有状态,并且还可以在本应静态的轮播上启动自动播放。堆叠现在是默认的轮播布局。
.carousel是一个弹性列,因此前/下一步控制、指示器以及任何自定义内容都位于幻灯片的上方或下方。旧的.carousel-stacked类已被移除——它现在是默认的,因此可以从你的标记中删除它。覆盖控件现在需要
.carousel-overlay修改器。 要将前/后控制、播放/暂停按钮和指示器叠加在幻灯片上(经典的 v5 外观),请添加.carousel-overlay到.carousel元素。没有它,这些元素会按照流动布局。已重命名 control-icon 类
.carousel-control-prev-icon→.carousel-icon-prev和.carousel-control-next-icon→.carousel-icon-next. 图标现在被绘制为background-color: currentcolor,因此它们继承周围的文本颜色(覆盖控件上的白色,内部按钮的颜色.btn-*)。用……来调整它们的大小--bs-carousel-control-icon-width.已移除
.carousel-caption以及它的--carousel-caption-*令牌。在你的标记内部撰写幻灯片内容.carousel-item相反,使用工具类或自定义 CSS 来进行样式设置和定位。已替换
wrap带有选项ends. v5'swrap: true | false现在是ends: "loop" | "wrap" | "stop"(默认"loop"). 地图wrap: true到ends: "wrap"(或新的默认值"loop"用于无缝传送效果) 和wrap: false到ends: "stop". 通过设置它data-bs-ends或者那个ends选项。未知值回退到"loop".已移除
.carousel-control-prev/.carousel-control-next按钮类。 绝对的、全高的悬停目标消失了。从一个按钮(例如)组合一个控件.btn-icon) 加data-bs-slide="prev"/data-bs-slide="next"和一个.carousel-icon-prev/.carousel-icon-next字符,置于流程中或内部.carousel-overlay-controls.已移除
.carousel-dark类 使用data-bs-theme="dark"在……上.carousel(通常与…一起.carousel-overlay) 用于反向对比。已移除 v5 轮播代币 不再有相应的:
--carousel-caption-*,--carousel-control-color,--carousel-control-opacity/--carousel-control-hover-opacity,--carousel-control-icon-filter,和--carousel-transition. 指示器、控制和淡出样式现在来源于重新设计--bs-carousel-*列在下面的代币 CSS 变量.
重启
- 已重新定位的标题类(如
.h1) 和一些类型类 (.mark,.small,和.initialism) 从_type.scss这避免了 Sass 模块中的依赖,并且我们通常喜欢避免扩展选择器。 - 分开剩余部分
_type.scss进入_lists.scss和_blockquote.scss. 更新任何个人@use "bootstrap/scss/content/type"进口到content/lists和/或content/blockquote取而代之 - 标题、段落、描述列表,以及
<legend>现在使用 CSS 变量而不是 Sass 变量。 已移除$headings-margin-bottom,$headings-font-family,$headings-font-style,$headings-font-weight,$headings-line-height,$headings-color,$paragraph-margin-bottom,$legend-margin-bottom,$legend-font-size,$legend-font-weight,和$dt-font-weight自定义等效项--heading-*,--paragraph-margin-bottom,和--legend-*在运行时使用 CSS 变量——见 排版. - 已移除
$font-size-base和--font-size-base. 基础正文字体大小现在通过直接设置--body-font-size(默认1rem) 在_root.scss. 之前回退到的任何组件令牌var(--font-size-base)(像折叠面板)现在退回到var(--body-font-size)相反。更新引用任一变量的自定义 Sass 或 CSS 以使用--body-font-size. - 标题和
<dt>字体粗细现在回退到共享的权重标记(font-weight: var(--heading-font-weight, var(--font-weight-medium)),var(--dt-font-weight, var(--font-weight-bold))) 而不是硬编码的值,这样你可以覆盖组件特定的令牌或共享的令牌。 - 已添加
--link-underline-offset到$root-tokens(镜像$link-underline-offset) 用于运行时自定义链接下划线偏移。 - 重新启动和内容间距—
address,列表,dd,blockquote,pre,figure,caption,kbd填充,以及ol/ulpadding-inline-start(现在由新的驱动--list-padding-xtoken)——现在从中导出--spacer-*使用可伸缩而不是硬编码rem值。视觉输出保持不变。 - 已移除
::-moz-focus-inner样式,因为伪选择器在 Firefox 中已被弃用。 - 已移除
text-transform: none从button和select元素,因为 Firefox 不再错误地继承 text-transform。 - 已添加
accent-color: var(--primary-base)开:root,它将主要主题颜色全局应用于原生表单控件(复选框、单选按钮、范围输入、进度条)。 - 立即重启设置
color-scheme: light dark在每个iframe. 当你强制使用主题时,这会保持嵌入透明data-bs-theme. 删除任何类似 v5 的变通方法[data-bs-theme="dark"] { color-scheme: unset; }. v6 使用其颜色标记进行解析light-dark(),其内容为color-scheme. 一个unset这会关闭整个子树的暗模式。对于没有暗模式的第三方嵌入,添加新的.color-scheme-light将工具类仅用于那个 iframe——见 重启.
表格
重构复选框、单选按钮和开关。
- 分开
_form-check.scss拆分成独立的样式表:_check.scss,_radio.scss,和_switch.scss. - 还要将检查、单选按钮和开关的文档页面拆分开来。
- 在每个这些组件上添加了新的 CSS 变量。 附注:我们本可以在这里共享变量,但为了简单起见选择没有这样做。
- 删除了几个现在未使用的 Sass 变量。
- 复选框和单选按钮适用
.check或者.radio直接在上面<input>没有包装。他们的标记使用 CSSmask-image在一个::before伪元素。开关使用一个.switch输入的包装器。 - 重新设计了带有标签(和描述)的复选框、单选按钮和开关的布局。我们现在有用于布局的自定义元素,其中包括基本的弹性盒子样式。
- 重构了切换按钮以使用嵌套输入结构。
.btn-check类现在放在标签上(而不是输入),输入则嵌套在里面。这消除了对……的需求id/for属性和使用 CSS:has()选择器而不是兄弟选择器。示例:<label class="btn-check btn-solid theme-primary"><input type="checkbox">Toggle</label>.
- 分开
巩固
.form-select进入.form-control.- 已移除
.form-select—使用.form-control开<select>现在的元素。同时存在过多的抽象和重复。 - 添加新的 CSS 变量于
.form-control便于在不进行 Sass 编译的情况下进行自定义。 .form-control现在有一个min-height始终而不仅仅是<textarea>元素。这为我们减少了一些 CSS。.form-control将对焦环应用到:focus-within以及:focus-visible,所以像这样的包装器.form-adorn当嵌套输入获得焦点时显示聚焦。
- 已移除
Range 现在是一个 JavaScript 组件。 原生的 range 无法仅用 CSS 在所有浏览器中绘制填充轨道,所以
.form-range由 JS 驱动。.form-range现在是一个 包装纸 元素;这个<input type="range">采取.form-range-input(以前.form-range直接作用于输入)。包装器拥有组件的令牌,因此输入和装饰继承了它们。每一个.form-range会自动初始化。- 默认绘制填充轨迹,外加可选的数值气泡(
data-bs-bubble,它重复使用工具提示样式)以及从链接生成的刻度标记<datalist>. - 填充量显示为
--bs-range-fill(0–1),由插件保持同步;填充颜色标记是--range-track-fill-bg. - 验证类 (
.is-invalid/.is-valid) 现在继续.form-range-input.
添加了新的下拉框表单组件。 一个可搜索、可过滤的选择组件,具有单选和多选模式,构建在 Menu 组件之上。请参见 下拉框文档.
新
.form-field布局组件。 替换.checkgroup和.radiogroup使用具有统一基于网格的布局原语的包装器,用于标签 + 控件 + 帮助文本 + 验证反馈。使用.form-field,.form-field-content,和.form-field-card用于结构化表单布局,以及.form-group用于分组相关字段。参见 现场文档.彻底改进了表单验证。
- 客户端验证不再使用
.was-validated或裸露:valid/:invalid伪类。相反,添加data-bs-validate你的<form>选择加入:user-invalid仅在用户交互后激活的样式。要同时显示成功样式,请使用data-bs-validate="valid". - 服务器端验证与
.is-invalid/.is-valid类保持不变并且在全局范围内有效data-bs-validate. - 仅使用自定义验证状态(例如,“警告”)
.is-*类——不支持伪类。 - 验证反馈工具提示现在需要两者
.tooltip和.valid-tooltip/.invalid-tooltip课程(例如,<div class="tooltip invalid-tooltip">). - 已移除
$enable-validation-icons以及表单控件上的所有内置验证背景图标。 - 这
$form-validation-statesSass map被替换为$validation-states,一个将州名与主题键对应的更简单的映射(例如,"invalid": "danger"). 样式使用来源于主题的 CSS 自定义属性(--danger-fg,--danger-border等)而不是每个州的 Sass 变量。 - 这
form-validation-statemixin 签名已更改自($state, $color, $icon, ...)到($state, $theme). - 已重命名
scss/mixins/_forms.scss到scss/mixins/_form-validation.scss现在 mixin 只包含选择器逻辑;完整的状态 mixin 位于scss/forms/_validation.scss. - 已移除
scss/forms/_form-variables.scss(反馈变量和图标 SVG 数据 URI)。 - 验证 JS:替换
document.querySelectorAll('.needs-validation')与document.querySelectorAll('form[data-bs-validate]')并移除form.classList.add('was-validated')线。
- 客户端验证不再使用
简化输入组。
- 已移除
.has-validation—border-radius 逻辑不再根据它分支。 - 已添加
.input-group-ignore对于应该被相邻的边框圆角规则跳过的元素。 - 已移除
flex-wrap: wrap从.input-group; 验证反馈现在位于父级中的输入组外.form-field.
- 已移除
更新了表单标签默认值。
.form-label和.col-form-label现在默认设置为font-weight: 500(是inherit) 和font-size: inherit(是var(--font-size-sm)).已更新表单帮助文本。
.form-text颜色已更改为var(--fg-3)到var(--fg-2)。那margin-top从--form-text-margin-top已移除;间距由父元素处理.form-field网格间隙。重新设计了开关内部结构。 开关拇指现在是绝对定位的,并且
inset-inline-start使用过渡而不是基于填充的动画。新令牌:--switch-indicator-width,--switch-indicator-height覆盖旧填充基础切换行为的主题将需要更新。.form-adorn包装应为<label>元素。 包装器看起来像一个输入框,所以人们会点击图标、文本或周围的填充区域,并期望字段获取焦点。A<label>本地提供该行为。用标记标记装饰物aria-hidden="true",否则他们的文本会加入输入的可访问名称。<!-- v6 --> <label class="form-control form-adorn"> <span class="form-adorn-text" aria-hidden="true">$</span> <input type="text" class="form-ghost" placeholder="0.00"> </label>
助手
- 比例辅助工具已移至工具类中。
- 已为
.d-flow-root工具弃用clearfix辅助工具。
工具
- 扩展的间隔器刻度。
$spacers地图已从 6 个步骤(0–5)扩展到 13 个步骤(0–12),粒度更细。请注意,间隔器键不再映射到与 v5 相同的值:
| 键 | v5 值 | v6 值 |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0.25rem | 0.25rem |
| 2 | 0.5rem | 0.375rem |
| 3 | 1rem | 0.5rem (是关键 2) |
| 4 | 1.5rem | 0.75rem |
| 5 | 3rem | 1rem (是键 3) |
| 6 | — | 1.25rem |
| 7 | — | 1.5rem (是关键4) |
| 8 | — | 1.75rem |
| 9 | — | 2rem |
| 10 | — | 2.25rem |
| 11 | — | 2.5rem |
| 12 | — | 3rem (是键 5) |
- 新的固定尺寸刻度。 一个新的
$sizes映射(键 1–12)提供基于 rem 的固定宽度,并合并到宽度工具中。v5 在$sizes中没有等效的固定尺寸刻度——它只有基于百分比的值。
| 键 | v5 $sizes | v6 $sizes |
|---|---|---|
| 1 | — | 1rem |
| 2 | — | 2rem |
| 3 | — | 3rem |
| 4 | — | 4rem |
| 5 | — | 5rem |
| 6 | — | 6rem |
| 7 | — | 7rem |
| 8 | — | 8rem |
| 9 | — | 9rem |
| 10 | — | 10rem |
| 11 | — | 11rem |
| 12 | — | 12rem |
| 25 | 25% | 25% (在宽度工具类中) |
| 50 | 50% | 50% (在宽度工具类中) |
| 75 | 75% | 75% (在宽度实用中) |
| 100 | 100% | 100% (在宽度实用中) |
| 自动 | auto | auto (在宽度实用中) |
- 字体大小比例重新设计。
.fs-1到.fs-6(数字,递减大小)已被.fs-xs到.fs-6xl的 T 恤尺码键取代(10 个步骤,递增)。较大尺寸使用clamp()进行响应式缩放。新的.text-{size}工具可同时设置font-size和line-height。
| v5 类名 | v5 值 | v6 类名 | v6 值 |
|---|---|---|---|
.fs-6 | 1rem | .fs-md | 1rem |
.fs-5 | 1.25rem | .fs-lg | clamp(1.25rem, …, 1.5rem) |
.fs-4 | 1.5rem | .fs-xl | clamp(1.5rem, …, 1.75rem) |
.fs-3 | 1.75rem | .fs-2xl | clamp(1.75rem, …, 2rem) |
.fs-2 | 2rem | .fs-3xl | clamp(2rem, …, 2.5rem) |
.fs-1 | 2.5rem | .fs-4xl | clamp(2.25rem, …, 3rem) |
| — | — | .fs-xs | 0.75rem |
| — | — | .fs-sm | 0.875rem |
| — | — | .fs-5xl | clamp(3rem, …, 4rem) |
| — | — | .fs-6xl | clamp(3.75rem, …, 5rem) |
重命名为
.lh-base行高工具.lh-md. 匹配md步骤已被字体大小比例使用。底层--line-height-baseCSS 变量现在是--line-height-md.字体粗细合并为一个
$font-weightsSass map。 移除了该个人$font-weight-lighter,$font-weight-light,$font-weight-normal,$font-weight-medium,$font-weight-semibold,$font-weight-bold,和$font-weight-bolder偏向单一的变量$font-weights映射(键:lighter,light,normal,medium,semibold,bold,bolder)—参见 字体粗细.--font-weight-*CSS 自定义属性是从此映射生成的,而不是硬编码的$root-tokens.$font-weight-base已消失。自定义--body-font-weight,默认是var(--font-weight-normal).已移除
.display-1–.display-6标题工具。 显示标题类不再存在,也没有单一类的替代。通过将大字体大小工具类与字体粗细工具类配对来重新创建它们。v5 的显示标题使用了font-weight: 300,所以.fw-light再现原始外观;使用更粗的字体(.fw-semibold,.fw-bold) 如果你愿意:
| v5 类名 | v5 尺寸 | v6 配方 |
|---|---|---|
.display-1 | 5rem | .fs-6xl .fw-light |
.display-2 | 4.5rem | .fs-6xl .fw-light |
.display-3 | 4rem | .fs-5xl .fw-light |
.display-4 | 3.5rem | .fs-5xl .fw-light |
.display-5 | 3rem | .fs-4xl .fw-light |
.display-6 | 2.5rem | .fs-3xl .fw-light |
已移除
.lead效用。 v5.leadv6 中不再存在 class,而且没有完全对应的单一 class 替代。如果你想用工具类实现类似效果,可以使用.fs-lg相关的.fw-light.边框半径标记已被数值刻度取代。 被命名的
$border-radius-*Sass 变量和--border-radius-*CSS 自定义属性(-xs,-sm, 默认,-lg,-xl,-2xl) 已被数字所取代$radiiSass map(键控的0–9) 生成--radius-0通过--radius-9代币,加上--radius-pill. 该秤由单个驱动$radius: .5rem基础,因此当基础更改时,所有步骤都会一起移动。要迁移任何直接引用旧令牌的自定义 Sass 或 CSS:
| v5 变量 | v5 值 | v6 令牌 | v6 值 |
|---|---|---|---|
$border-radius-xs / --border-radius-xs | 0.25rem | --radius-3 | 0.25rem |
$border-radius-sm / --border-radius-sm | 0.25rem | --radius-3 | 0.25rem |
$border-radius / --border-radius | 0.375rem | --radius-4 | 0.375rem |
$border-radius-lg / --border-radius-lg | 0.5rem | --radius-5 | 0.5rem |
$border-radius-xl / --border-radius-xl | 1rem | --radius-9 | 1rem |
$border-radius-xxl / --border-radius-2xl | 2rem | —(最接近: --radius-9 1rem) | |
$border-radius-pill / --border-radius-pill | 50rem | --radius-pill | 50rem |
- 边框半径工具已扩展并重新映射。
.rounded-*现在从$radii映射生成,因此刻度范围为.rounded-0到.rounded-9(以前为.rounded-0到.rounded-5)。默认.rounded仍然解析为0.5rem,但编号类现在映射到的值与 v5 不同:
| 工具类 | v5 值 | v6 值 | v6 令牌 |
|---|---|---|---|
.rounded | 0.375rem | 0.5rem | var(--radius-5) |
.rounded-0 | 0 | 0 | var(--radius-0) |
.rounded-1 | 0.25rem | 0.125rem | var(--radius-1) |
.rounded-2 | 0.375rem | 0.1875rem | var(--radius-2) |
.rounded-3 | 0.5rem | 0.25rem | var(--radius-3) |
.rounded-4 | 1rem | 0.375rem | var(--radius-4) |
.rounded-5 | 2rem | 0.5rem | var(--radius-5) |
.rounded-6 | — | 0.625rem | var(--radius-6) |
.rounded-7 | — | 0.75rem | var(--radius-7) |
.rounded-8 | — | 0.875rem | var(--radius-8) |
.rounded-9 | — | 1rem | var(--radius-9) |
.rounded-circle | 50% | 50% | — |
.rounded-pill | 50rem | 50rem | var(--radius-pill) |
为了保持 v5 的视觉圆润感,将类别编号向上调整(例如 .rounded-1 → .rounded-3, .rounded-2 → .rounded-4, .rounded-3 → .rounded-5, .rounded-4 → .rounded-9)。那 .rounded-{top,end,bottom,start}-* 方向变体遵循相同的刻度。v6 没有对应的 2rem v5 的值 .rounded-5.
- 字体粗细添加。 已添加
.fw-medium(500) 和.fw-semibold(600) 工具类。v5 只包含lighter,light(300),normal(400),bold(700),和bolder. - 限制负边距。 负间隔仅减少到
-1(-0.25rem) 和-2(-0.5rem),并且仅适用于margin-inline-start(.ms--1,.ms--2) 和margin-inline-end(.me--1,.me--2)。v5 版本中所有边的完整负边距工具类已被移除。 - 间距和边框工具现在使用 CSS 逻辑属性。
margin-top→margin-block-start,margin-right→margin-inline-end,padding-left→padding-inline-start,border-right→border-inline-end等等。类名(.mt-*,.me-*,.ps-*,.border-end) 保持不变,但底层的 CSS 属性现在是逻辑化的,提高了对从右到左(RTL)和书写模式的支持。 - 文本换行添加。 已添加
.text-balance和.text-pretty将值应用于文本换行工具。 - 颜色工具重命名。
.text-*色彩工具已被替换为.fg-*(前景) 工具。新.fg-emphasis-*和.fg-contrast-*变体。背景工具类现在包括.bg-subtle-*和.bg-muted-*除了.bg-*. 已添加.fg-bg和.bg-fg交叉引用工具;已删除.fg-inherit和.bg-inherit. 已重命名.bg-opacity-{n}到.bg-{n}针对 10–100 不透明度刻度。已重命名.text-reset到.fg-reset. - 已移除
.text-bg-*助手。 v5.text-bg-{color}辅助工具(一个固定主题的背景加上自动对比的前景)已被移除。请在同一元素上使用背景工具和匹配的对比前景来组合相同的效果。例如,.text-bg-primary变成class="bg-primary fg-contrast-primary". 这适用于每一种主题颜色(primary,secondary,success,danger,warning,info,accent,inverse)。对于前者.text-bg-light/.text-bg-dark, 配对一个中性表面(见下文—.bg-1或固定.bg-white/.bg-black) 与适当的.fg-*. - 已移除
.bg-light,.bg-dark,和.bg-body-*表面。 颜色模式感知.bg-body-secondary/.bg-body-tertiary表面映射到 v6 的中性背景比例.bg-2–.bg-1(每一步比页面主体对比度略高一点)。旧的.bg-light/.bg-dark灰色的是 固定的——他们没有遵循颜色模式——而 v6 没有完全相同渲染的替代类,所以按意图选择:使用自适应.bg-1/.bg-2如果你希望表面随光和暗变化,或者固定表面.bg-white/.bg-black或者通过限定颜色模式(data-bs-theme="light|dark") 和使用.bg-body。注意.bg-black是纯黑色(比v5的深灰色更深)并且带有瞄准镜data-bs-theme渲染主题主体颜色,因此都没有再现v5的确切色调。
| v5 类名 | v6 替代 |
|---|---|
.bg-body-tertiary | .bg-1 |
.bg-body-secondary | .bg-2 |
.bg-light | .bg-1 / .bg-2(自适应),或 .bg-white 用于固定浅色表面 |
.bg-dark | .bg-black,或 data-bs-theme="dark" + .bg-body(没有精确颜色匹配) |
.bg-body | .bg-body(不变) |
- 链接工具现在是文本装饰工具的一部分。 v5
link-*工具系列已被underline-*工具取代,这些工具在 文本装饰 下有文档说明。请相应更新类名:
| 类别 | 之前(v5) | 之后(v6) |
|---|---|---|
| 链接文本不透明度 | .link-opacity-*, .link-opacity-*-hover | 已移除(无专用 link-opacity-* v6中的工具类) |
| 下划线偏移 | .link-offset-1, .link-offset-2, .link-offset-3 | .underline-offset-1, .underline-offset-2, .underline-offset-3 |
| 下划线颜色 | .link-underline-primary, .link-underline-secondary | .underline-primary, .underline-secondary |
| 下划线不透明度 | .link-underline-opacity-* | .underline-* (10步量表,从 10 到 100) |
| 下划线粗细 | — | .underline-thickness-1 通过 .underline-thickness-5 |
| 悬停变体 | .link-offset-3-hover, .link-underline-opacity-75-hover | .hover:underline-offset-3, .hover:underline-70 或者 .hover:underline-80 |
在 v6 中不再需要辅助工具 .link-underline。
- 显示工具: 添加
flow-root和contents选项。 - 尺寸工具:
- 已重命名
.mh-*/.mw-*到.max-h-*/.max-w-* - 已添加
.min-h-*和.min-w-*具有两个默认值的工具类,0和100% - 已添加
auto,min-content,max-content,和fit-content到width和height工具类
- 已重命名
- 新的动态视口工具。
.dvh-100和.min-dvh-100设置height: 100dvh和min-height: 100dvh..dvw-100和.min-dvw-100设置width: 100dvw和min-width: 100dvw. 浏览器会更新一个dv*当它扩展或收缩浏览器界面时的单元。使用.dvh-100对于全屏移动布局,因为当移动浏览器显示其 URL 栏时,该部分不再溢出。请注意dvw未修复100vw滚动条溢出,因为 CSS 将每个视口宽度单位的大小都当作滚动条不存在一样计算。v5.vh-100,.min-vh-100,.vw-100,和.min-vw-100公用设施保持不变。添加svh,lvh,svw,和lvw自己熟悉 utilities API — 见 高度 和 宽度. - 新
color-scheme工具类.color-scheme-light,.color-scheme-dark,和.color-scheme-auto设置color-scheme在一个元素上的属性。当一个元素需要不同于页面其他部分的方案时使用它们,例如第三方<iframe>那个没有暗黑模式 — 看 配色方案. 重启设置color-scheme在页面上和每一页上iframe对于你来说,所以你只需要这些工具用于单个元素——参见上面的重启部分。 - Flex 和 Grid 工具:
- 已添加
.place-items和.justify-items工具类 - 已添加
.grid-cols-*公用设施grid-template-columns(1–4 列和 6 列布局).grid-cols-fill用于跨越所有列,.grid-cols-subgrid用于采用父网格的列轨道,以及.grid-auto-flow效用。
- 已添加
- 容器查询工具。 新
.contains-inline和.contains-size公用设施container-type. - 比例助手现在由工具类 API 提供支持,并使用简化的数值
calc(). - 状态变体现在使用前缀语法。 类似悬停和聚焦变体的伪状态工具类类现在使用一个
state:class前缀模式(例如,hover:opacity-50而不是opacity-50-hover),匹配响应前缀约定。 - 工具类 API 清理。 已移除
css-var,css-variable-name,和local-vars来自工具类 API 的选项。使用property用于 CSS 自定义属性的映射方法和variables用于工具类中的静态 CSS 自定义属性。 - 阴影现在可以分层并支持主题化。
.shadow,.shadow-sm,和.shadow-lg是多站的box-shadow用于更自然的衰减的声明,以及新的.shadow-xs和.shadow-xl尺寸。新.shadow-{color}工具类(任何主题颜色,加上.shadow-current,.shadow-black,.shadow-white) 和.shadow-opacity-{10-100}工具类重新调整阴影的色调和比例。两者都设置本地的、不继承的 CSS 变量(--bs-sc,--bs-so)——反映了……的方式.border-{color}工具类范围--bs-bc——所以阴影颜色或不透明度的覆盖永远不会泄漏到嵌套中.shadow-*元素。全球--bs-shadow-color和--bs-shadow-strength(在深色模式下自动加深)驱动默认的无色外观。参见 Shadows 文档 详情请参阅。 - 新
.border-keyline效用。 添加了一个.5pxkeyline选项到$border-widths(由一个新的支持)--border-width-keyline用于高密度显示屏的发丝边框的自定义属性。
新组件和插件
- 对话 — 替换了 Modal,基于原生构建
<dialog>元素。有关完整的迁移,请参见上面的组件部分。 - 步进电机 — 新
.stepper用于多步骤工作流的组件,与.stepper-item和.stepper-horizontal变体。仅 CSS。 - 阿凡达 — 新
.avatar带有尺寸的组件(.avatar-xs通过.avatar-xl)、状态指示器(.avatar-status .status-online|offline|busy|away),微妙的变体,和.avatar-stack用于分组头像。 - 芯片和芯片输入 — 新
.chip用于标签/标记的组件和.chip-input[data-bs-chips]用于交互式芯片输入。Chips带事件的 JavaScript 插件:add.bs.chips,remove.bs.chips,change.bs.chips,select.bs.chips. - 一次性密码输入 — 新
.otp一次性密码字段的组件。基于单一<input>呈现为独立的数字栏位以实现完全可访问性。OtpInput带事件的 JavaScript 插件:input.bs.otpInput,complete.bs.otpInput(两者都暴露event.value). - 密码强度 —
Strength用于密码强度测量的 JavaScript 插件strengthChange.bs.strength事件。 - 范围 —
Range将...转换的 JavaScript 插件.form-range变成一个带有填充轨道、可选数值气泡的样式化滑块,并且<datalist>刻度标记,带有一个changed.bs.range事件。 - 切换器 —
Toggler用于通过 JavaScript 切换元素上的类或属性的插件data-bs-toggle="toggler",与toggle.bs.toggler和toggled.bs.toggler事件。 - 日期选择器 —
Datepicker基于 Vanilla Calendar Pro 构建的 JavaScript 插件。弹出日期选择器在选择后、外部交互时关闭 Escape,或者当焦点移出时。事件:change.bs.datepicker,show.bs.datepicker,shown.bs.datepicker,hide.bs.datepicker,hidden.bs.datepicker. - 形式装饰 — 新
.form-adorn用于向表单输入添加图标或文字装饰的组件。 - 散文 — 新
.prose用于丰富排版作用域的类和.not-prose在散文容器中选择退出散文样式。 - 导航溢出 — 包裹一个
.nav在<div class="nav-overflow" data-bs-toggle="nav-overflow">将溢出的项目折叠到菜单中。该插件会测量并观察包装器,并触发update.bs.navoverflow和overflow.bs.navoverflow那里。看见那个 导航溢出文档. - 子菜单 — 通过嵌套菜单支持
.submenu在菜单中的类,带有submenuTrigger(hover,click,或者both) 和submenuDelay选项。
文档
- 已移除所有
AddedIn徽章。 - 重新整理了工具文档,将包含工具组的大页面拆分开。尺寸、间距、弹性布局、字体等已被拆分到带有新子组标题的较小页面中,并显示在侧边栏。