Предотвращение роста контейнера при отображении текста легенды

Я пытаюсь остановить рост контейнера моего изображения и подтекста, когда текст отображается при наведении. В данный момент при наведении курсора вы можете видеть, что размер элемента Portugal__item изменяется, чтобы он соответствовал тексту, а цвет его фона появляется внизу.

Я пробовал использовать position: absolute в тексте, но это делает позиционирование текста в середине изображения практически невозможным.

Вот ручка кода, которую я сделал, это копия того, над чем я работаю: https://codepen.io/Olivier42M/pen/oNzwGEL

HTML:

<div class = "wrapper"> 
 <div class = "portfolio">
    <a href = "" class = "portfolio__item">
      <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
      <div class = "portfolio__text">Legend text</div>
    </a>
     <a href = "" class = "portfolio__item">
      <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
      <div class = "portfolio__text">Legend text</div>
    </a>
     <a href = "" class = "portfolio__item">
      <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
      <div class = "portfolio__text">Legend text</div>
    </a>
     <a href = "" class = "portfolio__item">
      <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
      <div class = "portfolio__text">Legend text</div>
    </a>
     <a href = "" class = "portfolio__item">
      <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
      <div class = "portfolio__text">Legend text</div>
    </a>
   
 </div>
</div>

CSS:

body{
  margin:0;
  padding:0;
}

.wrapper{
  text-aligne: center;
}

.portfolio {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}

.portfolio__item {
    background-color: orange;
    text-decoration: none;
    overflow: hidden;
    
}

.portfolio__img {
    transition: 
        transform 750ms cubic-bezier(.5, 0, .5, 1),
        opacity 250ms linear;
}


.portfolio__item:focus {
    position: relative;
    z-index: 2;
}

.portfolio__img:hover,
.portfolio__item:focus .portfolio__img{
    transform: scale(1.2);
    opacity: .75;
}

.portfolio__text{
    z-index: 3;
    position: relative;
    color: white;
    margin-left: auto;
    font-size: 3em;
    bottom: 50%;
    opacity: 0;
    opacity: 0;
    height: 0;
    transition: 
        opacity 500ms linear;
    overflow: hidden;
}

.portfolio__item:hover .portfolio__text{
    opacity: 1;
    height: auto;
}
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Разница между тегами Br и Wbr в HTML 5
Разница между тегами Br и Wbr в HTML 5
В целом, оба тега <br> и <wbr> имеют свои уникальные цели и функциональные возможности, и их использование зависит от конкретных требований к дизайну...
HTML И VS CODE Для Веб-разработки
HTML И VS CODE Для Веб-разработки
Прежде чем начать кодировать html в "VS CODE", мы должны сначала создать папку и назвать ее x.html, здесь я принимаю x как имя файла, который мы...
Как использовать WAI-ARIA
Как использовать WAI-ARIA
В моем текущем новом проекте почти все компоненты не учитывают веб-доступность. Моя нынешняя компания - это стартап, поэтому они не заботились о...
Статическая веб-страница, созданная с помощью CSS и HTML - до и не до.
Статическая веб-страница, созданная с помощью CSS и HTML - до и не до.
Я потратил некоторое время на создание своего сайта-портфолио. Затем, гордясь собой, я разместил свой код на серверах amazon. Мне потребовалось время,...
2
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы эффект увеличения картинки работал без увеличения границ, нужно установить фиксированную высоту для родительского контейнера (тега <a>) тега <img>. Я отметил все правки в css.

body{
  margin:0;
  padding:0;
}

.wrapper{
  text-align: center;
}

.portfolio {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
    
    grid-gap: 10px; /*add this it*/
}

.portfolio__item {
    background-color: orange;
    text-decoration: none;
    overflow: hidden;
    display: inline-block; /*add this it*/
    height: 400px; /*add this it*/
}

.portfolio__img {
    transition: 
        transform 750ms cubic-bezier(.5, 0, .5, 1),
        opacity 250ms linear;
}


.portfolio__item:focus {
    position: relative;
    z-index: 2;
}

.portfolio__img:hover,
.portfolio__item:focus .portfolio__img{
    transform: scale(1.2);
    opacity: .75;
}

.portfolio__text{
    z-index: 3;
    position: relative;
    color: white;
    margin-left: auto;
    font-size: 3em;
    bottom: 50%;
    opacity: 0;
    opacity: 0;
    height: 0;
    transition: 
        opacity 500ms linear;
    overflow: hidden;
}

.portfolio__item:hover .portfolio__text{
    opacity: 1;
    height: auto;
}
<div class = "wrapper"> 
  <div class = "portfolio">
     <a href = "" class = "portfolio__item">
       <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
       <div class = "portfolio__text">Legend text</div>
     </a>
      <a href = "" class = "portfolio__item">
       <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
       <div class = "portfolio__text">Legend text</div>
     </a>
      <a href = "" class = "portfolio__item">
       <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
       <div class = "portfolio__text">Legend text</div>
     </a>
      <a href = "" class = "portfolio__item">
       <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
       <div class = "portfolio__text">Legend text</div>
     </a>
      <a href = "" class = "portfolio__item">
       <img src = "https://i.imgur.com/MKuGA17.jpeg" alt = "" class = "portfolio__img">
       <div class = "portfolio__text">Legend text</div>
     </a>
    
  </div>
</div>

Другие вопросы по теме