Angular 2 Material自定义md菜单

Pol*_*fox 9 html css angular-material2 angular

我是Angular 2 Material的新手,我正在尝试自定义md-menu组件的样式.

<md-icon class="material-icons" [mdMenuTriggerFor]="menu">dehaze</md-icon>
<md-menu #menu="mdMenu" [overlapTrigger]="false">
  <button md-menu-item>Item 1</button>
  <button md-menu-item>Item 2</button>
</md-menu>
Run Code Online (Sandbox Code Playgroud)

预定义的样式设置工作正常(例如将菜单设置为非重叠),但我想将md菜单设置为100%宽度并在md-icon按钮之间留出一点空间,这会扩展菜单,我不能使用Angular 2 Material预定义指令.

到目前为止,我找到了使用/ deep/css命令的解决方案,但我读到主要浏览器不再支持该命令.

定制Angular 2 Material组件的好方法是什么?我怎样才能设置我的md菜单样式,以便它具有100%的宽度和扩展按钮之间的一些空间?

为了说明我在说什么: 菜单草稿

Wil*_*ell 12

您可以将自定义类传递给菜单.

<md-menu #menu="mdMenu" [overlapTrigger]="false" class="my-full-width-menu">
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用全局样式定位该类.

不幸的是,根据您的需要,您需要了解有关菜单叠加位置的一些信息,并对某些重新定位进行硬编码

.mat-menu-panel.my-full-width-menu {
  max-width: none;
  width: 100vw;
  margin-left: -8px;
  margin-top: 24px;
}
Run Code Online (Sandbox Code Playgroud)

Plunker演示

正确的做到这一点的方法是创建与材料的OverlayModule定制覆盖组件(在材料封装电流,但很快就被移动到CDK).


nsk*_*nsk 6

在Angular中,ViewEncapsulation.Emulated是默认选项,这意味着它试图通过向主机元素等添加代理键来缩小影响范围.一个选项可能是添加到css下面.但是请注意,这个ng-deep也将很快被弃用.必须等待才知道替代方案!https://angular.io/guide/component-styles#deprecated-deep--and-ng-deep

::ng-deep .mat-menu-panel {
  max-width: none!important;
  min-width: 400px!important;
}
Run Code Online (Sandbox Code Playgroud)