Why am I unable to apply a border to an angular mat-table row?
Your styling problems don't have to do with Angular Material tables but with HTML tables in general. If you search for how to style a table
e.g. add borders to rows or margins you'll find various answers and suggestions.
You basically can't add margin
or padding
to a table row <tr>
directly.
margin
applies to all elements except elements with table display types other than table-caption, table and inline-table.
padding
applies to all elements except table-row-group, table-header-group, table-footer-group, table-row, table-column-group and table-column.
Solutions
How you set a border
for table rows and specify a margin
and padding
depends on the border model (collapse
or separate
) you use.
The separated borders model: border-collapse: seperate
In the separated borders model, the edges coincide with the border edges of cells. (And thus, in this model, there may be gaps between the rows, columns, row groups or column groups, corresponding to the 'border-spacing' property.)
In this model, each cell has an individual border. The 'border-spacing' property specifies the distance between the borders of adjoining cells. (...) Rows, columns, row groups, and column groups cannot have borders (i.e., user agents must ignore the border properties for those elements).
1. Solution: If you want a border, margin and padding you could do something like this:
td.mat-cell {
/* row padding */
padding: 16px 0;
/* row border */
border-bottom: 1px solid #ffa600;
border-top: 1px solid #ffa600;
}
td.mat-cell:first-child {
/* row border */
border-left: 1px solid #ffa600;
}
td.mat-cell:last-child {
/* row border */
border-right: 1px solid #ffa600;
}
table {
/* row spacing / margin */
border-spacing: 0 8px !important;
}
https://stackblitz.com/edit/angular-cjxcgt-wtkfg4
The collapsing border model: border-collapse: collapse
The edges of the rows, columns, row groups and column groups in the collapsing borders model coincide with the hypothetical grid lines on which the borders of the cells are centered. (And thus, in this model, the rows together exactly cover the table, leaving no gaps; ditto for the columns.)
In the collapsing border model, it is possible to specify borders that surround all or part of a cell, row, row group, column, and column group. (...) Also, in this model, a table does not have padding (but does have margins).
2. Solution: If you only want a row border and padding but no spacing / margin between the rows you could do:
table {
border-collapse: collapse;
}
th {
/* row border */
border-bottom: 1px solid #ffa600;
}
td.mat-cell {
/* row padding */
padding: 20px 0;
border: none;
}
tr.mat-row {
/* row border */
border: 1px solid #ffa600;
}
https://stackblitz.com/edit/angular-cjxcgt-xphbue
mat-footer-row, mat-header-row, mat-row {
border-bottom-width: 10px;
}
try this code. This will work :)