使用CSS进行图像灰度处理并在鼠标悬停时重新着色?


86

我正在寻找一个带颜色的图标(并将成为链接),并将其变成灰度,直到用户将鼠标放在该图标上(然后该图标将对该图像进行着色)。

是否可以这样做,并且以IE和Firefox支持的方式进行?



如果您反过来这样做,会不会更有趣呢?让鼠标光标像魔术棒一样为黑暗世界带来色彩?
X10D

Answers:


242

有多种方法可以完成此操作,下面将通过一些示例详细说明。

纯CSS(仅使用一张彩色图像)

img.grayscale {
  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 3.5+ */
  filter: gray; /* IE6-9 */
  -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */
}

img.grayscale:hover {
  filter: none;
  -webkit-filter: grayscale(0%);
}

您可以在此处找到与此技术相关的文章

纯CSS(使用灰度和彩色图像)

这种方法需要图像的两份副本:一份是灰度的,另一份是全彩色的。使用CSS :hoverpsuedoselector,您可以更新元素的背景以在两者之间切换:

#yourimage { 
    background: url(../grayscale-image.png);
}
#yourImage:hover { 
    background: url(../color-image.png};
}

这也可以通过以hover()相同方式使用基于Java的悬停效果(例如jQuery的功能)来实现。

考虑第三方图书馆

去色库是一个公共库,可以让您轻松定元素或图像的灰度版本和全彩色版本之间切换。


如果需要将所述图像链接到其他网站,如果将图像设置为背景怎么办?

1
它将以相同的方式工作,请查看第1节中的演示。如果还有其他问题,我们将很乐意为您提供帮助。
里恩·威廉姆斯

1
伙计们,有没有人注意到这在Safari中不起作用?我刚刚检查并发现此问题,有什么方法可以解决?
延2014年

13

在这里回答:在HTML / CSS中将图像转换为灰度

您甚至不需要使用听起来很痛苦的两个图像或一个图像处理库,就可以通过跨浏览器支持(当前版本)来做到这一点,而只需使用CSS。这是一种渐进的增强方法,只是在较旧的浏览器上只能使用彩色版本:

img {
  filter: url(filters.svg#grayscale);
  /* Firefox 3.5+ */
  filter: gray;
  /* IE6-9 */
  -webkit-filter: grayscale(1);
  /* Google Chrome & Safari 6+ */
}
img:hover {
  filter: none;
  -webkit-filter: none;
}

和filters.svg文件是这样的:

<svg xmlns="http://www.w3.org/2000/svg">
  <filter id="grayscale">
    <feColorMatrix type="matrix" values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0" />
  </filter>
</svg>

6

我在http://www.diagnomics.com/上使用以下代码

从黑白到彩色的平滑过渡,并具有放大效果(比例)

    img.color_flip {
      filter: url(filters.svg#grayscale); /* Firefox 3.5+ */
      filter: gray; /* IE5+ */
      -webkit-filter: grayscale(1); /* Webkit Nightlies & Chrome Canary */
      -webkit-transition: all .5s ease-in-out;
    }

    img.color_flip:hover {
      filter: none;
      -webkit-filter: grayscale(0);
      -webkit-transform: scale(1.1);
    }

在webkit浏览器中效果很好!您的代码在Firefox浏览器中对我不起作用,但是再一次,我认为它与SVG文件有关,并且我在此小提琴jsfiddle.net/coolwebs/num04rya/10中使用了位图,但有些奇怪-过渡在Safari效应使得上翻转图像“混蛋” ....
瑞安Coolwebs


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.