CSS: маска с вложенным изображением наследует непрозрачность - PullRequest
0 голосов
/ 30 апреля 2020

Я создаю маску для видеоконтейнера, чтобы при наведении на него надписи отображалась темная маска с кнопкой воспроизведения / паузы внутри. Проблема заключается в том, что стрелка вложена в элемент mask, который имеет прозрачность, поэтому вложенный img наследует эту прозрачность. Я попытался изменить opacity на background: rgba(255,255,255,0.5), который я нашел в других решениях, но это не сработало, так как фон, кажется, скрыт видео. У меня нет идей.

<div class="video-container>
  <video src="video.mp4"></video>
  <div class="mask>
      <img class="arrow" src="arrow.png" />
   </div>
</div>

CSS

.video-container {
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
    margin-right: 50px;
    flex-direction: column;
    img {
        position: absolute;
        z-index: 555;
        &:hover {
            cursor: pointer;
        }
    }
    .mask {
        width: 100%;
        height: 100%;
        position: absolute;
        background: #000;
        opacity: 0.0;
        display: flex;
        justify-content: center;
        align-items: center;
        transition: opacity 0.7s ease;
        &:hover {
            transition: opacity 0.7s ease;
            opacity: 0.5;
            cursor: pointer;
        }
    }
}

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

А как насчет двух разных фонов? Один для маски и другой для стрелки: Я попробовал здесь

.video-container {
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
  margin-right: 50px;
  flex-direction: column;

  img {
    position: absolute;
    z-index: 555;

    &:hover {
      cursor: pointer;
    }
  }
  img.arrow {
    width:20px;
    heigth:20px;
  }

  .mask {
    width: 100%;
    height: 100%;
    position: absolute;
    display: flex;
    justify-content: center;
    align-items: center;

    &:hover .bg-mask {
        transition: opacity 0.7s ease;
        opacity: 0.5;
    }
    &:hover .bg-arrow {
        transition: opacity 0s ease;
        opacity: 1;
    }
    .bg-mask {
      position:absolute;
      width: 100%;
      height: 100%;
      background: #000;
      transition: opacity 0.7s ease;
      opacity: 0.0;

    }
    .bg-arrow {
      position:absolute;
      width: 100%;
      height: 100%;
      display: flex;
      justify-content: center;
      align-items: center;
      transition: opacity 0s ease;
      opacity: 0.0;
    }
  }
}
0 голосов
/ 30 апреля 2020

Решение, использующее непрозрачность: 1 в состоянии наведения и фон с альфа-каналом, как вы и хотели. Я изменил видео и изображение, чтобы не использовать внешние ресурсы.

  .video-container {
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
  margin-right: 50px;
}

#video {
  background: linear-gradient(red, blue);
  height: 300px;
  width: 400px;
}

.arrow {
  position: absolute;
  z-index: 5;
  font-size: 30px;
  color: green;
}

.arrow:hover {
    cursor: pointer;
}

.mask {
  width: 100%;
  height: 100%;
  position: absolute;
  background: #0002;
  opacity: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  transition: opacity 0.7s ease;
}
.mask:hover {
    opacity: 1;
    cursor: pointer;
  }
<div class="video-container">
  <div id="video"></div>
  <div class="mask">
    <div class="arrow">arrow</div>
  </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...