Так как cdk virtualscroll не поддерживает несколько столбцов, я использовал ngx-virtual-scroller , который поддерживает несколько столбцов.Mat-grid-list, который я также должен был отпустить из-за этого, но создание ваших собственных плиток не так уж много работы при использовании flexbox.
Вот фрагмент, использующий несколько столбцов, [users-online-плитка] - это компонент, представляющий пользовательское изображение с именем.IsHandset boolean (из cdk), который я использую, чтобы установить высоту плитки, чтобы больше или меньше плиток отображалось в зависимости от размера экрана.
Надеюсь, это кому-нибудь поможет
<virtual-scroller [items]="users" (vsUpdate)="onVsUpdate($event)" (vsEnd)="fetchMore($event)"
(vsChange)="onVsChange($event)" [scrollbarWidth]="20" [scrollbarHeight]="100" [bufferAmount]="100">
<div [ngClass]="{ 'users-online-tile' : (isHandset$ | async), 'users-online-tile-desktop' : !(isHandset$ | async) }"
*ngFor="let user of scrollItems">
<div [users-online-tile]="user" [isHandset]="(isHandset$ | async)"></div>
<!-- <div class="item">{{user.userName}}</div> -->
</div>
</virtual-scroller>