Как заставить карты появляться рядом друг с другом в ряду, чтобы заполнить сетку перед началом нового ряда?

У меня есть данные из таблицы, на основе этих данных создаются карточки и выводятся на экран. Однако они появляются друг под другом с левой стороны, а не заполняют сначала строку, прежде чем начать новую строку: (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>, но я думаю, что это была ошибка копирования-вставки.

Вернуться на верх