стили mat-menu не применяются в angular

Я пытаюсь создать простой макет в angular 2, используя угловой материал и гибкий CSS ..

Ниже мой код ...

<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 на прозрачный, а также установить некоторые другие стили.

Когда я меняю консоль, она отражается, как показано ниже.

введите здесь описание изображения

Но когда я применил те же изменения в своем коде, стили не применяются.

Я также пытаюсь явно добавить class = "mat-menu-panel" в компонент и div, в котором я добавил mat-menu.

Но до сих пор стили не применяются ..

кто-нибудь может помочь мне исправить этот стиль ..

пожалуйста, получите доступ к моему образцу кода здесь .. https://stackblitz.com/edit/angular-mat-formfield-flex-layout-vc3fsj?file=app%2Fapp.component.html


person Heena    schedule 25.04.2018    source источник
comment
все еще ваш код не работает, пожалуйста, исправьте это   -  person Chellappan வ    schedule 25.04.2018
comment
Ваш фрагмент stackblitz не запускается   -  person bugs    schedule 25.04.2018
comment
можете ли вы получить доступ к этой ссылке ... stackblitz .com / edit /   -  person Heena    schedule 25.04.2018
comment
@Heena не знает, как это сформулировать по-другому, эта ссылка не работает   -  person bugs    schedule 25.04.2018
comment
Любой пользовательский стиль для mat-меню лучше всего делать в файле темы .scss. В вашем style.scss файле вы уже поместили правила для тела, попробуйте добавить туда стили mat-menu. Хороший ресурс для проверки - это blog.oughttram.io/angular/2017/05/23/   -  person arsanyf    schedule 26.07.2018


Ответы (3)


В вашем шаблоне html не может быть стилей. Вам нужно поместить их в отдельную таблицу стилей. Как только вы это сделаете, это может не работать для стилизации компонентов материала из-за инкапсуляции стиля по умолчанию angular.

Вы можете

установить стили в глобальный файл styles.css

Style.css

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

используйте комбинатор ng-deep

Поместите свои стили в таблицу стилей для конкретного компонента

Component.css

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

Измените инкапсуляцию компонента

Поместите свои стили в таблицу стилей для конкретного компонента и измените код компонента.

Component.ts

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

С этим последним стили будут просачиваться во все приложение (как в глобальной таблице стилей).

person David    schedule 25.04.2018
comment
инкапсуляция: ViewEncapsulation.None - это вообще не лучшая идея - person Smaillns; 21.07.2020
comment
просто примените стиль css непосредственно к классу (.mat-menu-item, .mat-menu-wrapper и т. д.) - person Smaillns; 21.07.2020
comment
обратите внимание, что вы уже можете сделать следующее :: ng-deep.mat-menu-panel {...} - person Smaillns; 21.07.2020

Можете ли вы проверить это, я написал некоторый стиль css внутри styles.scss https://stackblitz.com/edit/angular-mat-formfield-flex-layout-lvns7f?file=styles.scss

person Chellappan வ    schedule 25.04.2018

Просто используйте

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

обратите внимание, что вы можете напрямую обрабатывать следующие классы .mat-menu-item, .mat.menu-wrapper и т. д. Обратите внимание, что вы не должны использовать их внутри другого класса css в компоненте.scss

person Smaillns    schedule 21.07.2020