在 :hover 上显示带有 GIF 的无 JS 响应图像

JS-less responsive images with GIF shown on :hover

目标:在悬停时显示动画的静态图像不超过容器宽度。

固定码:

/* wrapper paragraph*/
.rimg {
 text-align: center;
 overflow: hidden;
}
/* rely on contents for vertical size, show backgrund centered */
.rimg-gif, .rimg-png {
 display: block;
 position: relative;
 background-size: auto 100%;
 background-position: center;
 background-repeat: no-repeat;
 line-height: 0;
}
/* containers need max-width in IE */
.rimg img, .rimg-gif, .rimg-png {
 margin: 0;
 max-width: 99.99999%; /* Opera Mini ignores anything above this % */
 max-width: calc(100% - 0px); /* for proper browsers */
}
/* hide the GIF background unless hovered */
.rimg-gif:not(:hover) {
 background-image: none !important;
}
/* hide the static image when hovered */
.rimg-gif:hover img {
 opacity: 0;
}
<p class="rimg">
  <span class="rimg-png" style="background-image:url(https://i.imgur.com/iwczbln.png)">
    <a class="rimg-gif" target="_blank" href="https://i.imgur.com/TLxp2di.gif" style="background-image:url(https://i.imgur.com/TLxp2di.gif)">
      <img src="https://i.imgur.com/iwczbln.png">
    </a>
  </span>
  Description
</p>

最终结构:

这有一些问题:

其他详细信息:

如有不明之处,请告知。

经过反复试验,我设法自己解决了问题,因此我在问题中添加了有关解决方案和最终(工作)代码的注释。

我不是 100% 满意在 Android 上打开一个新标签(理想情况下应该在单击时播放),但是所有经过测试的浏览器在按返回时都会关闭此类弹出标签所以也许还不错。 我添加了一个 "play" 按钮,它还兼作移动设备的第一个触摸事件吸收器(最初完全覆盖 link,之后调整为 0% 宽度允许单击 link 的短暂延迟)。这适用于现代浏览器(第一次点击时触发 :hover 和动画播放,第二次点击时可以打开 link)和 Opera Mini(它只打开带有 GIF 的弹出选项卡)。例如,您可以在 here 中看到这一点。