有没有一种跨浏览器的方法可以使用CSS来改变图像的色调。例如,如果我有一个灰度图标(一个img
元素),我希望在悬停时将其颜色更改为棕褐色。
它必须适用于除IE以外的其他浏览器,因此我不能使用滤镜。是否有某种CSS 3技巧可以实现这一点?
如果你想在CSS中修改一张图片,是不可能的。但是你可以玩转opacity属性。是的,这只能设置图片的透明度,但它会产生很好的效果。下面是一个例子:
img{-webkit-transition:opacity .3s ease-in-out;}
img:hover{opacity:.6}
在CSS中没有一种准确的方法来实现这个,正如已经提到的,你可以利用其他技术来实现 - 即Javascript。
从非常基本的意义上讲,你可以尝试通过在图像上叠加一个带有类似于棕褐色的颜色和不透明度rgba(94, 38, 18, 0.2)
的div来模仿棕褐色风格,但这种方法相当粗糙。你甚至可以使用透明图像进行覆盖,这可能比这个选项好(但仍然相当糟糕)。
据我所知,目前还没有跨浏览器标准化的语法。但是,您可以使用HTML5 Canvas自己实现此效果。使用SVG
也可能有效,但我不确定所有浏览器,特别是Internet Explorer,对SVG
的支持情况如何。
以下是使用颜色矩阵变换的SVG示例: http://www.dhmedia.com.au/sites/default/files/examples/SVG-filters/sepia.xhtml
filter: grayscale(100%) sepia(100%) hue-rotate(90deg);
我知道回答这个话题已经很晚了,但我一直想做和你一样的事情,却找不到答案。但第一个人给了我启示。
我需要的是:一张图片被某种颜色着色,当我悬停在它上面时,它会恢复正常。所以我做了什么,我将背景颜色设置为我想要的颜色,然后降低了它的透明度。所以我得到了彩色的图像。当我悬停在它上面时,我将背景设置为透明,图像完全不透明。所以使用CSS可以通过背景颜色和不透明度对图像进行着色。
img {
background-color: rgba(122, 122, 122, 1);
opacity: 0.5;
transition: 0.5s ease-in-out;
-moz-transition: 0.5s ease-in-out;
-webkit-transition: 0.5s ease-in-out;
}
img:hover {
color: rgba(255, 255, 255, 0);
opacity: 1;
transition: 0.5s ease-in-out;
-moz-transition: 0.5s ease-in-out;
-webkit-transition: 0.5s ease-in-out;
}
对我来说它很好用。
<canvas>
来实现。 - Gabriele Petriolicanvas
元素。 - haynar