Angular4 Material md-table 像正常一样自动调整列宽 Table
Angular4 Material md-table Column Width AutoSizing Like Normal Table
我在 Angular 4 应用程序中使用 md-table,因为我在 UI 格式的其他部分使用 Material。当我使用基本没有 CSS 的常规 table 时,列自动格式化以适应最宽的 td 元素。使用 md-table,所有列都设置为相同的宽度,除以总 table 宽度,除了太宽的单元格,然后它扩展单元格并推动该行中的其他单元格向右。我的常规 table:
<md-tab label="Data" >
<md-card class="datacard">
<md-card-content>
<div>
<table class="datatable">
....
</table>
</div>
</md-card-content>
</md-card>
</md-tab>
数据table css:
.datatable {
border: 1px solid black;
border-collapse: collapse;
font-size: 10px;
width: 100%;
overflow-y:scroll;
}
md-table:
<md-tab label="Data" >
<md-card class="datacard">
<md-card-content>
<div>
<div class="datatableheader">
<md-input-container floatPlaceholder="never" id="filtercontainer">
<input mdInput #filter placeholder="Filter services" />
</md-input-container>
</div>
<md-table id="datatable" #datatable [dataSource]="resultDataSource" mdSort>
<ng-container cdkColumnDef="Index">
<md-header-cell *cdkHeaderCellDef md-sort-header>Index</md-header-cell>
<md-cell *cdkCellDef="let result">{{result,Index}}</md-cell>
</ng-container>
<ng-container cdkColumnDef="Service">
<md-header-cell *cdkHeaderCellDef md-sort-header>Service</md-header-cell>
<md-cell *cdkCellDef="let result">{{result.Service}}</md-cell>
</ng-container>
<ng-container cdkColumnDef="Region">
<md-header-cell *cdkHeaderCellDef md-sort-header>Region</md-header-cell>
<md-cell *cdkCellDef="let result">{{result.Region}}</md-cell>
</ng-container>
</md-table>
<md-paginator #paginator
[length]="results.length"
[pageIndex]="0"
[pageSize]="25"
[pageSizeOptions]="[5, 10, 25, 100]">
</md-paginator>
</div>
</md-card-content>
</md-card>
</md-tab>
我已经通过设置 .mat-row { height: auto }
帮助解决了 overflow/overlap 文本的一些问题,但我真正想要的是让 table 执行相同的自动调整与正常的列 table。我试图弄乱 flex
属性 并将行和列的宽度重置为 initial
,但没有找到 css 的正确组合来取回table 元素的原始格式样式。
目前有一个未解决的问题。参见 this workaround。
.mat-table {
display: table;
width: 100%;
> .mat-header-row, > .mat-row {
display: table-row;
padding: 0;
border: none;
> .mat-header-cell, > .mat-cell {
display: table-cell;
height: 48px;
vertical-align: middle;
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
}
}
}
我在 Angular 4 应用程序中使用 md-table,因为我在 UI 格式的其他部分使用 Material。当我使用基本没有 CSS 的常规 table 时,列自动格式化以适应最宽的 td 元素。使用 md-table,所有列都设置为相同的宽度,除以总 table 宽度,除了太宽的单元格,然后它扩展单元格并推动该行中的其他单元格向右。我的常规 table:
<md-tab label="Data" >
<md-card class="datacard">
<md-card-content>
<div>
<table class="datatable">
....
</table>
</div>
</md-card-content>
</md-card>
</md-tab>
数据table css:
.datatable {
border: 1px solid black;
border-collapse: collapse;
font-size: 10px;
width: 100%;
overflow-y:scroll;
}
md-table:
<md-tab label="Data" >
<md-card class="datacard">
<md-card-content>
<div>
<div class="datatableheader">
<md-input-container floatPlaceholder="never" id="filtercontainer">
<input mdInput #filter placeholder="Filter services" />
</md-input-container>
</div>
<md-table id="datatable" #datatable [dataSource]="resultDataSource" mdSort>
<ng-container cdkColumnDef="Index">
<md-header-cell *cdkHeaderCellDef md-sort-header>Index</md-header-cell>
<md-cell *cdkCellDef="let result">{{result,Index}}</md-cell>
</ng-container>
<ng-container cdkColumnDef="Service">
<md-header-cell *cdkHeaderCellDef md-sort-header>Service</md-header-cell>
<md-cell *cdkCellDef="let result">{{result.Service}}</md-cell>
</ng-container>
<ng-container cdkColumnDef="Region">
<md-header-cell *cdkHeaderCellDef md-sort-header>Region</md-header-cell>
<md-cell *cdkCellDef="let result">{{result.Region}}</md-cell>
</ng-container>
</md-table>
<md-paginator #paginator
[length]="results.length"
[pageIndex]="0"
[pageSize]="25"
[pageSizeOptions]="[5, 10, 25, 100]">
</md-paginator>
</div>
</md-card-content>
</md-card>
</md-tab>
我已经通过设置 .mat-row { height: auto }
帮助解决了 overflow/overlap 文本的一些问题,但我真正想要的是让 table 执行相同的自动调整与正常的列 table。我试图弄乱 flex
属性 并将行和列的宽度重置为 initial
,但没有找到 css 的正确组合来取回table 元素的原始格式样式。
目前有一个未解决的问题。参见 this workaround。
.mat-table {
display: table;
width: 100%;
> .mat-header-row, > .mat-row {
display: table-row;
padding: 0;
border: none;
> .mat-header-cell, > .mat-cell {
display: table-cell;
height: 48px;
vertical-align: middle;
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
}
}
}