【问题标题】:Dynamically change background color of mat-expansion-panel-header based on whether or not it is expandedmat-expansion-panel-header 根据是否展开动态改变背景颜色
【发布时间】:2018-11-04 01:00:59
【问题描述】:

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

当面板关闭时,我希望背景颜色为白色,但当它展开时,我想将该颜色更改为其他颜色。我没有看到我可以基于此更改的东西,也许我错过了一些东西。我是 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>

【问题讨论】:

    标签: html css angular material-design angular6


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在@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;
      }
      

      【讨论】:

        【解决方案3】:

        您必须提供一个比 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;
        }
        

        【讨论】:

          【解决方案4】:

          Angular Material 确实添加了基于expanding 状态的动态类。

          mat-expanded 将是您正在寻找的那个。问题是这个类也附加到面板内容。为了解决这个问题,您可以简单地将其与.mat-expansion-panel-header 类选择器结合使用。

          总结起来应该是这样的:

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

          注意:Angular Material 也会在悬停状态下添加background: inherit

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

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

          【讨论】:

          • 不确定我是否在这里遗漏了什么,但我必须使用.mat-expansion-panel 而不是标题才能使其工作。否则,它会在展开其他面板/标题时突出显示先前展开的面板/标题。仍然赞成两者,因为它引导我朝着正确的方向前进。
          • @codeMagic 嘿,谢谢你的提示!可能是有什么变化,我会尽快检查并更新它。
          • .mat-expansion-panel.mat-expanded .mat-expansion-panel-header { ... } 适合我
          猜你喜欢
          • 2019-07-12
          • 2020-10-12
          • 2019-03-09
          • 2021-01-02
          • 2019-10-07
          • 2019-10-26
          • 2019-09-10
          • 1970-01-01
          • 2019-04-09
          相关资源
          最近更新 更多