根据是否展开动态更改 mat-expansion-panel-header 的背景颜色

Dynamically change background color of mat-expansion-panel-header based on whether or not it is expanded

我一直在努力寻找一种方法来根据面板是否展开来动态更改 material 设计展开面板 header 的背景颜色。

当面板关闭时,我希望背景颜色为白色,但当它展开时,我想将该颜色更改为其他颜色。我没有看到可以根据此更改进行更改的内容,也许我遗漏了一些内容。我是 angular 的新手,我想我可以根据 [expanded] 的设置进行设置,但事实并非如此。

mat-accordion
mat-expansion-panel
mat-expansion-panel-header
mat-expanded{
  font-size: 1.25em;
  background-color: white;
  background: white;
  color: #00838f;
  font-weight: 500;
}



mat-accordion
mat-expansion-panel
mat-expansion-panel-header {
  font-size: 1.25em;
  background-color: white;
  background: white;

  color: #00838f;
  font-weight: 500;
}


  mat-accordion
  mat-expansion-panel
  .mat-expansion-panel-body {
  background-color: white;
  padding-top: 5px;
}
.mat-expansion-indicator::after {
  color: #00838f;
}
<mat-accordion multi="true">
<mat-expansion-panel [expanded]="selectedBenefitCategories.indexOf(cat)!=-1" [hidden]="selectedBenefitCategories.indexOf(cat)===-1">
  <mat-expansion-panel-header>
    <i class="search-category-icon far fa-star"></i> &nbsp; {{cat}}
  </mat-expansion-panel-header>
  <ng-template matExpansionPanelContent>

    some content

  </ng-template>
</mat-expansion-panel>
</mat-accordion>

Angular Material 会根据 expanding 状态添加动态 classes。

mat-expanded 就是您要找的人。问题是这个 class 也附加到面板内容。为了解决这个问题,您可以简单地将它与 .mat-expansion-panel-header class 选择器结合使用。

总结起来应该是这样的:

.mat-expansion-panel-header.mat-expanded {
  background: red;
}

Notice: Angular Material does also add background: inherit on the hover state.

如果这不是您想要的行为,只需像这样覆盖它:

.mat-expansion-panel-header.mat-expanded,
.mat-expansion-panel-header.mat-expanded:hover {
  background: red;
}

您必须提供比 angular material 提供的默认选择器更强大的 CSS 选择器。这意味着包括 angular 添加 background-color: inherit:

的所有州
.mat-expansion-panel-header.mat-expanded,
.mat-expansion-panel-header.mat-expanded:hover,
.mat-expansion-panel-header.mat-expanded:focus {
    background-color: red;
}

在@angular/material版本+10

encapsulation: ViewEncapsulation.None添加到@Component

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

那么任何CSS都会正常工作

.mat-expansion-panel-header.mat-expanded,
.mat-expansion-panel-header.mat-expanded:hover,
.mat-expansion-panel-header.mat-expanded:focus {
    background-color: red;
}

将此添加到您的 CSS 文件中,当扩展面板处于展开状态时,它将向扩展面板 header 添加红色背景。

.mat-expansion-panel.mat-expanded .mat-expansion-panel-header{
     background: red;
}