Сделайте карточку, подходящую для всего контента

Хочу сделать 8 карточек на мобильной версии новостного сайта (школьный проект). Я хочу, чтобы все карты имели одинаковые пропорции, но изображения, которые я сохранил на своем компьютере для карт, отличаются некоторыми размерами (некоторые из них выше).

Есть ли способ разместить изображения, заголовок и текст на карточках без необходимости изменять размер каждого изображения перед добавлением его в проект?

Я желаю, чтобы все карты выглядели так

Как выглядят карточки при разном размере изображений

Код:

img {
  max-width: 100%;
  max-height: 100%;
  display: block;  
}

.cards {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  margin: 5px;
}


.card{
  display: flex;
  flex-direction: column;
  padding: 5px;
  margin: 20px;
  margin-bottom: 5px;
  height: 280px;
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}

2 ответа

Решение

Просто задайте для вашего изображения значение высоты, которое является самым высоким из возможных. Вам нужно будет установить ширину автоматически, чтобы изображение не растягивалось.

img {
    height: 300px; /* play around with this number until you get the height you need */
    width: auto;
    max-width: 100%;
}

Обычно я помещаю изображение в качестве фона и располагаю его по центру. Вы также можете собрать все атрибуты фона, но если вы работаете с php, я рекомендую добавить в тег стиля только фоновое изображение и все остальное в качестве свойства класса.

Объяснение css:

переполнение: скрыто; -> это скрывает лишние границы изображения

размер фона: обложка; -> это заставляет изображение максимально растягиваться / изменять размер в зависимости от размера контейнера (на самом деле я использовал изображение 600x800) Синтаксис

background-position: center center; -> если вы обрезаете изображение, обычно безопаснее обрезать его равномерно со всех сторон, но решать вам. Синтаксис

БОНУС: чтобы избежать повторения маленьких изображений как шаблона, вы также можете добавить: background-repeat: no-repeat; Если вы установите background-size: cover, вам это не нужно.

/* where the magic happens */
.img-as-bg {
  height: 300px;
  overflow: hidden;
  background-size: cover;
  background-position: center center;
}


/* extra style copied from your source */
.cards {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  margin: 5px;
}


.card{
  display: flex;
  flex-direction: column;
  padding: 5px;
  margin: 20px;
  margin-bottom: 5px;
  height: 280px;
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
<div class="cards">
  <div class="card" style="width: 18rem;">
    <div class="img-as-bg" style="background-image: url('https://via.placeholder.com/600x800/0055ff');"></div>
    <div class="card-body">
      <h5 class="card-title">Card title</h5>
      <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
      <a href="#">Read more</a>
    </div>
  </div>

  <div class="card" style="width: 18rem;">
    <div class="img-as-bg" style="background-image: url('https://via.placeholder.com/500x900/00ffff');"></div>
    <div class="card-body">
      <h5 class="card-title">Card title</h5>
      <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
      <a href="#">Read more</a>
    </div>
  </div>
</div>

Другие вопросы по тегам