我已经开始在项目中使用md表,并且希望固定列宽。当前,所有列的宽度均分为相等的大小。
在哪里可以获得数据表维度的文档?
我已经开始在项目中使用md表,并且希望固定列宽。当前,所有列的宽度均分为相等的大小。
在哪里可以获得数据表维度的文档?
Answers:
当Material创建表时,它会自动为您应用两个类名,您可以使用它们来设置各列的样式。在下面的示例中,样式命名为mat-column-userId
和cdk-column-userId
。
<ng-container cdkColumnDef="userId">
<md-header-cell *cdkHeaderCellDef> ID </md-header-cell>
<md-cell *cdkCellDef="let row"> {{row.id}} </md-cell>
</ng-container>
现在,您可以在CSS中使用这些名称:
.mat-column-userId {
flex: 0 0 100px;
}
与Rahul Patil的答案类似,但是您不需要在列定义中添加其他类。
目前,它尚未在API级别公开。但是,您可以使用与此类似的方法来实现
<ng-container cdkColumnDef="userId" >
<md-header-cell *cdkHeaderCellDef [ngClass]="'customWidthClass'"> ID </md-header-cell>
<md-cell *cdkCellDef="let row" [ngClass]="'customWidthClass'"> {{row.id}} </md-cell>
</ng-container>
在CSS中,您需要添加此自定义类-
.customWidthClass{
flex: 0 0 75px;
}
在此处随意输入逻辑以添加类或自定义宽度。它将为列应用自定义宽度。
由于md-table使用flex
,我们需要以flex方式给出固定的宽度。这只是解释了-
0 =不增长(flex-grow的简写)
0 =不缩小(flex-shrink的简写)
75px =以75px开始(flex-basis的简写)
在这里here- https: //plnkr.co/edit/v7ww6DhJ6zCaPyQhPRE8 ? p = preview
如果在项目中使用角度/柔性布局,则可以通过向mat-header-cell和mat-cell添加fxFlex指令来设置列:
<ng-container matColumnDef="name" >
<mat-header-cell fxFlex="100px" *matHeaderCellDef mat-sort-header>Name</mat-header-cell>
<mat-cell fxFlex="100px" *matCellDef="let row;" (click)="rowClick(row)">{{row.Name}}</mat-cell>
</ng-container>
否则,您可以添加自定义CSS以获得相同的结果:
.mat-column-name{
flex: 0 0 100px;
}
我发现jymdman和Rahul Patil的答案最适合我:
.mat-column-userId {
flex: 0 0 75px;
}
另外,如果您有一个“前导”列想要始终在不同设备上占用一定数量的空间,那么我发现以下方法很容易以一种响应速度更快的方式应用于可用的容器宽度(这会迫使其余的列均匀使用剩余空间):
.mat-column-userName {
flex: 0 0 60%;
}
我正在使用FlexLayout根据FlexLayout提供给我们的查询媒体来更新列宽。
fxFlex="30" fxFlex.gt-xs="15" fxFlex.gt-sm="20" fxFlex.gt-md="25"
表示此列默认情况下将使用行宽度的30%,当gt-xs @mediaQuery满足时,新宽度将为15%,其他情况下的行为类似
<!-- CURRENTBALANCE COLUMN-->
<ng-container cdkColumnDef="balance_2">
<mat-header-cell fxFlex="30" fxFlex.gt-xs="15" fxFlex.gt-sm="20"
fxFlex.gt-md="25" fxLayout="row" fxLayoutAlign="center center"
*cdkHeaderCellDef>{{ balanceTable.datesHeaders[2] }}</mat-header-cell>
<mat-cell fxFlex="30" fxFlex.gt-xs="15" fxFlex.gt-sm="20" fxFlex.gt-md="25"
*cdkCellDef="let eventTop">
<div fxLayout="column" fxLayoutAlign="center center">
<!-- CELL_CONTENT-->
</div>
</mat-cell>
</ng-container>
<!-- CURRENTBALANCE COLUMN-->
在https://github.com/angular/flex-layout/wiki/Responsive-API上了解有关FlexLayout和@MediaQueries的更多信息
您现在可以像这样
<cdk-cell [style.flex]="'0 0 75px'">
.mat-column-skills {
max-width: 40px;
}
您还可以使用元素选择器:
mat-header-cell:nth-child(1), mat-cell:nth-child(1) {
flex: 0 0 64px;
}
但是在大多数情况下,jymdman的答案是最推荐的方法。
示例Mat-table列和相应的CSS:
HTML /模板
<ng-container matColumnDef="">
<mat-header-cell *matHeaderCellDef>
Wider Column Header
</mat-header-cell>
<mat-cell *matCellDef="let displayData">
{{ displayData.value}}
</mat-cell>`enter code here`
</ng-container>
的CSS
.mat-column-courtFolderId {
flex: 0 0 35%;
}
如果表格列过多,并且使用不能在角度表中进行调整md-table
,则将以下样式粘贴到component.css
文件中。水平滚动视图时,它将像超级按钮一样工作。
.mat-table__wrapper .mat-table {
min-width: auto !important;
width: 100% !important; }
.mat-header-row {
width: 100%; }
.mat-row {
width: 100%;
}
添加此样式可以单独更改列。
.mat-column-{colum-name} {
flex: 0 0 25% !important;
min-width: 104px !important;
}
可替换地检查这个链接,(其中,上面的代码是从哪里来的),对于更多的细节。
让我们举个例子。如果您的表具有以下列:
<!-- ID Column -->
<ng-container matColumnDef="id" >
<th mat-header-cell *matHeaderCellDef mat-sort-header> ID </th>
<td mat-cell *matCellDef="let row"> {{row.sid}} </td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Name </th>
<td mat-cell *matCellDef="let row"> {{row.name}} </td>
</ng-container>
由于这包含两列。然后我们可以使用设置列的宽度
.mat-column-<matColumnDef-value>{
width: <witdh-size>% !important;
}
在这个例子中,我们
.mat-column-id{
width: 20% !important;
}
.mat-column-name{
width: 80% !important;
}
我得到了一个非常简单的解决方案-通过覆盖单元格和标题单元格为样式表中的列设置不同的宽度:
示例-为第一和第五列设置自定义宽度:
.mat-cell:nth-child(1),
.mat-header-cell:nth-child(1) {
flex: 0 0 5%;
}
.mat-cell:nth-child(5),
.mat-header-cell:nth-child(5) {
flex: 0 0 10%;
}
.mat-header-cell
将优先。或者,您可以为标题单元格添加另一个样式规则。