'Material table cells with specific width according to predefined length

I will show my code first.

<ng-container matColumnDef="position">
   <th mat-header-cell *matHeaderCellDef> No. </th>
   <td mat-cell *matCellDef="let element"> {{element.position}} </td>
</ng-container>

Everything works fine, my requirement is to display text but just a fixed length of it. For example, if I have a text that is 50 characters long, the requirement is to display 40. I have many cells in each row, many cells of fixed length.

To clarify, here my difficulty is how to set width with some text length, I saw many examples but the column width was set in the CSS file. How can I achieve that? Thanks in advance.



Solution 1:[1]

One simple way to achieve this is to set the width of the td via Angular's built in [ngStyle] with some calculation of the element's length.

<ng-container matColumnDef="name">
    <th mat-header-cell *matHeaderCellDef> Name </th>
    <td mat-cell *matCellDef="let element"
      [ngStyle]="{'max-width': ((element.name.length) - 20) + 'ch', 'overflow': 'hidden' }">
      {{element.name}}</td>
</ng-container>

Here the max-width (in ch, see MDN) of the element is defined by element.name.length minus 20 (specify as you like). Also overflow: hidden is set, so the rest of the text won't be shown inside the table cell.

See below for the differences between a fixed table and normal table.

Fixed table

Fixed table with smaller td set

Normal table

Normal table, no smaller td set

Here's a StackBlitz to illustrate above.

Solution 2:[2]

Try this, You can set maxCharLength as per your requirements. Also mat-table doesn't need <th> or <td> tags.

<ng-container  matColumnDef="position">
        <mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
        <mat-cell *matCellDef="let element" [innerHTML]="element.position" [maxCharLength]="40">
        </mat-cell>
</ng-container>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Niromy