也许确实存在某种 `background-opacity`?

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费积分!

我正在阅读 Jake 的 “目前无法实现任何两个 DOM 元素的交叉淡入淡出”,这是一篇关于如何真正无法以字面意义交叉淡入淡出元素的精彩的极客深度文章。是的,您可以同时为它们的透明度设置动画,但这也不是完全相同。事实证明,Chrome/WebKit 中有一个名为 `-webkit-cross-fade()` 的仅限于 CSS 的函数调用可以解决此问题。 MDN 表示 它是指定的,但已实现的版本有所不同,因此有点乱……但它确实存在。

.el {
  background: -webkit-cross-fade(url(img1.svg), url(img2.svg), 50%);
}

我甚至不知道有这个东西。

我首先想到的是:如果其中一个图像只是一个空白的透明图像,它是否会将部分透明度应用于另一个图像?因此,它有点像 `background-opacity` 的代理(它不存在,但感觉应该存在)。

我进行了一个测试以查看它是否有效。

它似乎有效! 这是它的核心内容。

.el {
  background-image: -webkit-cross-fade(
    url(image.jpg),
    url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),
    50%
  );

这是一个 1px 透明 GIF 的 Base64 编码

它在 Firefox 中不起作用,但在其他所有浏览器中都起作用。此外,您可以在 CSS 中测试支持,并在这不是增强功能时执行其他操作。

@supports (background: -webkit-cross-fade(url(), url(), 50%)) {

  /* Only apply the idea if supported, do the Firefox fallback outside of this */

}

这已烘焙到上面的演示中。