我正在尝试使用下面概述的技术将元素从灰度转换为颜色:
CSS
.technical .tech-icon {
width: 33px;
height: 32px;
display: inline-block;
filter: url(filters.svg#grayscale); /* Firefox 3.5+ */
filter: gray; /* IE6-9 */
-webkit-filter: grayscale(1); /* Google Chrome & Safari 6+ */
-webkit-transition: all 0.5s ease-out; /* Safari 3.2+, Chrome */
-moz-transition: all 0.5s ease-out; /* Firefox 4-15 */
-o-transition: all 0.5s ease-out; /* Opera 10.5–12.00 */
transition: all 0.5s ease-out; /* Firefox 16+, Opera 12.50+ */
}
对于firefox,我们有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>
如何模仿适用于Chrome,IE9等的转换属性?
编辑:我希望让我的过渡属性与我的Firefox SVG修复一起使用。
答案 0 :(得分:4)
您可以将包含灰度版本的额外元素叠加到颜色版本。然后你动画不透明......
.technical .tech-icon {
position: relative;
...
}
.technical .tech-icon .grayscale {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
opacity: 0;
-webkit-filter: grayscale(1);
filter: url(filters.svg#grayscale); /*Firefox*/
filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)
filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0); /*IE*/
}
对于不支持CSS过渡的浏览器,您可以使用jQuery的fadeIn()
答案 1 :(得分:0)
您可以使用以下内容:
@-webkit-keyframes grayscale-anim {
from { -webkit-filter: grayscale(0); }
to { -webkit-filter: grayscale(1); }
}
.grayscale {
-webkit-animation: grayscale-anim 2s ease-in-out;
-webkit-animation-direction: alternate;
-webkit-animation-iteration-count: infinite;
}
以下是小提示演示:http://jsfiddle.net/SeL2G/
但需要注意的是,目前CSS过滤器仅在webkit浏览器中实现。出于兼容性原因,您可以使用Javascript作为后备解决方案。这是一个很小的库,使用Javascript:http://www.ajaxblender.com/howto-convert-image-to-grayscale-using-javascript.html
做同样的工作