Угловой 7 flexbox с ngFor - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь использовать flexbox внутри цикла ngFor для получения данных в столбцах. Свойство Flexbox Wrap включено, чтобы отображать данные в строках для небольших экранов. Но данные отображаются в строках даже на больших экранах. Мой код

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

css is

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

.child {
    width: 400px;
}

Герои объекта

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 ]

1 голос
/ 02 июня 2019

Вы были маленькой ошибкой.Вы устанавливаете класс 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;

}

Это даст четкое представление о том, как вещи рендерится.

0 голосов
/ 02 июня 2019

Сначала переместите ngFor на дочерний элемент, он не должен повторять основной контейнер

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

Во-вторых, измените на flex-wrap на no-wrap в css

.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

0 голосов
/ 02 июня 2019

Попробуйте использовать медиа-запросы.

.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;
}

}
...