Bootstrap 5 中如何正确覆盖 Sass 变量?
我正在用 Bootstrap 5 的 Sass 源码自定义主题,但改了 $primary 变量后编译出来的 CSS 还是默认蓝色,根本没生效。我是在自己的 main.scss 里先导入变量再改的,是不是顺序搞错了?
我的写法大概是这样:
// main.scss
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/mixins";
$primary: #ff0000;
@import "bootstrap/scss/bootstrap";
但结果还是没变,到底该怎么正确覆盖这些变量啊?
Bootstrap 的变量文件里已经定义了 $primary 的默认值,你在导入 variables 之后才重新赋值 $primary,但 variables 里的默认值已经先入为主了,你后面的赋值根本没用上。
正确的做法是:先覆盖变量,再导入 variables。
记住这个原则:Bootstrap 的 Sass 变量覆盖必须放在 functions 之后、variables 之前。functions 提供了必要的函数支持,variables 读取变量定义,而你需要在 variables 读取之前把自己的值塞进去。
另外提醒一下,如果你用的是 Bootstrap 5.3+,还可以用 CSS 变量的方式来覆盖,不用改 Sass:
这种更简单,适合不复杂的场景。