在 CSS 中使用多个背景仅将灰度应用于一个背景图像?

Applying gray scale only to one background image using Multiple Backgrounds in CSS?

是否可以让两张背景图片在悬停时只让其中一张变为黑白?

这里有一个例子:

<!DOCTYPE html>
<html>
<head>
<style> 
#example1 {
  background-image: url(img1.gif), url(img2.gif);
  background-position: right bottom, left top;
  background-repeat: no-repeat, no-repeat;
  height: 100px;
}
</style>
</head>
<body>
<div id="example1"></div>

</body>
</html>

我尝试使用 filter: grayscale(100%); 但不知道如何仅将其应用于 img1.gif 而不是 img1.gif & img2.gif

我不确定这是不是你想要的,但这是我做的:

<!DOCTYPE html>
<html>
<head>
<style> 
#example1  {
  background-image: url("img1.jpg"), url("img2.jpg");
  background-position: right bottom, left top;
  background-repeat: no-repeat, no-repeat;
  height: 100px;
  filter: grayscale(0%);

}
#img1:hover{
    filter: grayscale(100%);
}


</style>
</head>
<body>
<div id="example1">
  <div><img src="img1.jpg" alt="" id="img1"></div>
  <div><img src="img2.jpg" alt=""></div>
</div>

</body>
</html>

这有点 hack-y 但您可以添加包含“悬停”照片的叠加层并向其添加灰度滤镜。看看这个例子——它只使用了 2 张图片,而且都是彩色的。

(仅供参考,我已经为这个例子指定了 div 的高度和宽度,但这不是必需的)

#example1 {
background-image: url(https://lorempixel.com/output/nature-q-c-200-200-2.jpg), url(https://lorempixel.com/output/nature-q-c-200-200-5.jpg);
  background-position: right bottom, left top;
  background-repeat: no-repeat, no-repeat;
  height: 200px;
  width:400px;
  position:relative;
  border:1px solid #ccc;
}

#example1:hover:before {
  background-image: url(https://lorempixel.com/output/nature-q-c-200-200-5.jpg);
  background-position: left top;
  background-repeat: no-repeat;
  filter: grayscale(100%);
  content:"";
  position:absolute;
  top:0;
  bottom:0;
  left:0;
  right:0;  
  z-index:10;
}
<div id="example1"></div>

基本上,我们使用 before 创建一个 absolute-positioned 叠加层,覆盖 div 的完整尺寸(无论它是什么尺寸)。这仅包含与主 div 相同位置的要“变灰”的图像。它仅在悬停时使用 #example1:hover:before.

激活