网格系统中使用 Flex Layout 的最后一项的大小相同

Same size of the last items with Flex Layout in the grid system

我在使用 flex 布局网格系统时遇到问题。

假设我有一个包含 6 个项目的网格,我希望每行有 4 个项目。所以我会这样做:

<div fxFlex="100" fxLayout="row wrap" fxLayoutGap="1px">
<div fxFlex="calc(25% - 1px)" fxLayoutAlign="center end" *ngFor="let item of items">
    <span fxFlex>{{ item }}</span>
</div>
</div>

此代码的问题在于第二行的最后两项与第一行的大小不同。它们的大小将占全尺寸行的 50%,但第一行的项目将占全尺寸行的 25%。

那么我该怎么做才能让所有项目占两行的全尺寸行的 25%?

答案是使用 fxFlex="25" 而不是 fxFlex="calc(25% - 1px)" 并删除 fxLayoutGap 并通过添加 padding: 1px 来解决这个问题。

我已经创建了一个 stackblitz 来展示这个可能的解决方案(宽度填充:3px):

<div fxFlex="100" fxLayout="row wrap">
    <div fxFlex="25" fxLayoutAlign="center end" *ngFor="let item of items" style="padding: 3px;">
        <span fxFlex>{{ item }}</span>
    </div>
</div>

如果您不想删除 fxLayoutGap,请改用 fxFlex="24"

<div fxFlex="100" fxLayout="row wrap" fxLayoutGap="1px">
    <div fxFlex="24" fxLayoutAlign="center end" *ngFor="let item of items">
        <span fxFlex>{{ item }}</span>
    </div>
</div>

您的代码的问题是 parent flex 容器中的 fxLayoutGap="1px" 以及您的 flex children.[=16 中的 fxFlex="calc(25% - 1px)" 的组合=]

如果您只是删除 fxLayoutGap="1px" 并将 children 更改为 fxFlex="25",您将获得所需的行为。 但是,这将导致您的差距被删除。

如果你真的想保持差距,我建议你保持一致并使用百分比,如下例所示: Here is the working stackBlitz

<div fxFlex="100" fxLayout="row wrap" fxLayoutGap=".2%">
      <div fxFlex="24" fxLayoutAlign="center end">
        <span style="background-color: green" fxFlex>1</span>
      </div>
      <div fxFlex="24" fxLayoutAlign="center end">
        <span style="background-color: yellow" fxFlex>2</span>
      </div>
      <div fxFlex="24" fxLayoutAlign="center end">
        <span style="background-color: blue" fxFlex>3</span>
      </div>
      <div fxFlex="24" fxLayoutAlign="center end">
        <span style="background-color: orange" fxFlex>4</span>
      </div>
      <div fxFlex="24" fxLayoutAlign="center end">
        <span style="background-color: pink" fxFlex>5</span>
      </div>
      <div fxFlex="24" fxLayoutAlign="center end">
        <span style="background-color: red" fxFlex>6</span>
      </div>
    </div>