Angular 7 响应式布局使用 Material 网格

Angular 7 responsive layout using Material Grid

我正在设置一个网络应用程序,我想实现具有响应能力的移动版本。

我正在使用 Angular 7 和 angular material 7.2。

<mat-grid-list cols="12">
  <mat-grid-tile  [colspan]="6">

    <h1 class="title">Title</h1>

  </mat-grid-tile>
  <mat-grid-tile [colspan]="3">

    <h2 class="date">Date</h2>

  </mat-grid-tile>
  <mat-grid-tile [colspan]="3">

    <h1 class="price">price€</h1>

  </mat-grid-tile>
</mat-grid-list>

我有一个包含 3 个图块的 12 列的网格列表:

A- 6 (6/12)

B- 3 (3/12)

C- 3 (3/12)

网页

<-------- 12 -------->

AAAAAA BBB CCC

当我得到我想要的 phone 尺码时: 一个包含 3 个图块的 12 列的网格列表:

A- 12 (12/12)

B- 6 (6/12)

C- 6 (6/12)

手机

<-------- 12 -------->

AAAAAAAAAAAA

BBBBBB-CCCCCC

对不起我的英语 ;) 谢谢

在网格布局中,只有比率才是真正重要的(而不是实际的列数)。在您的情况下,图块大小之间的比率不会改变 - 第一个图块的宽度始终是第二个和第三个图块的两倍。因此,您可以在数学上将您的移动布局减少到:

A- 6 (6/6)
B- 3 (3/6)
C- 3 (3/6)

现在,两种布局的图块 colspan 值相同,唯一的区别是列数。这使得实现响应式设计变得更简单,因为您只需要将 cols 值更改为 12 和 6 之间。

cols 值输入绑定到表达式:

<mat-grid-list [cols]="isMobile ? 6 : 12">...

使用CDK's Layout module检测设备变化:

import {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';
...
class MyComponent {

  public isMobile: boolean = false;

  constructor(breakpointObserver: BreakpointObserver) {
    breakpointObserver.observe([
      Breakpoints.Handset
    ]).subscribe(result => {
      this.isMobile = result.matches;
    });
  }

  ...
}

您还可以根据屏幕大小自定义断点:​​

breakpointObserver.observe([
  '(max-width: 599px)'
]).subscribe(result => {
  this.isMobile = result.matches;
});

自定义断点:

breakpointObserver.observe(['(min-width: 500px)'])