我正在尝试在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'}
];
答案 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;
}
您将看到水平线中的元素,如下图所示