Bootstrap4 получает карточки в столбцах для растягивания и заполнения родительского контейнера по горизонтали и вертикали - PullRequest
0 голосов
/ 01 мая 2018

Я использую Bootstrap 4. Я создал строку с 3 столбцами размером 4 на средних и больших экранах. Содержимое каждой карты может иметь разные размеры, но я все же хочу, чтобы каждая карта имела одинаковую длину.

Я не использую группы карт / колоды, потому что они не реагируют, и я хочу, чтобы карты занимали все 12 рядов на маленьких / xs дисплеях.

Ниже приведен фрагмент кода, который относится к карточкам. У меня также есть проект на Plunker для просмотра в реальном времени: http://plnkr.co/edit/RLQaA6knYi69qc4vLr6j?p=info. Если вы откроете проект на большом дисплее, карты будут не одинакового размера.

Bootstrap 4 говорит, что если ширина не указана, карты по умолчанию растягиваются, чтобы заполнить всю ширину своего контейнера. Я ошибаюсь, предполагая, что он заполняет всю ширину родительского контейнера, в котором содержится карта (то есть в приведенном ниже случае div столбца col-md-4)?

Если я ошибаюсь, как мне сделать так, чтобы 3 карты растягивались горизонтально, чтобы заполнить всю ширину столбца, в котором размещены , а также вертикально, чтобы иметь одинаковый размер? Я пытался добавить flex-column flex-grow, но это только размер по горизонтали, но не по вертикали. Как лучше всего справиться с этим?

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

<main>
  <div id="content-container" class="container">

    <div class="row">
      <div class="col-12">
        <h2 class="display-5 text-center text-white text-uppercase">Portfolio</h2>
      </div>
    </div>

    <div class="row">

      <div class="col-md-4 d-flex align-items-stretch">
        <div class="card ">
          <img class="card-img-top" src=".../100px200/" alt="Card image cap">
          <div class="card-footer">Featured</div>
        </div>
      </div>

      <div class="col-md-4 d-flex align-items-stretch">
        <div class="card ">
          <img class="card-img-top" src=".../100px200/" alt="Card image cap">
          <div class="card-footer">Footer</div>
        </div>
      </div>

      <div class="col-md-4 d-flex align-items-stretch">
        <div class="card ">
          <img class="card-img-top" src=".../100px200/" alt="Card image cap">
          <div class="card-body">
            <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
          </div>
        </div>
      </div>

    </div>
  </div>
</main>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>

Edit:

Я получил это для работы, добавив класс к каждому card div и установив ширину на 100%. Я до сих пор не уверен, что это правильный подход, так как предполагал, что карта сделает это автоматически.

1 Ответ

0 голосов
/ 01 мая 2018

Ваши столбцы имеют ширину 100% на мобильном устройстве. Но карты внутри этих столбцов по-прежнему имеют ширину auto.

enter image description here

Таким образом, вы можете добавить класс w-100 к каждой карточке.

Пожалуйста, проверьте результат. Это то, чего вы хотите достичь?

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

<main>
  <div id="content-container" class="container">

    <div class="row">
      <div class="col-12">
        <h2 class="display-5 text-center text-white text-uppercase">Portfolio</h2>
      </div>
    </div>

    <div class="row">

      <div class="col-md-4 d-flex align-items-stretch">
        <div class="card w-100">
          <img class="card-img-top" src=".../100px200/" alt="Card image cap">
          <div class="card-footer">Featured</div>
        </div>
      </div>

      <div class="col-md-4 d-flex align-items-stretch">
        <div class="card w-100">
          <img class="card-img-top" src=".../100px200/" alt="Card image cap">
          <div class="card-footer">Footer</div>
        </div>
      </div>

      <div class="col-md-4 d-flex align-items-stretch">
        <div class="card w-100">
          <img class="card-img-top" src=".../100px200/" alt="Card image cap">
          <div class="card-body">
            <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
          </div>
        </div>
      </div>
    </div>

  </div>
</main>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" ></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>

UPDATE

Чтобы управлять свойствами всех карт одновременно, вы можете назначить свой собственный класс строке, содержащей все эти карты. Bootstrap не запрещает использование вашего собственного CSS.

.row-whith-wide-cards .card {
  width: 100%;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

<main>
  <div id="content-container" class="container">

    <div class="row">
      <div class="col-12">
        <h2 class="display-5 text-center text-white text-uppercase">Portfolio</h2>
      </div>
    </div>

    <div class="row row-whith-wide-cards">

      <div class="col-md-4 d-flex align-items-stretch">
        <div class="card">
          <img class="card-img-top" src=".../100px200/" alt="Card image cap">
          <div class="card-footer">Featured</div>
        </div>
      </div>

      <div class="col-md-4 d-flex align-items-stretch">
        <div class="card">
          <img class="card-img-top" src=".../100px200/" alt="Card image cap">
          <div class="card-footer">Footer</div>
        </div>
      </div>

      <div class="col-md-4 d-flex align-items-stretch">
        <div class="card">
          <img class="card-img-top" src=".../100px200/" alt="Card image cap">
          <div class="card-body">
            <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
          </div>
        </div>
      </div>
    </div>

  </div>
</main>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" ></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...