i created grid list with column 6 and i want to be grid title take 100% width on small screen devices. Now it creates 6 column on small screens as well
Expected: One grid-title occupies 100% of space on mobile device only
You have to set the cols
attribute of the mat-grid-list
dynamically depending on the screen width. You'd have to decide on which width breakpoint will the mat-grid-list
render the 1-column version.
HTML:
<mat-grid-list [cols]="breakpoint" rowHeight="2:0.5" (window:resize)="onResize($event)"> <mat-grid-tile>1</mat-grid-tile> <mat-grid-tile>2</mat-grid-tile> <mat-grid-tile>3</mat-grid-tile> <mat-grid-tile>4</mat-grid-tile> <mat-grid-tile>5</mat-grid-tile> <mat-grid-tile>6</mat-grid-tile> </mat-grid-list>
TS:
ngOnInit() { this.breakpoint = (window.innerWidth <= 400) ? 1 : 6; } onResize(event) { this.breakpoint = (event.target.innerWidth <= 400) ? 1 : 6; }
Stackblitz demo here
Hope this helps!
I liked Altus answer, but I would like to have more breakpoints. So I've created a simple method with some breakpoints using FlexLayout ObservableMedia service instead of onResize:
import { AfterContentInit, Component, ViewChild } from '@angular/core'; import { MediaChange, ObservableMedia } from '@angular/flex-layout'; import { MatGridList } from '@angular/material'; @Component({ selector: 'app-grid', templateUrl: './grid.component.html', styleUrls: ['./grid.component.css'] }) export class GridComponent implements AfterContentInit { @ViewChild('grid') grid: MatGridList; gridByBreakpoint = { xl: 8, lg: 6, md: 4, sm: 2, xs: 1 } constructor(private observableMedia: ObservableMedia) {} ngAfterContentInit() { this.observableMedia.asObservable().subscribe((change: MediaChange) => { this.grid.cols = this.gridByBreakpoint[change.mqAlias]; }); } }
<span>Breakpoint: {{grid.cols}}</span> <mat-grid-list #grid rowHeight="2:1"> <mat-grid-tile>1</mat-grid-tile> <mat-grid-tile>2</mat-grid-tile> <mat-grid-tile>3</mat-grid-tile> <mat-grid-tile>4</mat-grid-tile> <mat-grid-tile>5</mat-grid-tile> <mat-grid-tile>6</mat-grid-tile> <mat-grid-tile>7</mat-grid-tile> <mat-grid-tile>8</mat-grid-tile> </mat-grid-list>
See https://stackblitz.com/edit/angular-responsive-material-grid-leocaseiro
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