摆脱Angular Material模态对话框周围的空白区域

Dav*_*983 17 angular-material2 angular

我想摆脱Angular Material模态对话框中的空白区域.我如何设计CSS的样式,以便看不到任何白色?我的css到目前为止:

app-commission-me-dialog {
    margin: 0px;
    padding: 0px;
}

.mat-dialog-container {
    margin: 0px;
    padding: 0px;
}
Run Code Online (Sandbox Code Playgroud)

Fai*_*sal 51

更新的答案

从官方文档:

样式覆盖组件

基于叠加的组件具有panelClass属性(或类似属性),可用于定位覆盖窗格.

您可以通过在全局中添加css类来覆盖默认对话框容器样式styles.css.例如:

.custom-dialog-container .mat-dialog-container {
    /* add your styles */
}
Run Code Online (Sandbox Code Playgroud)

之后,您需要提供css class作为panelClass对话框的参数:

this.dialog.open(MyDialogComponent, { panelClass: 'custom-dialog-container' })
Run Code Online (Sandbox Code Playgroud)

链接到StackBlitz演示.阅读此官方文档以获取更多信息.


原始答案

使用ViewEncapsulation覆盖样式的默认样式.

在打开对话框的组件中,执行以下更改:

import {ViewEncapsulation} from '@angular/core';

@Component({
  .....,
  encapsulation: ViewEncapsulation.None 
})
Run Code Online (Sandbox Code Playgroud)

并在该组件的css文件中,添加以下类:

.mat-dialog-container {
    padding: 0px !important;
}
Run Code Online (Sandbox Code Playgroud)

这是Plunker Demo的链接.

  • 这是一个非常蛮力的方法,因为它将填充*all*材料对话框!相反,在对话框的`panelClass`配置中添加类似`app-full-bleed-dialog`的类.然后在你的*全局样式*中,使用`.app-full-bleed-dialog .mat-dialog-container`选择器添加覆盖. (7认同)

Wil*_*ell 24

我对所选答案做了评论,但我想在一个完整的答案中澄清一下.如果向组件添加对话框样式并将ViewEncapsulation设置为None,则这些样式将全局影响整个应用程序,并且将来的任何对话框都将打开而不进行填充.

而是选择使用对话框的panelClass属性:

component.ts

this.dialog.open(MyDialogComponent, {
  panelClass: 'app-full-bleed-dialog', 
  data: ...
});
Run Code Online (Sandbox Code Playgroud)

全局样式表

.app-full-bleed-dialog .mat-dialog-container {
  padding: 0;
}
Run Code Online (Sandbox Code Playgroud)

这样,您仍然可以对对话框组件样式进行封装,并且可以app-full-bleed-dialog根据需要有选择地重用您的类.

要阅读有关自定义材料组件的更多信息,请查看本指南.

  • 提供ViewEncapsulation仅用于将组件的样式范围限定为自身.OP询问(换句话说)如何设置_different_组件的样式.您加载到对话框中的组件是`.mat-dialog-container`的子组件,因此它无法在不使用全局样式的情况下定位该选择器.无论如何,这正是"无"所做的,这就是它起作用的原因.所以是的,你的方法是有效的,但**没有可能**确保只有一个对话框受到影响......如果你可以使用2个对话框进行演示,一个没有填充,一个有,_without使用panelClass_,I我会承认. (3认同)