центрирование и растягивание на всю ячейку элемента со свойством `position: absolute;` внутри grid-макета
Уже третий час бьюсь над задачей и никак не получается решить.
Есть вертикальный grid-макет. Внутри ячейки грид расположена картинка. Над картинкой надо разместить по центру текст и затенить фон. Текст позиционирую через position: absolute;, но он таким образом позиционируется не относительно ячейки, а относительно всего grid-макета.
Подскажите как разместить тест по центру зеленого блока и растянуть текстовый блок на весь зеленый фон (затенить картинку).
Уже размещал внутри дополнительного блока, пробовал разные способы позиционирования, но результата нет.
*,*:before,*:after {
padding: 0;
margin: 0;
border: 0;
box-sizing: border-box;
}
.grid {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr;
width: 10em;
height: 100vh;
}
.one {background-color: red;}
.two {
background-color: green;
padding: 1em;}
.three {background-color: yellow;}
.two img {
border-radius: 0.05em;
background-color: #054a71;
border: 0.2em solid white;
box-shadow: 0 0 0.2em 0.2em rgba(0,0,0,0.5);
object-fit: cover;
width: 100%;
height: 100%;
}
.two h6 {
display: grid;
position: absolute;
justify-items: center;
left: 0;
text-transform: uppercase;
color: white;
width: 100%;
background-color: rgba(0,0,0,.5);
}
<div class="grid">
<div class="one"></div>
<div class="two">
<img src="https://jjji.ru/800x550">
<h6 class="grid-inner">проблемный текст</h6>
</div>
<div class="three"></div>
</div>
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Ключевое слово здесь - "относительно" aka relative:
*,
*:before,
*:after {
padding: 0;
margin: 0;
border: 0;
box-sizing: border-box;
}
.grid {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr;
width: 10em;
height: 100vh;
}
.one {
background-color: red;
}
.two {
position: relative;
background-color: green;
padding: 1em;
}
.three {
background-color: yellow;
}
.two img {
border-radius: 0.05em;
background-color: #054a71;
border: 0.2em solid white;
box-shadow: 0 0 0.2em 0.2em rgba(0, 0, 0, 0.5);
object-fit: cover;
width: 100%;
height: 100%;
}
.two h6 {
display: grid;
position: absolute;
place-items: center;
top:0;
left: 0;
text-transform: uppercase;
color: white;
height: 100%;
width: 100%;
background-color: rgba(0, 0, 0, .5);
}
<div class="grid">
<div class="one"></div>
<div class="two">
<img src="https://jjji.ru/800x550">
<h6 class="grid-inner">проблемный текст</h6>
</div>
<div class="three"></div>
</div>