媒体查询和 Angular Material

Kod*_*oth 0 media-queries angular

即使我们使用角度材料来开发响应式应用程序,有人也能理解媒体查询的重要性吗?我们还需要担心吗?是材料没有为我们照顾它吗?

Mar*_*arc 6

是和否。

无需创建自己的媒体查询。

拥有响应式应用程序意味着主布局将处理窗口大小。主要布局意味着你在列和行中思考。

要控制这种响应行为,您可以使用 angular/flex。

首先:您必须通过以下方式安装它

npm install @angular/flex-layout -s
Run Code Online (Sandbox Code Playgroud)

您将在此处找到文档和大量演示:angular/flex-layout和此处:Demos

你可以试试这个:angular-project-generator。生成的项目种子使用 angular/flex 和 angular mat-sidenav。

如果您想编写自己的媒体查询,请不要使用 200px、300px 或 500px。尝试使用此处使用的相同值:响应式 API

default angular breakpoints:
  xs: begin: 0, end: 599.9px
  sm: begin: 600px, end: 959.9px
  md: begin: 960px, end: 1279.9px
  lg: begin: 1280px, end: 1919.9px
  xl: begin: 1920px, end: 4999.99px
Run Code Online (Sandbox Code Playgroud)

在我的一些 angular 项目中,我使用了这个 scss,它生成了一些响应式帮助器类:

    @charset "UTF-8";

// see node_modules/@angular/flex-layout/_mq.scss

// Non-overlapping Material Design breakpoints
// @type map
$breakpoints: (
  xs: (
    begin: 0,
    end: 599.9px,
  ),
  sm: (
    begin: 600px,
    end: 959.9px,
  ),
  md: (
    begin: 960px,
    end: 1279.9px,
  ),
  lg: (
    begin: 1280px,
    end: 1919.9px,
  ),
  xl: (
    begin: 1920px,
    end: 4999.99px,
  ),
) !default;

// Overlapping breakpoints that are greater than defined
// Material Design breakpoints
// @type map
$overlapping-gt: (
  gt-xs: 600px,
  gt-sm: 960px,
  gt-md: 1280px,
  gt-lg: 1920px,
) !default;

// Overlapping breakpoints that are less than defined
// Material Design breakpoints
// @type map
$overlapping-lt: (
  lt-sm: 599.9px,
  lt-md: 959.9px,
  lt-lg: 1279.9px,
  lt-xl: 1919.9px,
) !default;

@mixin layout-bp($bp) {
  @if map-has-key($breakpoints, $bp) {
    $min: map-get(map-get($breakpoints, $bp), begin);
    $max: map-get(map-get($breakpoints, $bp), end);
    @media (min-width: $min) and (max-width: $max) {
      @content;
    }
  } @else if map-has-key($overlapping-gt, $bp) {
    $min: map-get($overlapping-gt, $bp);
    @media (min-width: $min) {
      @content;
    }
  } @else if map-has-key($overlapping-lt, $bp) {
    $max: map-get($overlapping-lt, $bp);
    @media (max-width: $max) {
      @content;
    }
  }
}

$allkeys: map_keys(
  map_merge($breakpoints, map_merge($overlapping-gt, $overlapping-lt))
);

@each $key in $allkeys {
  @include layout-bp($key) {
    .ge-display-none-#{$key} {
      display: none !important;
    }
    .ge-display-block-#{$key} {
      display: block !important;
    }
    .ge-display-inline-#{$key} {
      display: inline !important;
    }
    .ge-padding-0-#{$key} {
      padding: 16px !important;
    }
    .ge-padding-16px-#{$key} {
      padding: 0 !important;
    }
    .ge-margin-0-#{$key} {
      margin: 16px !important;
    }
    .ge-margin-16px-#{$key} {
      margin: 0 !important;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以将 scss 代码放在此处以查看生成的媒体查询:sassmeister