Это не так, как это работает.position: absolute
удаляется из родительского потока.Что фактически означает: «его родитель ведет себя так, как будто у него нет его как ребенка» .
Итак, когда у вас есть два элемента, которые вы хотите перекрыть, вы даете один из них position:absolute
(тот, который должен игнорироваться родителем), и вы оставляете содержимое, которое должно иметь размер родителя , не располагая (или со значением position
static
или relative
) (вы оставляете его в потоке, что позволяет ему определять размер родительского элемента).
См. этот ответ для более подробного объяснения.
Если выЕсли вы хотите изменить размер своего изображения на основе текущего содержания родителя, лучше всего использовать его как background-image
для родителя.background-size
позволяет изменить его размер соответственно (cover
, contain
и т. Д.):
*{
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.container{
position: relative;
width: 30%;
min-width: 250px;
background: url(https://via.placeholder.com/400x300) no-repeat center /cover;
}
.caption{
display: flex;
flex-direction: column;
padding: 20px;
background-color: rgba(0, 0, 150, .2);
}
.caption .caption-text{margin: auto; text-align: center;}
<div class="container">
<div class="caption">
<div class="caption-text">
<h3>Hello World</h3>
<p>Some random text</p>
</div>
</div>
</div>
Обратите внимание, что я удалил position:absolute
из содержимого, которое я хочу определить по размеру родительского (потому что я хочу, чтобы он по размеру соответствовал родительскому).
Очевидно, что вы можете добиться того же самого, все еще используя тег <img>
и позиционируя его как абсолютный и следя за тем, чтобы он отображался под содержимым, но background
изначально был разработан для этой цели, поэтому имеет смысл использовать его.
Для ударов вот как это будет выглядеть с позиционированным абсолютом <img>
:
a) содержит:
*{
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.container{
position: relative;
width: 30%;
min-width: 250px;
}
.container .positioner {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: -1;
display: flex;
align-items: center;
justify-content: center;
}
.positioner img {
max-width: 100%;
max-height: 100%;
}
.caption{
display: flex;
flex-direction: column;
padding: 20px;
background-color: rgba(0, 0, 150, .2);
}
.caption .caption-text{margin: auto; text-align: center;}
<div class="container">
<div class="positioner">
<img src="https://via.placeholder.com/400x300">
</div>
<div class="caption">
<div class="caption-text">
<h3>Hello World</h3>
<p>Some random text</p>
</div>
</div>
</div>
б) обложка:
*{
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.container{
position: relative;
width: 30%;
min-width: 250px;
}
.container .positioner {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: -1;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.positioner img {
max-width: 100%;
}
.caption{
display: flex;
flex-direction: column;
padding: 20px;
background-color: rgba(0, 0, 150, .2);
}
.caption .caption-text{margin: auto; text-align: center;}
<div class="container">
<div class="positioner">
<img src="https://via.placeholder.com/400x300">
</div>
<div class="caption">
<div class="caption-text">
<h3>Hello World</h3>
<p>Some random text</p>
</div>
</div>
</div>