Bootstrap Angular CLI 中的 4

Bootstrap 4 in Angular CLI

我正在尝试在我的 Angular 4 CLI 项目中使用 Bootstrap 4 scss 文件进行设置。

遵循指南 and here,我已经设置了angular-cli.json(designsystem.scss是我的主要scss文件):

 "styles": [
    "sass/designsystem/designsystem.scss",
    "../node_modules/prismjs/themes/prism.css",
    "styles.scss"
  ],

然后,在该文件中:

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

并且在“_variables.scss”中我粘贴了默认Bootstrap 4“_variables.scss”的内容并删除了所有!defaults.

到目前为止,我没有覆盖任何内容。但是 CLI 一直卡在 "variables" 文件上,寻找 mixins,例如

./src/sass/designsystem/designsystem.scss
Module build failed: ModuleBuildError: Module build failed: 
@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
    ^
  No mixin named -assert-ascending

Backtrace:
  src/sass/designsystem/_variables.scss:190

如果我注释掉我的 @import 'variables';,基础 bootstrap scss 处理和加载没有错误。

那么,如何创建 _variables.scss 的自定义版本?

更新:

即使我注释掉了 mixin,构建也会在所有颜色函数上失败:

$btn-focus-box-shadow:           0 0 0 3px rgba(theme-color("primary"), .25);
                                      ^
  Argument `$color` of `rgba($color, $alpha)` must be a color

看来我还需要 import Bootstrap functions before variables:

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

几个变量使用函数,特别是theme-color()

您不必像 bootstrap.scss 中那样导入变量。只需执行以下操作,您就可以开始了:

// overriding bootstraps browser default to 14px instead of 16px
$font-size-base: .875rem;
$font-size-lg: 1rem;
$font-size-sm: .75rem;

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

.font-lg{
    font-size:$font-size-lg;
}

.font-md {
    font-size: $font-size-base;
}

.font-sm {
    font-size: $font-size-sm;
} 

我相信您遇到了问题,因为您在自定义 variables.scss 文件中使用了尚未声明的函数和混入。

您可以通过覆盖变量而不是派生文件的其余部分来解决这些问题。

使用Bootstrap@4.0.0Beta:

$white:  #fff;
$gray-100: #f8f9fa;
$gray-200: #e9ecef;
$gray-300: #dee2e6;
$gray-400: #ced4da;
$gray-500: #adb5bd;
$gray-600: #868e96;
$gray-700: #495057;
$gray-800: #343a40;
$gray-900: #212529;
$black:  #000;

$grays: (
        100: $gray-100,
        200: $gray-200,
        300: $gray-300,
        400: $gray-400,
        500: $gray-500,
        600: $gray-600,
        700: $gray-700,
        800: $gray-800,
        900: $gray-900
);

$blue:    #007bff;
$indigo:  #6610f2;
$purple:  #6f42c1;
$pink:    #e83e8c;
$red:     #dc3545;
$orange:  #fd7e14;
$yellow:  #ffc107;
$green:   #28a745;
$teal:    #20c997;
$cyan:    #17a2b8;

$colors: (
        blue: darkblue, //change a default color
        indigo: $indigo,
        purple: $purple,
        pink: $pink,
        red: $red,
        orange: $orange,
        yellow: $yellow,
        green: $green,
        teal: $teal,
        cyan: $cyan,
        white: $white,
        gray: $gray-600,
        gray-dark: $gray-800
);

$theme-colors: (
        smurf: #0fa8d6, //add your own custom theme
        primary: $blue,
        secondary: $gray-600,
        success: $green,
        info: $cyan,
        warning: $yellow,
        danger: $red,
        light: $gray-100,
        dark: $gray-800
);

请注意,这些只是变量,仅此而已。现在只需在 bootstrap 之前导入 variables.scss 就可以了:

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

在 sass/designsystem/designsystem.scss 文件中的 _variables 导入之前添加这些导入。

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