Как заставить карты появляться рядом друг с другом в ряду, чтобы заполнить сетку перед началом нового ряда?
У меня есть данные из таблицы, на основе этих данных создаются карточки и выводятся на экран. Однако они появляются друг под другом с левой стороны, а не заполняют сначала строку, прежде чем начать новую строку: (https://i.stack.imgur.com/dDgvB.png)
Мой код:
<div class="container">
{% for class in all_classes %}
</br>
<div class="row-sm-3">
<div class="col-sm-4">
<div class="card-deck">
<div class="card text-center">
<div class="card-body">
<h5 class="card-title">{{ class.class_name}}</h5>
<p class="card-text">{{class.teacher_id.username }}</p>
<a href="#" class="btn btn-primary">Go To</a>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
Как я могу это исправить?
Замените row-sm-3 (его нет в Bootstrap) на row.
<div class="container">
{% for class in all_classes %}
<br>
<div class="row">
<div class="col-sm-4">
<div class="card-deck">
<div class="card text-center">
<div class="card-body">
<h5 class="card-title">{{ class.class_name}}</h5>
<p class="card-text">{{class.teacher_id.username }}</p>
<a href="#" class="btn btn-primary">Go To</a>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
Я не уверен, что делает .row-sm-3, но вам даже не нужно .row.
.card-deck имеет flex и будет действовать аналогично Bootstrap .row. Ваш интервал (например, col-lg-3, .col-md-6) должен использоваться на каждом .card. Смотрите фрагмент ниже.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
<div class="container">
<div class="card-deck">
<div class="col-12 col-lg-3 col-md-6">
<div class="card text-center">
<div class="card-body">
<h5 class="card-title">{{ class.class_name}}</h5>
<p class="card-text">{{class.teacher_id.username }}</p>
<a href="#" class="btn btn-primary">Go To</a>
</div>
</div>
</div>
<div class="col-12 col-lg-3 col-md-6">
<div class="card text-center">
<div class="card-body">
<h5 class="card-title">{{ class.class_name}}</h5>
<p class="card-text">{{class.teacher_id.username }}</p>
<a href="#" class="btn btn-primary">Go To</a>
</div>
</div>
</div>
<div class="col-12 col-lg-3 col-md-6">
<div class="card text-center">
<div class="card-body">
<h5 class="card-title">{{ class.class_name}}</h5>
<p class="card-text">{{class.teacher_id.username }}</p>
<a href="#" class="btn btn-primary">Go To</a>
</div>
</div>
</div>
<div class="col-12 col-lg-3 col-md-6">
<div class="card text-center">
<div class="card-body">
<h5 class="card-title">{{ class.class_name}}</h5>
<p class="card-text">{{class.teacher_id.username }}</p>
<a href="#" class="btn btn-primary">Go To</a>
</div>
</div>
</div>
</div>
</div>
При создании grid в bootstrap необходимо следовать структуре:
<div class="row">
<div class="col">Item 1</div>
<div class="col">Item 2</div>
<div class="col">Item 3</div>
</div>
Однако вы используете row-sm-3, что не работает. Вам нужно изменить его на просто row.
Кроме того, в вашем примере не хватает закрывающего тега </div>, но я думаю, что это была ошибка копирования-вставки.