无法在 Angular Material 表上设置高度。高度溢出容器

Posted

技术标签:

【中文标题】无法在 Angular Material 表上设置高度。高度溢出容器【英文标题】:Can't set height on Angular Material table.. height overflows container 【发布时间】:2019-08-26 12:41:18 【问题描述】:

我正在使用Angular Material table,并且在强制桌子达到一定高度时遇到了(很多)麻烦。现在,当有足够的数据提供给它时​​,该表正在溢出其容器。我想如果我给容器 div 一个固定的height(实际上我给了它一个固定的heightmax-height),那么我可以给它的孩子一个像height: 500px; 这样的东西。显然这不起作用 - 表格元素没有听我给它的任何高度。

我已经看到建议只给容器一个高度和overflow: auto;,它最终包含容器内的表格,但是<th> 没有固定在顶部并且滚动到视线之外,这不是我正在寻找的行为。我想在<tbody> 上放置一个滚动条并能够滚动它,但要将该滚动条与<th> 中的类别名称分开(应保持固定在顶部)。

这只是奇怪的 html 表格行为吗?我对 HTML 表格不太熟悉,但希望它们的行为与所有其他 HTML 元素一样。如何在不滚动整个内容的情况下将表格元素放入其容器中?

您可以找到我的代码来呈现下表:

// table.component.html

  <div class="table-container">
    <table [dataSource]="items" class="table" mat-table>
      <ng-container matColumnDef="id">
        <th mat-header-cell *matHeaderCellDef> ID </th>
        <td  mat-cell *matCellDef="let item"> item.id </td>
      </ng-container>

      <ng-container matColumnDef="name">
        <th mat-header-cell *matHeaderCellDef> Name </th>
        <td mat-cell *matCellDef="let item"> item.name </td>
      </ng-container>

      <ng-container matColumnDef="weight">
        <th mat-header-cell *matHeaderCellDef> Weight </th>
        <td mat-cell *matCellDef="let item"> item.weight </td>
      </ng-container>

      <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
      <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
    </table>
  </div>

// table.component.scss

.table-container 
  width: 100%;
  min-width: 445px;
  max-width: 1459px;
  height: 500px;
  max-height: 500px;
  border: 1px solid black;
  border-radius: 6px;
  box-sizing: border-box;


.table 
  width: 100%;
  height: 500px;
  max-height: 500px;
  line-height: 19px;
  font-size: 5.5px;
  border-collapse: collapse;

  td 
    border-bottom: none;
    padding: 30px;
  

  th 
    border-bottom: 1px solid #A4B8CA;
    padding: 30px;
  

【问题讨论】:

【参考方案1】:

我认为您应该为table-containerthead 使用位置

.table-container 
    position: relative;    

thead 
    position: absolute;
    top: 0;

【讨论】:

似乎没有工作,除非我错过了什么。它只是将表格主体放在标题下方。一切仍然溢出,将overflow-y: scroll 添加到容器中仍然会向上滚动标题。此外,它还为表头添加了一些奇怪的样式问题(例如,表头的宽度不再是表格宽度的 100%)【参考方案2】:

如果需要,我会删除 height 并保留 max-height 并添加 overflow 以滚动。

    .table-container 
      max-height: 500px;
      overflow: auto;
      ...
    

   .mat-header-row 
      position: sticky;
      top: 0;
      z-index: 100;
  

【讨论】:

我已经看到了这个推荐,就像我在问题中提到的那样,但是这个解决方案的问题是它会滚动表格标题。我需要表格标题保持固定在顶部,我想滚动表格主体 奇怪的是,mat-header-row 上的样式并没有做任何事情 - position: sticky; 并没有让它保持在顶部。另一个潜在的问题是我试图让我的滚动条只在表格的主体中,在标题下。下面的图片应该让您更好地了解我的意思imgur.com/ashrZb5【参考方案3】:

只需尝试替换以下标签&lt;table&gt;&lt;mat-table&gt;&lt;th mat-header-cell&gt;&lt;mat-header-cell&gt;&lt;td mat-cell&gt;&lt;mat-cell&gt;

然后添加样式

.mat-table 
  overflow: auto;
  max-height: 270px;

【讨论】:

无论如何也不能设置桌子的高度..!!【参考方案4】:

你只需要设置桌子高度。

别忘了粘性

<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>

在你的桌子上。

<div class="table-container">
    <table [dataSource]="items" class="table" mat-table>
      <ng-container matColumnDef="id">
        <th mat-header-cell *matHeaderCellDef> ID </th>
        <td  mat-cell *matCellDef="let item"> item.id </td>
      </ng-container>

      <ng-container matColumnDef="name">
        <th mat-header-cell *matHeaderCellDef> Name </th>
        <td mat-cell *matCellDef="let item"> item.name </td>
      </ng-container>

      <ng-container matColumnDef="weight">
        <th mat-header-cell *matHeaderCellDef> Weight </th>
        <td mat-cell *matCellDef="let item"> item.weight </td>
      </ng-container>
     <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
     <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
    </table>
  </div>

.scss 文件

table
  min-height: 500px;
  max-height: 500px;
  overflow: auto !important;

【讨论】:

以上是关于无法在 Angular Material 表上设置高度。高度溢出容器的主要内容,如果未能解决你的问题,请参考以下文章

无法导入“@angular/material”模块

Angular 2 Material无法加载样式

Angular Material Vertical Stepper 单一形式 .reset() 无法正常工作

Angular Material:如何将 floatPlaceholder 设置为从不

Angular Material步进线性验证无法按预期工作

尝试从 npm 安装 Angular 2 Material - 源文本中无法识别的标记