如何样式 Angular Material select 下拉覆盖
How to style Angular Material select drop down overlay
我有一个名为 currency-select 的 angular 组件,它有自己的 css 文件,如下所示:
.currency-select {
position: absolute;
top: 5px;
right: 80px;
z-index: 1000000;
color: #DD642A;
font-size: 17px;
padding-right: 16px;
width: 130px;
}
.mat-form-field {
display: block;
}
这完全符合 selector 的预期,直到它被点击并出现下拉菜单。 html如下:
<div class="currency-select">
<mat-form-field *ngIf=loaded>
<mat-select [formControl]="currencyForm" placeholder="Select Currency">
<select-search (search)="filterCurrencyOptions($event)" #selectSearch (keydown)="$event.stopPropagation()" >
</select-search>
<mat-option *ngFor="let currency of filteredCurrencies" [value]="currency.counter_currency_code" (click)="updateCurrency()">
<flag-icon country="{{ (currency.counter_currency_iso_2 || '').toLowerCase() }}"></flag-icon> {{currency.counter_currency_code}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
当我点击货币 select 时,下拉菜单没有按我希望的方式显示,而且我似乎无法在货币 select.component.html 文件中添加任何内容改变它,相反,它似乎采用了不同的 div 标签 "cdk-overlay-container".
的样式
任何人都可以建议我如何在 currency-select css 文件中为此编写 css 吗?我试过使用 !important 但这也不起作用。
尝试使用 ng-deep
::ng-deep .your-class-name {
...
}
PS:ng-deep 将在以后的版本中弃用。 W3C 尚未为其定义 'replacement'。
答案更新 (07-07-2021):如果您不想使用 ng-deep(已弃用),请使用 ViewEncapsulation.None:angular.io/guide/component-styles#deprecated-deep--and-ng-deep
要设置下拉叠加层的样式,请使用 mat-select
输入 panelClass
添加一个 class。
<mat-select panelClass="myPanel">
然后使用::ng-deep
:
::ng-deep .myPanel.mat-select-panel {
background-color: darkslategray;
}
或为组件禁用 ViewEncapsulation:
@Component({
selector: 'select-panel-class-example',
templateUrl: 'select-panel-class-example.html',
styleUrls: ['select-panel-class-example.css'],
encapsulation: ViewEncapsulation.None,
})
.myPanel.mat-select-panel {
background-color: darkslategray;
}
我有一个名为 currency-select 的 angular 组件,它有自己的 css 文件,如下所示:
.currency-select {
position: absolute;
top: 5px;
right: 80px;
z-index: 1000000;
color: #DD642A;
font-size: 17px;
padding-right: 16px;
width: 130px;
}
.mat-form-field {
display: block;
}
这完全符合 selector 的预期,直到它被点击并出现下拉菜单。 html如下:
<div class="currency-select">
<mat-form-field *ngIf=loaded>
<mat-select [formControl]="currencyForm" placeholder="Select Currency">
<select-search (search)="filterCurrencyOptions($event)" #selectSearch (keydown)="$event.stopPropagation()" >
</select-search>
<mat-option *ngFor="let currency of filteredCurrencies" [value]="currency.counter_currency_code" (click)="updateCurrency()">
<flag-icon country="{{ (currency.counter_currency_iso_2 || '').toLowerCase() }}"></flag-icon> {{currency.counter_currency_code}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
当我点击货币 select 时,下拉菜单没有按我希望的方式显示,而且我似乎无法在货币 select.component.html 文件中添加任何内容改变它,相反,它似乎采用了不同的 div 标签 "cdk-overlay-container".
的样式任何人都可以建议我如何在 currency-select css 文件中为此编写 css 吗?我试过使用 !important 但这也不起作用。
尝试使用 ng-deep
::ng-deep .your-class-name {
...
}
PS:ng-deep 将在以后的版本中弃用。 W3C 尚未为其定义 'replacement'。
答案更新 (07-07-2021):如果您不想使用 ng-deep(已弃用),请使用 ViewEncapsulation.None:angular.io/guide/component-styles#deprecated-deep--and-ng-deep
要设置下拉叠加层的样式,请使用 mat-select
输入 panelClass
添加一个 class。
<mat-select panelClass="myPanel">
然后使用::ng-deep
:
::ng-deep .myPanel.mat-select-panel {
background-color: darkslategray;
}
或为组件禁用 ViewEncapsulation:
@Component({
selector: 'select-panel-class-example',
templateUrl: 'select-panel-class-example.html',
styleUrls: ['select-panel-class-example.css'],
encapsulation: ViewEncapsulation.None,
})
.myPanel.mat-select-panel {
background-color: darkslategray;
}