【问题标题】:mat-menu styles not being applied in angularmat-menu 样式未在 Angular 中应用
【发布时间】:2018-10-06 01:15:42
【问题描述】:

我正在尝试使用 angular material 和 flex css 在 angular 2 中创建一个简单的布局..

下面是我的代码...

<div  class="background" >

<mat-toolbar fxLayout="row"   fxLayoutAlign="space-between  none" >

<div  fxLayout="column" > 
<p>SPACE STUDY</p>
<h6>Rockefeller FY 2018</h6>

<div  fxShow="true" fxHide.gt-sm="true" fxLayout="column" fxLayoutAlign="start none">

 <h6 [matMenuTriggerFor]="dashboarditems">
  <mat-icon style="transform: scale(1.2);">line_weight</mat-icon> </h6>

  <mat-menu  class="mat-menu-panel"  [overlapTrigger]="true" #dashboarditems="matMenu"><br/><br/>
<a  routerLink='/home' routerLinkActive='active'>
<span matTooltip="HOME"><mat-icon style="color:lightgreen;">home</mat-icon></span></a><br/><br/><br/>

<a >
<span matTooltip="SPACE SURVEY"><mat-icon style="color:deeppink;">explore</mat-icon></span></a><br/><br/><br/>

<a  >
<span matTooltip="SPACE ADMIN"><mat-icon style="color:lightblue;">account_circle</mat-icon></span></a><br/><br/><br/>

<a >
<span matTooltip="REPORTS"><mat-icon style="color: orange;">assignment</mat-icon></span></a><br/><br/><br/>

<a >
<span matTooltip="JOINT USE"><mat-icon style="color:yellow;">supervisor_account</mat-icon></span></a><br/><br/><br/>

<a  >
<span matTooltip="HELP"><mat-icon style="color:red;">help</mat-icon></span></a><br/><br/><br/>
  </mat-menu>
</div>


</div>

<div fxLayout="row"  fxShow="true" fxHide.lt-md="true" >
<button mat-raised-button routerLink='/home' routerLinkActive='active'>
<span matTooltip="HOME"><mat-icon style="color:lightgreen;">home</mat-icon></span></button>

<button mat-raised-button >
<span matTooltip="SPACE SURVEY"><mat-icon style="color:deeppink;">explore</mat-icon></span></button>

<button mat-raised-button >
<span matTooltip="SPACE ADMIN"><mat-icon style="color:lightblue;">account_circle</mat-icon></span></button>

<button mat-raised-button >
<span matTooltip="REPORTS"><mat-icon style="color: orange;">assignment</mat-icon></span></button>

<button mat-raised-button  >
<span matTooltip="JOINT USE"><mat-icon style="color:yellow;">supervisor_account</mat-icon></span></button>

<button mat-raised-button >
<span matTooltip="HELP"><mat-icon style="color:red;">help</mat-icon></span></button>
</div>

</mat-toolbar>

</div>


<style>

.background {
/* Remember to use the other versions for IE 10 and older browsers! */
display: flex;
min-height: 100%;
font-family: 'verdana', sans-serif;
color: #fff;
height:100vh;
background: #222222;
background: #16222A; /* fallback for old browsers */
background: -webkit-linear-gradient(to top, #16222A , #3A6073); /* Chrome 10-25, Safari 5.1-6 */
background: linear-gradient(to top, #16222A , #3A6073); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
}

p{
font-size:20px;
font-weight:bold;
font-family: 'verdana', sans-serif;
margin:3px;
}

h6{
    font-size:12px;
    font-weight:bold;
    font-family: 'verdana', sans-serif;
}

.mat-raised-button{
    text-align:left;
    border-radius:10px;
    font-size:11px;
    font-weight:bold;
    font-family: 'verdana', sans-serif;
    color:white;
    background:transparent;
}

.mat-icon {
    transform: scale(1.5);
}

.matTooltip{
    font-size:11px;
    font-weight:bold;
    font-family: 'verdana', sans-serif;
    }

.mat-menu-panel {
    min-width: 35px;
    max-width: 280px;
    overflow: auto;
    -webkit-overflow-scrolling: touch;
    max-height: calc(100vh - 48px);
    border-radius: 2px;
    outline: 0;
    background: transparent;
    padding-left: 10px;
}
</style>

这是我的输出

这里我尝试将 mat-menu 容器的背景颜色更改为透明,并设置一些其他样式。

当我在控制台中更改时,它会被反射回来,如下所示

但是当我在我的代码中应用相同的更改时,样式并没有被应用。

我还尝试在组件和我添加 mat-menu 的 div 中显式添加 class="mat-menu-panel"。

但仍然没有应用样式..

谁能帮我修复这个样式..

请在此处访问我的示例代码。https://stackblitz.com/edit/angular-mat-formfield-flex-layout-vc3fsj?file=app%2Fapp.component.html

【问题讨论】:

  • 您的代码仍然损坏,请修复它
  • 你的 stackblitz sn-p 没有运行
  • 你能访问这个链接吗...stackblitz.com/edit/…
  • @Heena 不知道如何换种说法,该链接不起作用
  • mat-menu 的任何自定义样式最好在主题 .scss 文件中完成。在您的 style.scss 文件中,您已经为正文设置了规则,请尝试在其中添加 mat-menu 样式。一个很好的检查资源是这个blog.thoughtram.io/angular/2017/05/23/…

标签: angular angular-material angular-flex-layout


【解决方案1】:

您的 html 模板中不能有样式。您需要将它们放在单独的样式表中。完成此操作后,由于 Angular 的默认样式封装,它可能不适用于样式材料组件。

你可以

将样式设置为全局 styles.css 文件

样式.css

.mat-menu-panel {
min-width: 35px;

使用 ng-deep 组合器

将您的样式放入组件特定的样式表中

组件.css

:host ::ng-deep  .mat-menu-panel {
min-width: 35px;
/* ...*/

改变组件的封装

将您的样式放入组件特定的样式表中并更改组件的代码

组件.ts

@Component({
//...
 encapsulation: ViewEncapsulation.None 
 })

使用最后一个,样式将泄漏到整个应用程序(如在全局样式表中)

【讨论】:

  • 封装:ViewEncapsulation.None 根本不是一个好主意
  • 直接在类上应用你的 css 样式(.mat-menu-item、.mat-menu-wrapper 等)
  • 请注意,您已经可以执行以下操作 ::ng-deep.mat-menu-panel { ... }
【解决方案2】:

你能检查一下我在styles.scss中写了一些css样式吗 https://stackblitz.com/edit/angular-mat-formfield-flex-layout-lvns7f?file=styles.scss

【讨论】:

    【解决方案3】:

    随便用

    ::ng-deep.mat-menu-panel {}
    

    请注意,您可以直接处理以下类 .mat-menu-item、.mat.menu-wrapper 等 请注意,您不应在 componenet.scss 中的另一个 css 类中使用它们

    【讨论】:

      猜你喜欢
      • 2019-08-08
      • 2018-03-30
      • 2019-04-11
      • 1970-01-01
      • 2022-01-15
      • 2019-06-16
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多