#html #css #flexbox
#HTML #css — код #гибкий ящик
Вопрос:
У меня есть отзывчивая галерея изображений с сеткой из двух столбцов. Я хочу, чтобы при наведении курсора на каждое изображение отображался текст — по сути, слой непрозрачности над изображением с центрированным текстом посередине. Это то, что я пробовал до сих пор, но текст делает:
.row {
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
padding: 50px;
}
.column {
-ms-flex: 50%;
flex: 50%;
max-width: 50%;
}
.column_img {
padding: 30px;
vertical-align: middle;
width: 100%;
}
@media screen and (max-width: 1000px) {
.column {
-ms-flex: 100%;
flex: 100%;
max-width: 100%;
}
}
.img_text {
position: absolute;
background: rgba(185, 90, 90, 0.85);
color: #222529;
visibility: hidden;
opacity: 0;
<div class="row">
<div class="column">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<p class="img_text">Image 01</p>
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<p class="img_text">Image 02</p>
</div>
<div class="column">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<p class="img_text">Image 03</p>
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<p class="img_text">Image 04</p>
</div>
</div>
Комментарии:
1. Вам нужно поддерживать (определенную версию) IE? Просто судите на основе
-ms-flex
свойств, которые у вас есть здесь.
Ответ №1:
Вам нужно перенести изображение и текст в родительский div, чтобы получить возможность использовать его для hover
состояния. Ваш css также нуждается в некоторых изменениях. Это ваш желаемый результат?
.row {
display: -ms-flexbox;
display: flex;
flex-direction:column;
}
.column {
display:flex;
width:100%;
flex-direction:row;
justify-content: space-between;
}
.wrapper {
position:relative;
width: 50%;
}
.wrapper:hover .img_text {
visibility:visible;
opacity:1;
}
.img_text {
position: absolute;
display:flex;
align-items:center;
justify-content:center;
background: rgba(185, 90, 90, 0.85);
color: #222529;
visibility: hidden;
opacity: 0;
top:0;
left:0;
right:0;
bottom:0;
width:100%;
height:100%;
text-align:center;
}
@media screen and (max-width: 1000px) {
.column {
-ms-flex: 100%;
flex: 100%;
max-width: 100%;
}
}
<div class="row">
<div class="column">
<div class="wrapper">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<div class="img_text"><p>Image 01 </p></div>
</div>
<div class="wrapper">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<div class="img_text"><p>Image 02 </p></div>
</div>
</div>
<div class="column">
<div class="wrapper">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<div class="img_text"><p>Image 03 </p></div>
</div>
<div class="wrapper">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<div class="img_text"><p>Image 04 </p></div>
</div>
</div>
</div>
Ответ №2:
Как сказал Аристидис, сначала ваш HTML нуждается в некоторых изменениях. Если вы собираетесь использовать «перенос», вам не нужно создавать строки и столбцы.. просто создайте родительский div для каждого изображения и текста. make тоже гибкий, поэтому вы можете центрировать все.
.flex-container {
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
gap: 10px;
margin: 50px;
}
.image-column {
-ms-flex: 50%;
flex: 50%;
max-width: 45%;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
@media screen and (max-width: 1000px) {
.image-column {
-ms-flex: 100%;
flex: 100%;
max-width: 100%;
}
}
.img_text {
position: absolute;
z-index: 1;
background: rgba(185, 90, 90, 0.85);
color: #222529;
font-size: 24px;
padding: 10px;
display: none;
}
.image-column:hover > .img_text {
display: inline-block;
}
<div class="flex-container">
<div class="image-column">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<p class="img_text">Image 01</p>
</div>
<div class="image-column">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<p class="img_text">Image 02</p>
</div>
<div class="image-column">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<p class="img_text">Image 03</p>
</div>
<div class="image-column">
<img class="column_img" src="https://via.placeholder.com/50" style="width:100%">
<p class="img_text">Image 04</p>
</div>
</div>