所以我有一个像这样的CSS:
.three-image-widget div.hover-icon img.original { display: block; }
.three-image-widget div.hover-icon img.hovered { display: none; }
.three-image-widget div.hover-icon:hover img.original { display: none; }
.three-image-widget div.hover-icon:hover img.hovered { display: block; }
我将.original
张图片设为.png
,.hovered
张图片是我想要开始的动画.gif
,当鼠标悬停在div.hover-icon
元素上时。我知道可以通过这样的JavaScript黑客来做到这一点:
$('div.hover-icon').hover(function(){
$(this).find('.original').hide();
var hov = $(this).find('.hovered'),
copy = hov.attr('src');
hov.attr('src','').attr('src',copy);
});
但是我能用纯CSS做等效的吗?
答案 0 :(得分:3)
不,你不能。你需要重新加载GIF,CSS不能这样做。
答案 1 :(得分:2)
我能用纯CSS解决的最接近的事情是更改:hover
上的网址,但它只会重置一次:
div {
background-image: url(http://i.imgur.com/6wffOji.gif);
height:50px;
width: 100px;
}
div:hover {
background-image: url(http://i.imgur.com/6wffOji.gif?v=1);
}
<div></div>
此方法要求您使用background-image
代替<img>
代码。
编辑:另一种方法是将GIF图像转换为1列精灵,其中每个帧都放在一行中,彼此相对,然后使用CSS @keyframes
和{{ 1}}为了更好地控制图像动画,你可以反转,交替,控制持续时间等。
简单GIF(动画):
GIF精灵(无动画,静态图片):
代码:
animation
div {
height:50px;
width: 100px;
background-image: url(http://i.imgur.com/3YMNTbS.gif);
}
div:hover {
animation: gif steps(6) 0.5s forwards;
}
@keyframes gif {
to {background-position: 0 100%;}
}
如您所见,<div></div>
状态会触发:hover
动画关键帧。 gif
函数是这里的关键,它将逐步遍历帧而不是连续转换。 steps(n)
是精灵中的帧数。
我用SpritePlane用Photoshop生成精灵。创建精灵很容易,尺寸大致相同,你可以保存JPEG以获得更多压缩,或者保存PNG以获得平滑的alpha通道(也可以压缩)。