web-dev-qa-db-fra.com

Angular - Matériel: couleur personnalisée Progressbar?

J'essaye maintenant pendant des heures. J'utilise Material2 et je veux simplement changer la couleur de la barre de progression. Je sais qu'il y a ces thèmes (primaire/accent/avertir) mais je veux avoir une couleur sur mesure (vert) pour ma barre de progression.

J'ai déjà essayé les combinaisons css les plus étranges .. mais sans effort. Peut-être que quelqu'un a eu le même problème?

7
Mka24

Je peux suggérer de changer l’une des couleurs prédéfinies primaires/avertir/accentuer à votre couleur personnalisée.

Dans votre styles.scss (si votre fichier de style est css, vous devrez le changer pour supporter scss):

  @import '~@angular/material/theming';
  // Plus imports for other components in your app.

  // Include the common styles for Angular Material. We include this here so that you only
  // have to load a single css file for Angular Material in your app.
  // Be sure that you only ever include this mixin once!
  @include mat-core();

  // Define the palettes for your theme using the Material Design palettes available in palette.scss
  // (imported above). For each palette, you can optionally specify a default, lighter, and darker
  // hue.

  $mat-blue: (
    50: #e3f2fd,
    100: #bbdefb,
    200: #90caf9,
    300: #64b5f6,
    400: #42a5f5,
    500: #2196f3,
    600: #1e88e5,
    700: #1976d2,
    800: #1565c0,
    900: #0d47a1,
    A100: #82b1ff,
    A200: #448aff,
    A400: #2979ff,
    A700: #2B66C3,
    contrast: (
      50: $black-87-opacity,
      100: $black-87-opacity,
      200: $black-87-opacity,
      300: $black-87-opacity,
      400: $black-87-opacity,
      500: white,
      600: white,
      700: white,
      800: $white-87-opacity,
      900: $white-87-opacity,
      A100: $black-87-opacity,
      A200: white,
      A400: white,
      A700: white,
    )
  );

  $candy-app-primary: mat-palette($mat-blue, A700);
  $candy-app-accent:  mat-palette($mat-orange, A200, A100, A400);

  // The warn palette is optional (defaults to red).
  $candy-app-warn:    mat-palette($mat-red);

  // Create the theme object (a Sass map containing all of the palettes).
  $candy-a-theme($candy-app-theme);
pp-theme: mat-light-theme($candy-app-primary, $candy-app-accent, $candy-app-warn);

  // Include theme styles for core and each component used in your app.
  // Alternatively, you can import and @include the theme mixins for each component
  // that you are using.
  @include angular-material
2
TheUnreal

Vous pouvez utiliser le sélecteur ::ng-deep pour obtenir ce que vous voulez, cette réponse contient des informations à ce sujet.

Comment je l'ai fait:

CSS

::ng-deep .mat-progress-bar-fill::after {
    background-color: #1E457C;
}

::ng-deep .mat-progress-bar-buffer {
    background: #E4E8EB;
}

::ng-deep .mat-progress-bar {
    border-radius: 2px;
}

HTML

<mat-progress-bar  mode="determinate" value="{{progress}}"></mat-progress-bar>

Et le résultat est le suivant:

 enter image description here

12
Simonca

Mettre à jour: 

Évitez d’utiliser deep, TL; DR: Deep est techniquement invalide (comme, deprécié: p)

Pour plus d’informations, voir: Utilisation de/deep/et >>> dans Angular 2

Maintenant, pour changer la couleur de la barre de progression du tapis, Voici comment je le fais fonctionner, 

Rendez-vous sur votre fichier styles.scss (ou sur le fichier css/scss principal de votre projet)

Ajouter cette classe -> 

.green-progress .mat-progress-bar-fill::after {
    background-color: green !important;
}

Votre tapis-progress devrait utiliser la classe ci-dessus, comme -> 

<mat-progress-bar class="green-progress" mode="indeterminate"></mat-progress-bar>
4
Meet Dave

Pour moi il me suffit de mettre en CSS cette règle: 

div.mat-progress-bar-primary.mat-progress-bar-fill.mat-progress-bar-element::after{ background-color: green; }

Mais c'est clairement plus facile si vous utilisez un thème.

0
Luiz Rossi

Puisque personne n'a mentionné jusqu'à présent ...

Il est comment je l'ai résolu.

@Meet Dave a raison sur son approche. Mais vous devriez utiliser encapsulation: ViewEncapsulation.None (désactive les modules css)

Quelque chose comme ça:

Composant

@Component({
  selector: '...',
  templateUrl: '...',
  styleUrls: ['...'],
  encapsulation: ViewEncapsulation.None,
})

Sass (dans mon cas)

.audio-progress-bar {
  &.mat-progress-bar {
    height: 10px;
  }

  .mat-progress-bar-fill::after {
    background-color: #37474f;
  }

  .mat-progress-bar-buffer {
    background-color: #90a4ae;
  }

  /* remove animation and the dots*/ 
  .mat-progress-bar-background {
    animation: none;
    background-color: #eceff1;
    fill: #eceff1;
  }
}

Vue

<mat-progress-bar
  class="audio-progress-bar"
  mode="buffer"
></mat-progress-bar>
0
Ventura

Angulaire 7 et matériau 7.1.1

 ::ng-deep .mat-progress-spinner circle, .mat-spinner circle{
        stroke: green !important; 
}
0
Srihari GouthamGr