Ich habe ein Mat-Form-Feld mit Eingaben, denen ich einen benutzerdefinierten Stil hinzufügen möchte. Ich kann jedoch keine Dokumentation auf der offiziellen Angular Material-Website finden.
Mein letztes Ziel ist es:
Ich bin mit Angular noch nicht der Kenner, aber wenn sich in JS etwas ändern muss, kann ich immer mein Bestes geben.
Ich brauche nur eine kleine Anleitung.
Aktueller Code:
<form class="search-form">
<mat-form-field class="example-full-width">
<input class="toolbar-search" type="text" matInput>
<mat-placeholder>Search</mat-placeholder>
<mat-icon matSuffix style="font-size: 1.2em">search</mat-icon>
</mat-form-field>
</form>
Aktuelles CSS:
// Change text colour when inputting text
.toolbar-search, mat-placeholder {
color: white;
}
// Changes the underline and placeholder colour before input is selected
/deep/ .mat-input-underline {
background-color: white;
}
Nach meinem Verständnis scheinen beide Funktionen in MatFormField zu sein.
[floatLabel]
für FloatLabelType ('never', 'always', 'auto'
) ist und mit der Eingabe angewendet wird [color]
ändern, Sie können jedoch nur Farben aus Ihrem Design auswählen ('primary', 'accent', 'warn'
). Weitere Informationen zum Einrichten des Themas finden Sie unter deren Website hier , <form class="search-form">
<mat-form-field class="example-full-width"
floatLabel="never" color="primary">
<input class="toolbar-search" type="text" matInput placeholder="search">
<mat-icon matSuffix style="font-size: 1.2em">search</mat-icon>
</mat-form-field>
</form>
Sie können den von Ihnen verwendeten CSS-Selector verwenden:
/deep/ .mat-input-underline {
background-color: white;
}
Der/deep/Kombinator ist in Angular für die Abwertung vorgesehen. Leider ist die .mat-input-underline von Angular Material hoch spezifiziert, was das Überschreiben ohne/deep/sehr schwierig macht.
Die beste Methode, die ich gefunden habe, ist die Verwendung einer ID, die eine höhere Spezifität im Vergleich zu den Standardformaten für Winkelmaterial ermöglicht.
<form id="search-form" [formGroup]="form" (ngSubmit)="submit()">
<mat-form-field>
<mat-placeholder class="placeholder">Search</mat-placeholder>
<input type="text" class="toolbar-search" matInput formControlName="search">
<mat-icon matSuffix>search</mat-icon>
</mat-form-field>
Dann kann Ihre Suchformular-ID verwendet werden, um die Eingabe als Ziel festzulegen. Sie können die Matte-Form-Feld-Unterstreichung in der Komponente "Komponente.scss" nicht anvisieren, ohne die Ansichtskapselung zu unterbrechen. Dies ist auf globaler Ebene einfacher, indem Sie dies zu Ihrer global.scss hinzufügen
global.scss:
#search-form {
.mat-form-field-underline {
background-color: $accent;
}
.mat-form-field-ripple {
background-color: $accent;
}
.placeholder {
display: none;
}
}
Ich hoffe, dass das Angular Material-Team in Zukunft seine Spezifität zurückzieht, da es derzeit keine einfache Möglichkeit gibt, die Standardeinstellungen zu überschreiben.
Um die Stile der Materialeingaben mit scss zu ändern:
Standard:
::ng-deep .mat-form-field {
.mat-input-element {
color: slategray;
}
.mat-form-field-label {
color: slategray;
}
.mat-form-field-underline {
background-color: slategray;
}
.mat-form-field-ripple {
background-color: slategray;
}
.mat-form-field-required-marker {
color: slategray;
}
}
Focused: (wenn ausgewählt)
::ng-deep .mat-form-field.mat-focused {
.mat-form-field-label {
color: #ff884d;
}
.mat-form-field-ripple {
background-color: #ff884d;
}
.mat-form-field-required-marker {
color: #ff884d;
}
.mat-input-element {
color: #ff884d;
}
}
Ungültig:
::ng-deep .mat-form-field.mat-form-field-invalid {
.mat-input-element {
color: #ff33cc;
}
.mat-form-field-label {
color: #ff33cc;
.mat-form-field-required-marker {
color: #ff33cc;
}
}
.mat-form-field-ripple {
background-color: #ff33cc;
}
}
sie können auch ViewEncapsulation.None
verwenden, um ::ng-deep
zu vermeiden, dh veraltet
import { ViewEncapsulation } from '@angular/core';
@Component({
...
encapsulation: ViewEncapsulation.None
})