Сделайте карточку, подходящую для всего контента
Хочу сделать 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>