How to change color of angular material stepper step icons

后端 未结 4 1203
北海茫月
北海茫月 2020-12-18 02:04

In the angular material stepper component, each step is represented by an icon in a circle. The background color of this circle is set to whatever the theme\'s primary color

相关标签:
4条回答
  • 2020-12-18 02:15

    Inside of your scss file for you component do the following:

    ::ng-deep {
        .mat-focused .mat-form-field-label {
          color: green;
        }
    
        .mat-form-field-underline {
          background-color: green;
        }
    
        .mat-form-field-ripple {
          background-color: green;
        }
     }
    

    Why you should use ng-deep instead of ViewEncapsulation.none

    Disabling effect of ViewEncapsulation.None in Angular

    https://medium.com/ng-gotchas/piercing-the-angular-style-encapsulation-c7030caeb519

    0 讨论(0)
  • 2020-12-18 02:20

    Using Ionic v4, in my case just added (inside :root):

      .mat-step-header .mat-step-icon-selected {
        background-color: var(--ion-color-primary);
      }
    

    To variables.scss file.

    0 讨论(0)
  • 2020-12-18 02:22

    There does not seem to be option to change color of mat stepper icon, you can use this css as workaround.

     ::ng-deep .mat-step-header .mat-step-icon-selected {
        background-color: red; 
     }
    

    ::ng-deep is deprecated and can be removed, also can be used

    ViewEncapsulation.None in component decorator to avoid using ::ng-deep

    Update with solution to problem

    html file example

     <div class="yellow-theme"> <----- wrapper theme class
         <button mat-raised-button (click)="isLinear = !isLinear" id="toggle- 
          linear">
                {{!isLinear ? 'Enable linear mode' : 'Disable linear mode'}}
              </button>
              <mat-horizontal-stepper [linear]="isLinear" #stepper>
                <mat-step [stepControl]="firstFormGroup">
                  <form [formGroup]="firstFormGroup">
                    <ng-template matStepLabel>Fill out your name</ng-template>
                    <mat-form-field>
                      <input matInput placeholder="Last name, First name" 
                      formControlName="firstCtrl" required>
                    </mat-form-field>
                    <div>
                      <button mat-button matStepperNext>Next</button>
                    </div>
                  </form>
                </mat-step>
                <mat-step [stepControl]="secondFormGroup">
                  <form [formGroup]="secondFormGroup">
                    <ng-template matStepLabel>Fill out your address</ng-template>
                    <mat-form-field>
                      <input matInput placeholder="Address" formControlName="secondCtrl" required>
                    </mat-form-field>
                    <div>
                      <button mat-button matStepperPrevious>Back</button>
                      <button mat-button matStepperNext>Next</button>
                    </div>
                  </form>
                </mat-step>
                <mat-step>
                  <ng-template matStepLabel>Done</ng-template>
                  You are now done.
                  <div>
                    <button mat-button matStepperPrevious>Back</button>
                    <button mat-button (click)="stepper.reset()">Reset</button>
                  </div>
                </mat-step>
              </mat-horizontal-stepper>
    

    create theme.scss file and add it to styles in angular.json

     "styles": [
              "src/styles.css",
              "src/theme.scss"
               ]
    

    note stepper will take color of primary color

    theme.scss

     @import '~@angular/material/theming';
     @include mat-core();
    
     .yellow-theme {
         $yellow-theme-primary: mat-palette($mat-yellow, 400);
         $yellow-theme-accent:  mat-palette($mat-yellow, 400);
    
         $yellow-theme: mat-light-theme($yellow-theme-primary, $yellow-theme-accent);
    
         @include angular-material-theme($yellow-theme);
     }
    

    Custom theme class can be used across application,just wrapp any material component and use color attribute primary,accent or warn as defined in class. Component that is wrapped in custom class wil use that color, if not color are set from global theme.

    0 讨论(0)
  • 2020-12-18 02:28

    error = true;
        .preenchimento-incompleto {
          background-color: black !important;
        }
    
        .preenchimento-ok {
          background-color: greenyellow !important;
        }
    <mat-step  id="idDadosPessoaisFormGroup5" name="idDadosPessoaisFormGroup5" [ngClass]="error ? 'preenchimento-incompleto' : 'preenchimento-incompleto'" [stepControl]="dadosPessoaisFormGroup">
            <form [formGroup]="dadosPessoaisFormGroup">
              <ng-template matStepLabel>DADOS<br> PESSOAIS</ng-template>
              <app-dados-pessoais [container]="stepper"></app-dados-pessoais>
            </form>
          </mat-step>

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