"angular-flex-layout" 未在移动设备屏幕上为 "mat-form-fields" 添加边距

"angular-flex-layout" not adding margin for "mat-form-fields" on mobile screens

我使用 angular material 和 flex-layout 创建了一个响应式表单。 它在桌面和 ipad 屏幕上运行良好。

对于移动设备,我想将表单域居中对齐并在屏幕左右添加边距。有没有办法在 flex-layout 中做到这一点?

如果不是,如何使用 ngClass.xs 自定义 CSS 来完成?我试过将宽度设置为 90%,但它没有正确居中并且看起来很奇怪。

<div class="container" fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="2%" fxLayoutAlign="center">

  <mat-form-field appearance="standard" fxFlex="22%" fxFlex.xs="90%">
    <mat-label>Field 1</mat-label>
    <input matInput placeholder="Field 1">
    <mat-icon matSuffix>place</mat-icon>
  </mat-form-field>

  <mat-form-field appearance="standard" fxFlex="22%" fxFlex.xs="90%">
    <mat-label>Field 2</mat-label>
    <input matInput placeholder="Field 2">
    <mat-icon matSuffix>business</mat-icon>
  </mat-form-field>

  <mat-form-field appearance="standard" fxFlex="22%" fxFlex.xs="90%">
    <mat-label>Field 3</mat-label>
    <input matInput placeholder="Field 3">
    <mat-icon matSuffix>send</mat-icon>
  </mat-form-field>

  <mat-form-field appearance="standard" fxFlex="22%" fxFlex.xs="90%">
    <mat-label>Field 4</mat-label>
    <input matInput placeholder="Field 4">
  </mat-form-field>

</div>

最简单和最方便的是在弹性容器

上设置ngClass.xs
<div class="container" fxLayout="row" fxLayout.xs="column" 
     fxLayoutGap.gt-xs="2%"  fxLayoutAlign="center" ngClass.xs="mobileContainer">

其中 .mobileContainer

.mobileContainer mat-form-field {
  margin: 8px 16px;
}

这里有一个简单的演示https://stackblitz.com/edit/angular-dufpaa

作为旁注;

您不需要 mat-form-field 元素上的 fxFlex.xs="90%",因为 fxLayout.xs="column" 容器在 xs 屏幕上有列布局,而 fxFlex.xs="90%" 意味着 "take 90% of parents' height" 在列布局上。因为 flex-shrink 默认为 1 这没有任何效果。

<div class="container" fxLayout="row" fxLayout.xs="column" fxLayoutGap="20px" fxLayoutAlign="center">

  <mat-form-field appearance="standard" fxFlex="22%" fxFlex.xs="90%">
    <mat-label>Field 1</mat-label>
    <input matInput placeholder="Field 1">
    <mat-icon matSuffix>place</mat-icon>
  </mat-form-field>

  <mat-form-field appearance="standard" fxFlex="22%" fxFlex.xs="90%">
    <mat-label>Field 2</mat-label>
    <input matInput placeholder="Field 2">
    <mat-icon matSuffix>business</mat-icon>
  </mat-form-field>

  <mat-form-field appearance="standard" fxFlex="22%" fxFlex.xs="90%">
    <mat-label>Field 3</mat-label>
    <input matInput placeholder="Field 3">
    <mat-icon matSuffix>send</mat-icon>
  </mat-form-field>

  <mat-form-field appearance="standard" fxFlex="22%" fxFlex.xs="90%">
    <mat-label>Field 4</mat-label>
    <input matInput placeholder="Field 4">
  </mat-form-field>

</div>

将 fxLayoutGap.gt-xs="2%" 更改为 fxLayoutGap="20px"。