#html #css
Вопрос:
Я хочу создать простой адаптивный макет сетки с изображением и текстом ниже, поэтому я делаю
.programs_content {
display: grid;
grid-gap: 10px;
padding-top: 4em;
grid-auto-flow: row;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
grid-template-rows: repeat(auto-fill, 1fr);
column-gap: 10px;
row-gap: 10px;
height: auto;
}
.rect-img-container {
position: relative;
}
.rect-img-container::after {
content: '';
display: inline-block;
padding-bottom: 100%;
}
.rect-img {
width: 100%;
height: 40%;
object-fit: cover;
}
.caption {
display: block;
font-weight: bold;
text-align: center;
}
<div class="programs_content">
<div class="rect-img-container">
<a href="#">
<img class="rect-img" src="1.png" alt="" />
</a>
<span class="caption">text1</span>
</div>
<div class="rect-img-container">
<a href="#">
<img class="rect-img" src="2.png" alt="" />
</a>
<span class="caption">text2</span>
</div>
<div class="rect-img-container">
<a href="#">
<img class="rect-img" src="3.png" alt="" />
</a>
<span class="caption">text3</span>
</div>
<div class="rect-img-container">
<a href="#">
<img class="rect-img" src="4.png" alt="" />
</a>
<span class="caption">text4</span>
</div>
</div>
Но по какой-то причине высота каждого квадрата слишком велика, я хочу ограничить его непосредственно перед каждым текстом. Я пытаюсь добавить position: absolute
в rect-img
класс, и он удаляет некоторое пространство, но текст под изображением исчезает. Как я могу это решить? С уважением
Ответ №1:
Если вы стремитесь к отзывчивости, используйте flexbox на .rect-img-контейнере
.programs_content {
display: grid;
grid-gap: 10px;
padding-top: 4em;
grid-auto-flow: row;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
grid-template-rows: minmax(auto, 1fr);
column-gap: 10px;
row-gap: 10px;
}
.rect-img-container {
display: flex;
flex-direction: column;
justify-content: center; /* or space-around || space-evenly */
}
.rect-img {
width: 100%;
height: 40%;
object-fit: cover;
}
.caption {
font-weight: bold;
text-align: center;
height: auto;
}
Ответ №2:
Пожалуйста, попробуйте с этим. Я верю, что это решит вашу проблему.
HTML
<div class="programs_content">
<div class="rect-img-container">
<a href="#">
<img class="rect-img" src="https://picsum.photos/id/237/200/300" alt="" />
</a>
<span class="caption">text1</span>
</div>
<div class="rect-img-container">
<a href="#">
<img class="rect-img" src="https://picsum.photos/id/237/200/300" alt="" />
</a>
<span class="caption">text2</span>
</div>
<div class="rect-img-container">
<a href="#">
<img class="rect-img" src="https://picsum.photos/id/237/200/300" alt="" />
</a>
<span class="caption">text3</span>
</div>
<div class="rect-img-container">
<a href="#">
<img class="rect-img" src="https://picsum.photos/id/237/200/300" alt="" />
</a>
<span class="caption">text4</span>
</div>
</div>
CSS:
.programs_content {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.rect-img-container {
display: grid;
text-align: center;
}
.caption {
font-weight: bold;
text-transform: capitalize;
}
Я сохранил его в минималистском стиле, чтобы его было легко понять. Основная концепция заключается в доработке элемента нашей сетки и принятии решения о том, как будет выглядеть один элемент.