带有ngFor的Angular 7 flexbox

时间:2019-06-02 03:21:05

标签: css angular flexbox angular7 ngfor

我正在尝试在ngFor循环内使用flexbox来获取列中的数据。 Flexbox wrap属性已启用,可在较小屏幕的行中显示数据。但是,即使在更大的屏幕上,数据也会成行显示。我的代码是

<div class="main" *ngFor="let hero of heros">
  <div class="child"><mat-checkbox color='primary'>{{hero.name}}</mat-checkbox></div>
</div>

css是

.main {
    width: 90%;
    list-style-type: none;
    margin: 0.5em;
    padding: 0.5em;
    display: flex;
    flex-wrap: wrap;
}

.child {
    width: 400px;
}

heros对象是

heros = [
    {id: 1, name: 'Superman'},
    {id: 2, name: 'Batman'},
    {id: 5, name: 'BatGirl'},
    {id: 3, name: 'Robin'},
    {id: 4, name: 'Flash'}
  ];

enter image description here

3 个答案:

答案 0 :(得分:0)

尝试使用媒体查询。

.main {
    width: 90%;
    list-style-type: none;
    margin: 0.5em;
    padding: 0.5em;
    display: flex;
}

.child {
    width: 400px;
}


/* On screens that are 768 or less */
@media screen and (max-width: 768px) {
  .main {
    width: 90%;
    list-style-type: none;
    margin: 0.5em;
    padding: 0.5em;
    display: flex;
    flex-wrap: wrap;
}

.child {
    width: 400px;
}

}

答案 1 :(得分:0)

您确实是个小错误。您将类 main 设置在错误的位置。 试试这个:

// html
<div class="main">
  <div *ngFor="let hero of heros">
  <div class="child">
    {{hero.name}}
  </div>
</div>
</div>


// css
.main {
    width: 90%;
    list-style-type: none;
    margin: 0.5em;
    padding: 0.5em;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-around;
    background: red;
}

.child {
    width: fit-content;
    max-width: 100%;
    background: blue;
    margin: 1% 0px;

}

这将清楚地显示事物的呈现方式。

答案 2 :(得分:0)

首先,将ngFor移到子元素,它不应重复主容器

<div class="main" >
  <div class="child" *ngFor="let hero of heros"><mat-checkbox color='primary'>{{hero.name}}</mat-checkbox></div>
</div>

第二,在CSS中将flex-wrap更改为no-wrap

.main {
    width: 90%;
    list-style-type: none;
    margin: 0.5em;
    padding: 0.5em;
    display: flex;
    flex-wrap: no-wrap;
}

.child {
    width: 400px;
}

您将看到水平线中的元素,如下图所示

enter image description here