我正在尝试在Angular应用程序中使用CSS变量,覆盖Bootstrap 4默认的Primary Sass变量为自定义颜色,例如:
styles.scss
:root {
--primary: #00695c;
}
$myPrimary: var(--primary);
$primary: $myPrimary; // This does not work
@import '../node_modules/bootstrap/scss/bootstrap';
我在编译我的应用程序时遇到了这个错误:
Failed to compile.
./src/styles.scss (./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src??embedded!./node_modules/sass-loader/lib/loader.js??ref--15-3!./src/styles.scss)
Module build failed (from ./node_modules/sass-loader/lib/loader.js):
undefined
^
$color: var(--primary) is not a color.
╷
181 │ $link-hover-color: darken($link-color, 15%) !default;
│ ^^^^^^^^^^^^^^^^^^^^^^^^
╵
node_modules\bootstrap\scss\_variables.scss 181:43 @import
node_modules\bootstrap\scss\bootstrap.scss 9:9 @import
stdin 19:9 root stylesheet
in C:\Work\node_modules\bootstrap\scss\_variables.scss (line 181, column 43)
有没有一种方法可以使用CSS变量解决这个问题并覆盖bootstrap sass变量?
还有另一个相关问题,但我无法解决我的问题。
更新
实际上,我创建了一个用于内部使用的Angular组件库。我已经使用CSS变量在该库中实现了主题功能,因此我可以动态更改它们的值并允许用户为应用程序选择主题。
所以,在我的库中,我有不同的主题文件,下面是其中之一:
theme.scss
@import './library-styles-to-be-used-in-app.scss';
:root {
--primary: #00695c;
--secondary: #f4f5f6;
}
现在,我将这个主题文件导入到我的angular应用程序的styles.scss文件中,如下所示:
@import '../dist/library/styles/theme.scss';
@import '../node_modules/bootstrap/scss/bootstrap';
请见下方图片,Bootstrap的CSS变量已经被覆盖,但如果我使用Bootstrap类似
btn btn-primary
的类,它仍然显示旧的蓝色。
darken
。它期望一个颜色值并返回一个固定的较暗的颜色值。但是CSS属性不是这样工作的,它们是动态的,可以改变。 - cloned