Adjusting mat-table on xs screen size using flex box css in angular 2
11,667
To adjust the spacing between the columns, set min width on mat-cell and use media queries.
For example for small screens:
@media only screen and (max-width: 736px) and (orientation:portrait) {
mat-header-row, mat-row {
width: 200%; //you can also set it in px,em, etc...
}
}
Related videos on Youtube
Author by
Heena
Updated on June 04, 2022Comments
-
Heena about 2 years
I have implemented a simple angular material table using flexbox css.
In the desktop my table view is as shown below.
In md screen size the view is
In xs screen size its view is
When i see the table in XS screen view ,the spacing between the table columns is not properly adjusted..
Is there a way out where i can add a horizontal scroll to space the table columns properly by specifying a min width to my table and adding a horizontal scroll when in XS and SM screen sizes.
Below shown is my .html file
<div class="example-container mat-elevation-z8"> <mat-table #table [dataSource]="dataSource"> <!-- Checkbox Column --> <ng-container matColumnDef="select"> <mat-header-cell *matHeaderCellDef> <mat-checkbox (change)="$event ? masterToggle() : null" [checked]="selection.hasValue() && isAllSelected()" [indeterminate]="selection.hasValue() && !isAllSelected()"> </mat-checkbox> </mat-header-cell> <mat-cell *matCellDef="let row"> <mat-checkbox (click)="$event.stopPropagation()" (change)="$event ? selection.toggle(row) : null" [checked]="selection.isSelected(row)"> </mat-checkbox> </mat-cell> </ng-container> <!-- Position Column --> <ng-container matColumnDef="position"> <mat-header-cell *matHeaderCellDef> No. </mat-header-cell> <mat-cell *matCellDef="let element"> {{element.position}} </mat-cell> </ng-container> <!-- Name Column --> <ng-container matColumnDef="name"> <mat-header-cell *matHeaderCellDef> Name </mat-header-cell> <mat-cell *matCellDef="let element"> {{element.name}} </mat-cell> </ng-container> <!-- Weight Column --> <ng-container matColumnDef="weight"> <mat-header-cell *matHeaderCellDef> Weight </mat-header-cell> <mat-cell *matCellDef="let element"> {{element.weight}} </mat-cell> </ng-container> <!-- Symbol Column --> <ng-container matColumnDef="symbol"> <mat-header-cell *matHeaderCellDef> Symbol </mat-header-cell> <mat-cell *matCellDef="let element"> {{element.symbol}} </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row> </mat-table> <mat-paginator #paginator [pageSize]="10" [pageSizeOptions]="[5, 10, 20]"> </mat-paginator> </div>
Below is my .css file
.example-container { display: flex; flex-direction: column; min-width: 300px; margin:10px; } .mat-table { overflow: auto; max-height: 250px; } mat-header-cell, mat-header-row, .mat-header-cell-def{ background:#f2f4f7; min-height:15px; font-family:Verdana,sans-serif; font-weight:bold; font-size:13px; color: #1a084c; margin-bottom:5px; top: 0; position: sticky; z-index: 1; } mat-row{ min-height:20px; font-family:Verdana,sans-serif; font-size:11px; color: #1a084c; } mat-cell{ height:20px; font-family:Verdana,sans-serif; font-size:11px; color: #1a084c; }
Below is my .ts file
import { Component, OnInit,Inject, ViewChild } from '@angular/core'; import {ShowmenuService} from '../showmenu.service'; import {MatTableDataSource, MatPaginator} from '@angular/material'; import {SelectionModel} from '@angular/cdk/collections'; import { ActivatedRoute, Params } from '@angular/router'; import { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog'; @Component({ selector: 'app-space-admin', templateUrl: './space-admin.component.html', styleUrls: ['./space-admin.component.css'] }) export class SpaceAdminComponent implements OnInit { constructor(public showmenu:ShowmenuService, private _activateroute: ActivatedRoute, public dialog: MatDialog) { } ngOnInit() { this.showmenu.show(); this.showmenu.show1(); } displayedColumns = ['select','position', 'name', 'weight', 'symbol']; dataSource = new MatTableDataSource<Element>(ELEMENT_DATA); selection = new SelectionModel<Element>(true, []); @ViewChild(MatPaginator) paginator: MatPaginator; /** * Set the paginator after the view init since this component will * be able to query its view for the initialized paginator. */ ngAfterViewInit() { this.dataSource.paginator = this.paginator; } /** Whether the number of selected elements matches the total number of rows. */ isAllSelected() { const numSelected = this.selection.selected.length; const numRows = this.dataSource.data.length; return numSelected === numRows; } /** Selects all rows if they are not all selected; otherwise clear selection. */ masterToggle() { this.isAllSelected() ? this.selection.clear() : this.dataSource.data.forEach(row => this.selection.select(row)); } } export interface Element { name: string; position: number; weight: number; symbol: string; } const ELEMENT_DATA: Element[] = [ {position: 1, name: 'Hydrogen', weight: 1.0079, symbol: 'H'}, {position: 2, name: 'Helium', weight: 4.0026, symbol: 'He'}, {position: 3, name: 'Lithium', weight: 6.941, symbol: 'Li'}, {position: 4, name: 'Beryllium', weight: 9.0122, symbol: 'Be'}, {position: 5, name: 'Boron', weight: 10.811, symbol: 'B'}, {position: 6, name: 'Carbon', weight: 12.0107, symbol: 'C'}, {position: 7, name: 'Nitrogen', weight: 14.0067, symbol: 'N'}, {position: 8, name: 'Oxygen', weight: 15.9994, symbol: 'O'}, {position: 9, name: 'Fluorine', weight: 18.9984, symbol: 'F'}, {position: 10, name: 'Neon', weight: 20.1797, symbol: 'Ne'}, {position: 11, name: 'Sodium', weight: 22.9897, symbol: 'Na'}, {position: 12, name: 'Magnesium', weight: 24.305, symbol: 'Mg'}, {position: 13, name: 'Aluminum', weight: 26.9815, symbol: 'Al'}, {position: 14, name: 'Silicon', weight: 28.0855, symbol: 'Si'}, {position: 15, name: 'Phosphorus', weight: 30.9738, symbol: 'P'}, {position: 16, name: 'Sulfur', weight: 32.065, symbol: 'S'}, {position: 17, name: 'Chlorine', weight: 35.453, symbol: 'Cl'}, {position: 18, name: 'Argon', weight: 39.948, symbol: 'Ar'}, {position: 19, name: 'Potassium', weight: 39.0983, symbol: 'K'}, {position: 20, name: 'Calcium', weight: 40.078, symbol: 'Ca'}, ];
modified table in xs view
-
Heena about 6 yearsits working for me as i wished it to be ... but when i scroll right to see the remaining columns , i don't find the separation between the rows , as in the starting columns.. i have added the screen shot in my question ... please have a look.
-
Heena about 6 yearscan you please tell me what is the problem here ..?
-
Heena about 6 yearswhy are the rows not separated as in the start?
-
Heena about 6 yearsyes exactly i got it as per my requirement ... thanks a lot again..thanks for the help..