I am trying to implement both column resize and stick header. But sticky header works fine if I won't use the column resize. If I implement both, column resize is working but sticky header is not working.
I used the following css from primeng for the sticky header.
:host ::ng-deep .ui-table .ui-table-thead > tr > th {
position: -webkit-sticky;
position: sticky;
top: 70px;
}
@media screen and (max-width: 64em) {
:host ::ng-deep .ui-table .ui-table-thead > tr > th {
top: 100px;
}
}
and for the colum resize I used the below code, [resizableColumns]="true"
, pResizableColumn
<p-table [columns]="cols" [value]="cars1" [resizableColumns]="true">
...
<th *ngFor="let col of columns" pResizableColumn>
If I remove the resizbleColumns
and pResizableColumn
sticky header works fine. How can I make it works both things.? Here is the stackblitz and Demo
when you set the p-table columns to be resizable the add a class ui-table-resizable
this will reset some css property one of its the position of th
to relative so you will lose sticky future
this should fix the problem
:host ::ng-deep .ui-table .ui-table-thead > tr > th {
position: -webkit-sticky;
position: sticky;
background: blue;
color: white;
top: 0px;
z-index: 1;
}
:host ::ng-deep .ui-table-resizable > .ui-table-wrapper {
overflow-x: initial !important;
}
:host ::ng-deep .ui-table-resizable .ui-resizable-column {
position: sticky !important;
}
@media screen and (max-width: 64em) {
:host ::ng-deep .ui-table .ui-table-thead > tr > th {
top: 0px;
}
}
demo ๐ฅ๐ฅ
Updated! ๐๐
add the style in the component decorator is not reusable ,base of primeng theme recommendation of creating custom style we can do like this
style.scss
.sticky-table {
&.ui-table .ui-table-thead > tr > th {
position: -webkit-sticky;
position: sticky !important;
background: blue;
color: white;
top: 0px;
z-index: 1;
}
&.ui-table-resizable > .ui-table-wrapper {
overflow-x: initial !important;
}
&.ui-table-resizable .ui-resizable-column {
position: sticky !important;
}
@media screen and (max-width: 64em) {
.ui-table .ui-table-thead > tr > th {
top: 0px;
}
}
}
template
<p-table styleClass="sticky-table" [columns]="cols" [value]="cars [resizableColumns]="true">
....
</p-table>
demo โกโก
Anyone who still might be interested:
For me it worked by just adding the following
:host ::ng-deep .p-datatable .p-datatable-wrapper {
overflow-x: initial;
}
The Resizable-Fatures adds "overflow-x: auto" to the table, which hides the stick header.
:host ::ng-deep .p-datatable .p-datatable-thead > tr > th {
position: -webkit-sticky;
position: sticky;
background: blue;
color: white;
top: 0px;
z-index: 1;
}
:host ::ng-deep .p-datatable-resizable > .p-datatable-wrapper {
overflow-x: initial !important;
}
:host ::ng-deep .p-datatable-resizable .ui-resizable-column {
position: sticky !important;
}
@media screen and (max-width: 64em) {
:host ::ng-deep .p-datatable .p-datatable-thead > tr > th {
top: 0px;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With