带有 X 右上角的 Angular 8 材质对话框关闭按钮

Jon*_*han 20 html css typescript angular-material angular

我试图让我的材质对话框在右上角有一个 X 按钮,但我遇到了定位问题。

组件.ts

this.d.open(loginComponent, {
  width: '300px',
  height: '',
  panelClass: 'dialogC',
});
Run Code Online (Sandbox Code Playgroud)

组件.html

<mat-dialog-content>
    <button mat-button class="close-icon" [mat-dialog-close]="true">
        <mat-icon>close</mat-icon>
    </button>
    <h2 mat-dialog-title>Login</h2>
Run Code Online (Sandbox Code Playgroud)

样式文件

.dialogC {
  position: relative !important;
}

.close-icon {
  position: absolute;
  top: 0;
  right: 0;
  transform: translate(50%, -50%);
}
Run Code Online (Sandbox Code Playgroud)

X 仅与左侧对齐,而不是与右上角对齐。建议?

更新,这是我添加 flex 后遇到的问题:

在此处输入图片说明

小智 20

<button class="close" mat-button (click)="onNoClick()">X</button>
<h1 mat-dialog-title>Login</h1>
<div mat-dialog-content>
...
...
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:(请在全局(styles.css)中给出ViewEncapsulation.NONE,否则这些样式不会影响。)

.cdk-overlay-pane.my-dialog {
  position: relative!important;
}
.close.mat-button {
  position: absolute;
  top: 0;
  right: 0;
  padding: 5px;
  line-height: 14px;
  min-width: auto;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在 CSS 中,我们现在凭空创建了一个新类 .my-dialog

所以,请panelClassdialogRef下面提到,

this.dialog.open(DialogComponent, {
      width: '250px',
      panelClass: 'my-dialog',
..
..
Run Code Online (Sandbox Code Playgroud)

这给我带来了以下结果,

在此处输入图片说明


Ale*_*oti 16

使用mat-icon-button时只需要将下面的样式添加到按钮中即可。

.close-button{
  float: right;
  top:-24px;
  right:-24px;
}
Run Code Online (Sandbox Code Playgroud)

功能示例:

闪电战


小智 7

现在最简单的方法是:

<div mat-dialog-title class="dialog-title">
  <h2>Title</h2>
  <button mat-icon-button aria-label="close dialog" mat-dialog-close>
    <mat-icon>close</mat-icon>
  </button>
</div>
Run Code Online (Sandbox Code Playgroud)

对话框标题 css 是

.dialog-title {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
Run Code Online (Sandbox Code Playgroud)

这适用于 Angular 8.0.0