禁用Mat菜单中的滚动条

时间:2019-01-16 10:25:40

标签: html css angular typescript angular-material

我正在尝试使材质菜单中的滚动条消失,但是我似乎无法做到这一点。

现在就这样:

As it is

如我所愿:

As i want it

我尝试了herehere提出的解决方案,但没有成功。

我知道我必须在css中设置的选项是overflow: hidden;,但是当我将其放入组件css中时,这似乎并没有解决问题。

我尝试将该选项设置为.mat-menu-panel.mat-menu甚至使用自定义类,但是它不起作用。

我的html看起来像这样:

<mat-table [dataSource]="dataSource">

      <ng-container matColumnDef="employee_name">
        <th mat-header-cell *matHeaderCellDef class="rest"> Nombre </th>
        <td mat-cell *matCellDef="let element"> {{element.employee_name}}</td>
      </ng-container>

      <ng-container matColumnDef="date">
        <th mat-header-cell *matHeaderCellDef class="rest"> Fecha </th>
        <td mat-cell *matCellDef="let element"> {{element.date | date:'yyyy-MM-dd'}}</td>
      </ng-container>

      <ng-container matColumnDef="duration">
        <th mat-header-cell *matHeaderCellDef class="rest"> Duración </th>
        <td mat-cell *matCellDef="let element"> {{element.duration}}</td>
      </ng-container>

      <ng-container matColumnDef="actions">
        <th mat-header-cell *matHeaderCellDef class="menu"></th>
        <td mat-cell *matCellDef="let element" (click)="$event.stopPropagation()">
          <button mat-icon-button [matMenuTriggerFor]="menu">
            <mat-icon>more_vert</mat-icon>
          </button>
          <mat-menu #menu="matMenu" class="menu-without-scroll">
            <button mat-menu-item (click)="editDuration(element)">
              <mat-icon>edit</mat-icon>
              <span>Editar</span>
            </button>
            <button mat-menu-item (click)="deleteDuration(element)">
              <mat-icon>delete</mat-icon>
              <span>Eliminar</span>
            </button>
          </mat-menu>
        </td>

      </ng-container>

      <tr mat-header-row *matHeaderRowDef="displayedComumns"></tr>
      <tr mat-row *matRowDef="let row; columns: displayedComumns;" (click)="onEdit(row)"></tr>
    </mat-table>

菜单在表格的单元格之一中。

从浏览器的开发人员工具中,如果我将.mat-menu-panel overflow: auto更改为overflow:hidden,它将正确呈现,但是如果我在.css中将其更改,将无法正常工作。

依赖关系(如果有帮助的话)是:

"dependencies": {
    "@angular/animations": "~7.0.0",
    "@angular/cdk": "^7.2.1",
    "@angular/common": "~7.0.0",
    "@angular/compiler": "~7.0.0",
    "@angular/core": "~7.0.0",
    "@angular/forms": "~7.0.0",
    "@angular/http": "~7.0.0",
    "@angular/material": "^7.2.1",
    "@angular/platform-browser": "~7.0.0",
    "@angular/platform-browser-dynamic": "~7.0.0",
    "@angular/router": "~7.0.0",
    "angular-material": "^1.1.12",
    "core-js": "^2.5.4",
    "hammerjs": "^2.0.8",
    "rxjs": "~6.3.3",
    "zone.js": "~0.8.26"
  },

如果需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:2)

因为,当您使用角度时,一个通用属性将在DOM中呈现,例如 ng-content会覆盖您用CSS编写的类属性,因此请尝试使用此代码,以消除要在application中使用的本机角度样式。

转到组件

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

然后

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

然后您的样式将由浏览器获取。

答案 1 :(得分:0)

我知道这个问题已经有几年了,但最后一个答案可能会导致 css 类从您自己的样式渗入到子元素中的严重问题。当然,您现在可以轻松地覆盖子组件的 css 样式,但这也意味着您可以轻松地无意中覆盖它们。除非绝对必要,否则不应使用 ViewEncapsulation.None

相反,最好使用 ::ng-deep (see the reference) 指定何时要覆盖子组件的样式。

就您而言,您可以执行以下操作:

::ng-deep .menu-without-scroll {
    overflow: hidden !important;
}

请注意,虽然 ::ng-deep 已被弃用,但目前没有替代方案,因此继续使用它是合理的。有关详细信息,请参阅 this answer