O
Bootstrap LayoutO https://getbootstrap.com/ works with one https://getbootstrap.com/docs/4.1/layout/grid/ composed of several lines (.row) which are then composed of columns of varying widths (e.g.: .col-lg-8) each .row has 12 units wide. Like yours .card is inside a column with 12 width (.col-lg-12) each .card will always occupy the total width of .row.As such, to stand side by side, I would have to have something like: <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
<div class="row">
<!-- 1 Primeiro cartão, 1° objeto -->
<div class="col-lg-4">
<div class="card borda-card" *ngFor="let evento of eventos">
<a href="/assets/img/2.jpg" style="background-image: url('../../assets/img/2.jpg')" class="imagem-card" data-lightbox="2.jpg"></a>
<div class="card-body">
<p>
<b>{{ evento.titulo }}</b>
</p>
<p class="data-card">{{ evento.data }}</p>
<p>{{ evento.descricao }}</p>
<a href="#" class="btn-mais-card">Saiba mais</a>
</div>
</div>
</div>
<!-- 2 Segundo cartão, 2° objeto -->
<div class="col-lg-4">
<div class="card borda-card" *ngFor="let evento of eventos">
<a href="/assets/img/2.jpg" style="background-image: url('../../assets/img/2.jpg')" class="imagem-card" data-lightbox="2.jpg"></a>
<div class="card-body">
<p>
<b>{{ evento.titulo }}</b>
</p>
<p class="data-card">{{ evento.data }}</p>
<p>{{ evento.descricao }}</p>
<a href="#" class="btn-mais-card">Saiba mais</a>
</div>
</div>
</div>
<!-- 3 Terceiro cartão, 3° objeto -->
<div class="col-lg-4">
<div class="card borda-card" *ngFor="let evento of eventos">
<a href="/assets/img/2.jpg" style="background-image: url('../../assets/img/2.jpg')" class="imagem-card" data-lightbox="2.jpg"></a>
<div class="card-body">
<p>
<b>{{ evento.titulo }}</b>
</p>
<p class="data-card">{{ evento.data }}</p>
<p>{{ evento.descricao }}</p>
<a href="#" class="btn-mais-card">Saiba mais</a>
</div>
</div>
</div>
</div>Potential layout problemGreat! Now if we open on a large screen, they'll be side by side! But what about tablets or phones? There'll be one by line. This has to do with the selector .col-lg-n in which it will occupy n width units on screens of the Large type (>= 992px width) - https://getbootstrap.com/docs/4.1/layout/grid/#grid-options .An example in which would always show 3 items per line: <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
<div class="row">
<!-- 1 Primeiro cartão, 1° objeto -->
<div class="col-xs-4">
<div class="card borda-card" *ngFor="let evento of eventos">
<a href="/assets/img/2.jpg" style="background-image: url('../../assets/img/2.jpg')" class="imagem-card" data-lightbox="2.jpg"></a>
<div class="card-body">
<p>
<b>{{ evento.titulo }}</b>
</p>
<p class="data-card">{{ evento.data }}</p>
<p>{{ evento.descricao }}</p>
<a href="#" class="btn-mais-card">Saiba mais</a>
</div>
</div>
</div>
<!-- 2 Segundo cartão, 2° objeto -->
<div class="col-xs-4">
<div class="card borda-card" *ngFor="let evento of eventos">
<a href="/assets/img/2.jpg" style="background-image: url('../../assets/img/2.jpg')" class="imagem-card" data-lightbox="2.jpg"></a>
<div class="card-body">
<p>
<b>{{ evento.titulo }}</b>
</p>
<p class="data-card">{{ evento.data }}</p>
<p>{{ evento.descricao }}</p>
<a href="#" class="btn-mais-card">Saiba mais</a>
</div>
</div>
</div>
<!-- 3 Terceiro cartão, 3° objeto -->
<div class="col-xs-4">
<div class="card borda-card" *ngFor="let evento of eventos">
<a href="/assets/img/2.jpg" style="background-image: url('../../assets/img/2.jpg')" class="imagem-card" data-lightbox="2.jpg"></a>
<div class="card-body">
<p>
<b>{{ evento.titulo }}</b>
</p>
<p class="data-card">{{ evento.data }}</p>
<p>{{ evento.descricao }}</p>
<a href="#" class="btn-mais-card">Saiba mais</a>
</div>
</div>
</div>
</div></code></pre></div></div></p><blockquote><p><strong>Note</strong>: even though it is <code>.row</code>, if the sum of the elements does not give
the 12, Bootstrap continues to put the elements down.Solution with AngularGiven this, the simplest will be to do the ngFor inside your .row with the width of the card you want and let Bootstrap handle the rest:<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
<div class="row">
<div class="card borda-card" *ngFor="let evento of eventos">
<div class="col-xs-4">
<!-- 1 Primeiro cartão, 1° objeto -->
<a href="/assets/img/2.jpg" style="background-image: url('../../assets/img/2.jpg')" class="imagem-card" data-lightbox="2.jpg"></a>
<div class="card-body">
<p>
<b>{{ evento.titulo }}</b>
</p>
<p class="data-card">{{ evento.data }}</p>
<p>{{ evento.descricao }}</p>
<a href="#" class="btn-mais-card">Saiba mais</a>
</div>
</div>
</div>
</div>Pay attention that vertical spacing may not be okay, so in your .borda-card would add a margin to make sure they would look good without changing .row.