Unable to override $theme-color in bootstrap 4

前端 未结 4 688
無奈伤痛
無奈伤痛 2020-12-24 03:00

It\'s bootstrap 4.0 with SASS

My style.scss file contains the following code:

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

@im         


        
相关标签:
4条回答
  • 2020-12-24 03:30

    Update 2018 for Bootstrap 4.1

    To change the primary, or any of the theme colors in Bootstrap 4 SASS, set the appropriate variables before importing bootstrap.scss. This allows your custom scss to override the default value, and will then be set in all the theme-colors loops (btn-primary, bg-primary, text-primary, etc..)...

    /* import the necessary Bootstrap files */
    @import "bootstrap/functions";
    @import "bootstrap/variables";
    
    $theme-colors: (
      primary: #333333;
    );
    
    /* finally, import Bootstrap */
    @import "bootstrap";
    

    Demo: https://www.codeply.com/go/lobGxGgfZE


    Also see this answer

    0 讨论(0)
  • 2020-12-24 03:30

    I'm assuming that you have installed Bootstrap 4 beta using npm and you wish to customize the Bootstrap SCSS without modifying the source in node_modules.

    The way I do it is by overriding the Bootstrap variables contained in variables.scss:

    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
    );
    

    The way to override bootstrap theme colors is actually due to be changed in the upcoming beta 2. The current requirement is that you have to include the entire theme-colors Sass map when overriding. In the current beta, failure to include the entire Sass map will result in:

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

    Please see this Github issue and this Codepen for more information, and an example of how you will be able to override theme colors in beta 2.

    0 讨论(0)
  • 2020-12-24 03:38

    None of the solutions provided work. Some are close and will update the color use on most elements, but not all elements. I have tried them all (and every other alternative I can find on StackOverflow and other websites, but those solutions only affect the elements that are specifically referencing the color property and does not update those using the theme-color function to get the color.

    The expected solution (and recommended by others) is

    /* 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";
    

    But this leaves 15 occurences of #007bff (the normal blue/primary color) throughout the generated custom.css. Examples of it occur in the pagination section, e.g.

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

    By setting both the $colors and the $theme-colors custom properties after the import of the functions.scss, and placing the statement to import the variables.scss AFTER these changes appears to set the new colors throughout. I presume that by setting these variables specifically, the bootstrap variables cannot override them.

    @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";
    

    The may not seem right, but it does appear to work. I'm not a SASS expert, so maybe someone else could explain this better. I hope this helps anyone who may still be struggling to solve this issue.

    0 讨论(0)
  • 2020-12-24 03:40

    This got me too. You need to import functions.scss into your scss file before variables.

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

    Your paths may differ.

    This is with Bootstrap 4 Beta 1.

    0 讨论(0)
提交回复
热议问题