在 ::before 伪元素上使用 CSS 过渡

Using CSS transition on ::before pseudo element

.posts .img-hover:before {
  content: '';
  display: block;
  opacity: 0;
  -webkit-transition: opacity 1.2s ease;
  -moz-transition: opacity 1.2s ease;
  -ms-transition: opacity 1.2s ease;
  -o-transition: opacity 1.2s ease;
  transition: opacity 1.2s ease-out;
}
.posts .img-hover:hover:before {
  content: '';
  display: block;
  background: url("img/Texture1.png");
  width: 320px;
  /* image width */
  height: 220px;
  /* image height */
  position: absolute;
  top: 13px;
  right: 2px;
  opacity: 1;
}
<div class="posts">
  <a href="#">
    <h2 class="postname"> 
         Travel Flashback #1 </h2>
  </a>
  <a class="img-hover" href="#">
    <img width="960" height="720" src="http://.." class="img-hover" alt="" />
  </a>
</div>

这段代码有一个问题。如您所见,我想过渡到具有 bkg img.

的伪元素 ::before

当我悬停时,过渡很顺利,但是当我离开鼠标时,bkg img 立即消失,没有过渡。

你能给些建议吗?

悬停时,您可能只需要与过渡相关的 css,而不是伪元素的实际样式。试试这个

.posts .img-hover:before {
    content: '';
    display: block;
    background: url("img/Texture1.png");
    width: 320px; /* image width */
    height: 220px; /* image height */
    position: absolute;
    top: 13px;
    right: 2px;
    opacity: 0;
    -webkit-transition: opacity 1.2s ease;
    -moz-transition: opacity 1.2s ease;
    -ms-transition: opacity 1.2s ease;
    -o-transition: opacity 1.2s ease;
    transition:  opacity 1.2s ease-out;
}
.posts .img-hover:hover:before{
    opacity: 1;
}

对于浏览此论坛的其他人,我来到这个线程时遇到了完全相同的问题,我试图从

切换过渡焦点
opacity 0.35s ease-in-out

至:

all 0.35s ease-in-out

问题已解决。 我的浏览器是 Chromium 版本 80.0.3987.162,Debian Linux 10.4