Bootstrap 5 间距工具类底层仅依赖 --bs-spacer 变量(影响所有档位基数),--bs-spacers 是 Sass map,不可运行时覆盖;组件内建间距则使用独立变量(如 --bs-navbar-padding-y),需单独调整。
mb-3、px-4)底层依赖哪些 CSS 变量?所有间距工具类都由 --bs-spacer 和 --bs-spacers 这两个 CSS 变量驱动。前者是基础单位(默认 0.25rem),后者是一个 map 类型的自定义属性,定义了从 0 到 5(以及 auto)各档缩放系数对应的像素值。
比如 mt-3 实际编译为:margin-top: calc(0.25rem * 3) —— 但这个计算发生在 Bootstrap 源码的 Sass 层;CSS 运行时只看到最终的 px/rem 值。真正可 runtime 覆盖的是 --bs-spacer(影响所有档位的基数),而 --bs-spacers 必须在 Sass 编译期重定义,纯 CSS 无法动态改写它。
--bs-spacer 是唯一可在 :root 中安全覆盖的间距基础变量--bs-spacers 是 Sass map,不能用 style 或 :root 直接赋值,否则无效bootstrap.min.css,只能动 --bs-spacer
--bs-spacer 安全放大/缩小全部间距工具类?直接在 :root 中修改即可,所有 m*/p* 类会自动响应。例如把基础单位从 0.25rem 改为 0.375rem(即放大 1.5 倍):
:root { --bs-spacer: 0.375rem;}
注意:这个改动会影响 所有 间距档位(1→0.375rem,2→0.75rem,3→1.125rem…),不是线性缩放整个 scale,而是改变基数。
立即学习“前端免费学习笔记(深入)”;
0.125rem 会让 mx-1 变成 0.125rem,比默认更紧凑1rem 会让 pb-5 达到 5rem,慎用于移动端0 或负值,部分工具类(如 mx-auto)内部逻辑会失效my-4 更大,但不动 my-3)怎么办?没法靠 CSS 变量直接做到——因为 --bs-spacers 不支持运行时重写。此时必须放弃工具类,手写 utility class 或覆盖特定选择器。
推荐做法:在项目 CSS 中追加一条高优先级规则,精确命中目标类名:
.my-4 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important;}
或者用更稳妥的方式,避免 !important:
[class*="my-4"] { margin-top: 2.5rem; margin-bottom: 2.5rem;}
:root { --bs-spacers: ... } 覆盖,它会被忽略$spacers 变量处重定义整个 map,再重新编译 CSScard、modal)的内建间距冲突--bs-spacer,某些组件(如 navbar)的内边距没变?因为那些组件的 padding/margin 是硬编码在组件样式里的,不走间距工具类,也不读 --bs-spacer。比如 .navbar 的 padding 来自 --bs-navbar-padding-y 等独立变量。
这类组件需单独覆盖其专属 CSS 变量:
:root { --bs-spacer: 0.375rem; --bs-navbar-padding-y: 1.25rem; /* 原默认是 0.5rem */ --bs-card-spacer-y: 1.5rem; /* 原默认是 1rem */}
-padding-、-margin-、-spacer- 等关键词改 --bs-spacer 看似简单,但组件内建间距和工具类间距是两套体系,容易只调了一半。真要统一控制,得同时盯住变量列表和组件源码里那些硬写的数值。