为Angular Material表中的列添加下拉阴影



是否可以在Angular Material表的第一列添加下拉阴影?

我用::ng-deep或添加类尝试了几种方法,但都不太成功。

下面是我的基本代码。通过CSS的右边框显示在表格的第一列中,但不显示阴影。当我开始向右滚动时,边框消失了(我的第一列是粘性的)。

我想在第一列添加一个投影,滚动时不会被删除。

CSS

.column-shadow {
border-right: 1px solid $af-pinkish-grey !important;
box-shadow: 3px 3px 5px rgba(68, 68, 68, 0.6) !important;
}

<!-- action buttons -->
<ng-container matColumnDef="select" sticky>
<th mat-header-cell *matHeaderCellDef>
Action
</th>
<td
[ngClass]="'column-shadow'"
mat-cell
*matCellDef="let row; let index = index"
>
<!-- Select record -->
<mat-checkbox
color="primary"
(click)="$event.stopPropagation()"
(change)="selectRecord($event.checked, index)"
[checked]="selection.isSelected(row)"
[aria-label]="checkboxLabel(row)"
>
</mat-checkbox>
<span class="delete-edit-row">
<!-- Delete single record -->
<a
class="action-button"
mat-button
(click)="deleteSingleRecord(index)"
><img
class="close-button-image"
src="../../../assets/images/trashgrid.svg"
/></a>
</span>
</td>
</ng-container>

编辑

你应用css的方式似乎是正确的。对我来说,它不适用css的唯一原因可能是

  1. 我的旧答案
  2. 你的css没有被应用,因为shadow-dom

Shadow dom fix

请尝试在全局范围内添加css,例如在项目根目录下导入的styles.scss文件中。

如果它工作,你应该尝试通过添加encapsulation: ViewEncapsulation.None到你的@component指令来移除你的组件的阴影。

似乎你没有正确使用[ngClass]。如果你想添加一个类,那么做[class],而不是[ngClass]

这个答案确实解释了两者之间的区别,但基本上。

但是你应该把你的代码改成这个

<td
[class.column-shadow]="true"
mat-cell
*matCellDef="let row; let index = index"
>
<!-- Or -->
<td
class="column-shadow"
mat-cell
*matCellDef="let row; let index = index"
>
<!-- Or -->
<td
[ngClass]="{'column-shadow': true}"
mat-cell
*matCellDef="let row; let index = index"
>

[ngClass]

NgClass应该接收一个类名作为键和表达式的对象,其值为true或false。extra-sparkle是关键,ispleasant是值(布尔值)。

<div [ngClass]="{'column-shadow': true}">

(类),其值应该为true或false,以确定是否应该应用该类。

<div [class.column-shadow]="true">

额外小费

避免使用!important在你的css,因为它被认为是一个不好的做法。如果你必须的话,请添加评论;)