无法覆盖 bootstrap 中的 $theme-color

Unable to override $theme-color in bootstrap

bootstrap 4.0 SASS

我的 style.scss 文件包含以下代码:

@import "../bootstrap/scss/bootstrap";

@import "colors";
@import "main";

_colors.scss文件包含以下代码:

$bg-white : white;

$theme-colors: (
        primary: #333333
)

你可以看到我只是想覆盖 $theme-color('primary') 但问题是它什么都不做。

如果我在文件开头移动 @import "colors" style.scss 它会给我以下错误:

error ../bootstrap/scss/_forms.scss (Line 284: $color: null is not a color for `rgba')

实际上,style.scss 文件编译成 style.css 文件,而那个文件是链接文件。

问题: 在使用 SASS 时如何覆盖 bootstrap-4 中的 $theme-color

如有任何帮助,我们将不胜感激,在此先致谢

干杯。

我假设您已经使用 npm 安装了 Bootstrap 4 beta,并且您希望自定义 Bootstrap SCSS 而无需修改 node_modules.

中的源代码

我的方法是覆盖 variables.scss:

中包含的 Bootstrap 变量

app-styles.scss

// Custom SCSS variables I wish to override (see below)
@import 'assets/styles/variables';

// Bootstrap 4 from node_modules
@import '~bootstrap/scss/bootstrap.scss';

variables.scss

$theme-colors: (
    primary: $trump-hair,
    secondary: $gandalf-hat,
    success: $my-favorite-color,
    info: #FBC02D,
    warning: #FF5722,
    danger: $color-of-melena,
    light: #1B5E20,
    dark: $bile-green
);

覆盖bootstrap主题颜色的方法实际上将在即将到来的beta 2中改变。目前的要求是你必须包括整个theme-colors Sass地图覆盖时。在当前测试版中,未能包含整个 Sass 地图将导致:

Argument $color of darken($color, $amount) must be a color

请参阅此 Github issue and this Codepen 了解更多信息,以及如何在 Beta 2 中覆盖主题颜色的示例。

这也吸引了我。您需要在变量之前将 functions.scss 导入到您的 scss 文件中。

@import '../../node_modules/bootstrap/scss/functions';
@import 'assets/styles/variables';
@import '../../node_modules/bootstrap/scss/bootstrap';

您的路径可能不同。

这是 Bootstrap 4 Beta 1。

2021 年更新 Bootstrap 5

根据 guidance in the docs...

"Variable overrides must come after our functions are imported, but before the rest of the imports."

因此,覆盖 Bootstrap 5 中的主题颜色与 4.x 的工作方式相同。为了覆盖主题颜色,只需在导入之前更改适当的主题颜色变量 bootstrap.scss

/* custom.scss */
/* change theme colors */
$primary: #362ec4;
$secondary: #8f5325;
$success: #3e8d63;
$info: #7854e4;
$warning: #b8c924;
$danger: #d62518;
/* end custom.scss */

@import '~bootstrap/scss/bootstrap.scss';

2018 年更新 Bootstrap 4.1

要更改 主要 或 Bootstrap 4 SASS 中的任何 主题颜色 ,请设置适当的变量 before 导入 bootstrap.scss。这允许您的自定义 scss 覆盖默认值,然后将在所有 theme-colors 循环(btn-primary、bg-primary、text-primary 等)中设置...

/* import the necessary Bootstrap files */
@import "bootstrap/functions";
@import "bootstrap/variables";

$theme-colors: (
  primary: #333333;
);

/* finally, import Bootstrap */
@import '~bootstrap/scss/bootstrap.scss';

演示:https://www.codeply.com/go/lobGxGgfZE


Also see this answer

None 提供的解决方案有效。有些很接近并且会更新大多数元素的颜色使用,但不是所有元素。我已经尝试了所有这些(以及我在 Whosebug 和其他网站上可以找到的所有其他替代方案,但这些解决方案仅影响专门引用颜色 属性 的元素,不会更新使用 theme-color 函数的元素获取颜色。

预期的解决方案(以及其他人推荐的)是

/* import only the necessary Bootstrap files */
@import "../../node_modules/bootstrap/scss/functions";
@import "../../node_modules/bootstrap/scss/variables";

/* -------begin customization-------- */
$colors: (
  "" + blue: #004C9E
);

/* 80 required to bring primary and secondary colors to AAA standards */
$theme-colors: (
  primary: #004C9E
);

// /* -------end customization-------- */

/* finally, import Bootstrap to set the changes! */
@import "../../node_modules/bootstrap/scss/bootstrap";

但这会在生成的 custom.css 中留下 15 次 #007bff(正常 blue/primary 颜色)。它的例子出现在分页部分,例如

.page-item.active .page-link {
  z-index: 1;
  color: #fff;
  background-color: #007bff;
  border-color: #007bff;
}

通过在导入 functions.scss 之后同时设置 $colors 和 $theme-colors 自定义属性,并在这些更改出现后放置用于导入 variables.scss 的语句始终设置新颜色。我假设通过专门设置这些变量,bootstrap 变量无法覆盖它们。

@import "../../node_modules/bootstrap/scss/functions";

/* -------begin customization-------- */
$colors: (
  "" + blue: #004C9E
);

/* 80 required to bring primary color to AAA standards */
$theme-colors: (
  primary: #004C9E
);

@import "../../node_modules/bootstrap/scss/variables";

/* put other customization in here */

// /* -------end customization-------- */

/* finally, import Bootstrap to set the changes! */
@import "../../node_modules/bootstrap/scss/bootstrap";

这可能看起来不对,但它确实有效。我不是 SASS 专家,所以也许其他人可以更好地解释这一点。我希望这对可能仍在努力解决此问题的任何人有所帮助。