角度材料2表头中心对齐

Posted

技术标签:

【中文标题】角度材料2表头中心对齐【英文标题】:angular material 2 table header center alignment 【发布时间】:2018-02-19 15:28:02 【问题描述】:

如果 md-sort-header 添加到 md-table 中的 md-header-cell 中,它总是左对齐。如何将标题单元格居中对齐,例如“名称”?

<md-header-cell *cdkHeaderCellDef md-sort-header style="text-align:center"> 
      Name 
</md-header-cell>

plnkr

【问题讨论】:

【参考方案1】:

如果您想逐列对齐标题和行单元格内容(允许列之间的不同对齐方式),您可以执行以下操作:

<mat-table>
    <ng-container matColumnDef="myColumn">
      <mat-header-cell *matHeaderCellDef> My Column </mat-header-cell>
      <mat-cell *matCellDef="let element"> element.myField </mat-cell>
    </ng-container>
...
.mat-column-myColumn
  display: flex !important;
  justify-content: flex-start !important; /* Left aligned*/

通过matColumnDef 中指定的名称应用对齐方式。

【讨论】:

【参考方案2】:

如果您不希望所有标题单元格对齐中心,您可以组合两个类:

.mat-header-cell.text-center  text-align: center; 

然后在html上:

<th mat-header-cell *matHeaderCellDef class="text-center">Actions</th>

【讨论】:

【参考方案3】:
.mat-header-cell     text-align: center;    

【讨论】:

【参考方案4】:

Angular Material 5.x.x 的更新,不再需要 ng-deep:

  mat-header-cell 
   display:flex;
   justify-content:flex-end;
  

DEMO


md-header-cell 被“翻译”为具有 class="mat-sort-header-container" 的容器。使用它,您可以使用ng-deep 设置其样式。使用 flexbox 将其内容居中。将以下内容放入组件样式表中:

::ng-deep .mat-sort-header-container 
  display:flex;
  justify-content:center;

DEMO

【讨论】:

效果很好。谢谢! 感谢您的回答,不过我确实必须在 Angular 7 中使用 ng-deep 示例。【参考方案5】:

我认为给定的问题解决方案在他们的方法上过于严格,我遇到了类似的问题,我需要更改 mat-sort-header-container 的一些 css 属性,但要动态更改。

我做了类似 Vega 的回答,但在风格的采用方式上略有不同:

::ng-deep .mat-sort-header-container
    justify-content: inherit;
    /* other inheritable properties */

它为其父级打开一些属性以设置您的html代码中的mat-header-cell 样式,因此无论您在mat-header-cell 和从其父级继承的ng-deep 中提供的任何样式,都只有那些样式,而没有别的这会沿着那个层次结构下去。

【讨论】:

【参考方案6】:

接受的答案是正确的。但是,::ng-deep 已贬值,将来可能会被丢弃 (official documentation)。

不推荐使用穿透阴影的后代组合器,支持 被从主要浏览器和工具中删除。因此,我们计划放弃 Angular 中的支持(适用于 /deep/、>>> 和 ::ng-deep 的所有 3 个)。直到 那么 ::ng-deep 应该是首选,以获得更广泛的兼容性 工具。

正确的方法是使用ViewEncapsulation。在您的 component.ts 中,添加以下内容:

import  ViewEncapsulation  from '@angular/core';

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

并覆盖您的 component.css 文件中的类:

.mat-sort-header-container 
  display:flex;
  justify-content:center;

【讨论】:

:ng-deep 没有被贬低!它只是 /deep/。封装可能会影响其他类 请阅读文档:The shadow-piercing descendant combinator is deprecated and support is being removed from major browsers and tools. As such we plan to drop support in Angular (for all 3 of /deep/, &gt;&gt;&gt; and ::ng-deep). 感谢您的解决方案!我想补充一点,如果您只想将一个表头居中,那么您可以使用上面概述的 css 创建您自己的自定义类,其名称为 mat-sort-header-container-centered,并将其分配给您的单元格,如下所示 &lt;md-header-cell *cdkHeaderCellDef md-sort-header class="mat-sort-header-container-centered"&gt; @DenissM。是的,完全正确:) 我也这样做,避免使用::ng-deep ::ng-deep 好用,真的贬值了吗?

以上是关于角度材料2表头中心对齐的主要内容,如果未能解决你的问题,请参考以下文章

角度材料弯曲中心和右对齐

Angular Material如何对齐布局中心

如何垂直对齐角度材料标签?

如何在角度材料中水平对齐单选按钮?

角度材料布局-对齐空间-在 IE 中不起作用

角度材料 MatButtonToggle 中的中心文本