【问题标题】:Layout Broken on Small Devices In AngularAngular中小型设备上的布局损坏
【发布时间】:2020-09-08 03:11:07
【问题描述】:

我在 Angular 应用程序中使用 Angular Material 和 Angular Flex-Layout,但在移动设备上显示文本时遇到问题。正如你在小碎石上看到的那样,那里的标签被剪掉了。如果在移动设备上,我将如何显示它没有被剪切或者我认为另一列应该堆叠在下面? 检查下面的这张图片以获取当前输出。还有没有一种有效的方法来迭代标签和值而不在 html 中放置许多 div?

HTML

<mat-card-content fxLayout="row" fxLayoutAlign="stretch">
  <mat-grid-list cols="6" rowHeight="28px">
    <mat-grid-tile [colspan]="1" [rowspan]="4">
      <div>
        <div class="details" *ngFor="let label of labels">
          <label><strong>{{ label.name }}</strong></label>
        </div>
      </div>
    </mat-grid-tile>
    <mat-grid-tile [colspan]="2" [rowspan]="4">
      <div>
        <div class="details">
          <label>1</label>
        </div>

        <div class="details">
          <label>Robert Williams</label>
        </div>

        <div class="details">
          <label>robert@gmail.com</label>
        </div>

        <div class="details">
          <label>Human Resource</label>
        </div>
      </div>
    </mat-grid-tile>
    <mat-grid-tile [colspan]="1" [rowspan]="4">
      <div>
        <div class="details" *ngFor="let label of labels2">
          <label><strong>{{ label.name }}</strong></label>
        </div>
      </div>
    </mat-grid-tile>
    <mat-grid-tile [colspan]="2" [rowspan]="4">
      <div>
        <div class="details">
          <label>9178384567</label>
        </div>

        <div class="details">
          <label>Phoenix</label>
        </div>

        <div class="details">
          <label>Male</label>
        </div>

        <div class="details">
          <label>Aug 21, 2019</label>
        </div>
      </div>
    </mat-grid-tile>
  </mat-grid-list>
</mat-card-content>

【问题讨论】:

  • 一定要使用mat-grid-list吗?因为它迫使您拥有固定宽度的列和固定高度的行。还有其他几种(更简单的)方法可以实现图像中的布局。
  • @ysf。不,我不需要使用 mat-grid-list。我只想实现图片的外观。谢谢

标签: css angular angular-material angular7 angular-flex-layout


【解决方案1】:

这是一个完全响应的解决方案;

  <mat-card-content fxLayout="row" fxLayout.xs="column" fxLayoutAlign="start stretch">
    <div fxLayout="row">
      <div fxLayout="column" fxFlex.xs="50%">
        <div fxFlex="25%" class="details" *ngFor="let label of labels">
          <label><strong>{{ label }}</strong></label>
        </div>
      </div>

      <div fxLayout="column" fxFlex.xs="50%">
        <div fxFlex="25%" class="details">
          <label>1</label>
        </div>

        <div fxFlex="25%" class="details">
          <label>Robert Williams</label>
        </div>

        <div fxFlex="25%" class="details">
          <label>robert@gmail.com</label>
        </div>

        <div fxFlex="25%" class="details">
          <label>Human Resource</label>
        </div>
      </div>
    </div>

    <div fxLayout="row">
      <div fxLayout="column" fxFlex.xs="50%">
        <div fxFlex="25%" class="details" *ngFor="let label of labels2">
          <label><strong>{{ label }}</strong></label>
        </div>
      </div>

      <div fxLayout="column" fxFlex.xs="50%">
        <div fxFlex="25%" class="details">
          <label>9178384567</label>
        </div>

        <div fxFlex="25%" class="details">
          <label>Phoenix</label>
        </div>

        <div fxFlex="25%" class="details">
          <label>Male</label>
        </div>

        <div fxFlex="25%" class="details">
          <label>Aug 21, 2019</label>
        </div>
      </div>
    </div>
  </mat-card-content>

我还建议添加以下样式以在非常小的屏幕中正确中断文本

.details > label {
  overflow-wrap: break-word;
}

这是一个工作演示:https://stackblitz.com/edit/angular-ivy-9vpkl1

更新

为了有一个更紧凑的模板,创建一个将标签和数据保存在一起的数组

  datas = [
    {label: "ID", text: "1"},
    {label: "Mobile", text: "9178384567"},
    {label: "Full Name", text: "Robert Williams"},
    {label: "City", text: "Phoenix"},
    {label: "Email", text: "robert@gmail.com"},
    {label: "Gender", text: "Male"},
    {label: "Department", text: "Human Resource"},
    {label: "Hire Date", text: "Aug 21, 2019"},
  ]
<mat-card-content fxLayout="row wrap" fxLayoutAlign="start stretch">
  <div fxFlex="50%" fxFlex.xs="100%" fxLayout="row" *ngFor="let data of datas">
    <div fxFlex="50%" class="details">
      <label><strong>{{data.label}}</strong></label>
    </div>
    <div fxFlex="50%" class="details">
      <label>{{data.text}}</label>
    </div>
  </div>
</mat-card-content>

演示:https://stackblitz.com/edit/angular-ivy-g9vt6h

希望对你有帮助。

【讨论】:

  • 我把它移到了左边。迭代标签和值的有效方法是将它们放在一个对象中并遍历数组中的这些对象。让我也举个例子。
  • 你能帮我解决这个问题吗? stackoverflow.com/questions/61959287/…。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 2013-07-27
  • 2015-06-29
  • 2018-07-29
  • 2021-09-04
相关资源
最近更新 更多