5

我只想使用 CSS在精灵图像的“背景位置”之间淡入淡出。我找到了很多教程,但我没有找到像这样简单的东西:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CSS3 - Fade between 'background-position' of a sprite image</title>
<style type="text/css">
div{
    width:  120px;
    height: 60px;

    background-image:       url('sprite.jpg');
    background-repeat:      no-repeat;
    background-position:    0   0;

}
div:hover{
    background-position:    0   -60px;
}
</style>
</head>
<body>
<div></div>
</html>

谢谢你。

4

4 回答 4

5

我找到了答案,无论如何,谢谢。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CSS3 - Fade between 'background-position' of a sprite image</title>
<style type="text/css">
#button{
    float:                  left;
    background-image:       url('sprite.jpg');
    background-position:    0 -60px;
    background-repeat:      no-repeat;

    width:              120px;
    height:             60px;
}
#button a{
    background-image:       url('sprite.jpg');
    background-position:    0 0;
    background-repeat:      no-repeat;

    width:              120px;
    height:             60px;

    display:            block; 
    text-indent:        -9999px; 

    transition:         opacity 0.3s ease-in-out;
    -moz-transition:    opacity 0.3s ease-in-out;
    -webkit-transition: opacity 0.3s ease-in-out;
    -o-transition:      opacity 0.3s ease-in-out;
}
#button a:hover, 
#button a:focus{ 
    opacity:            0; 
}


</style>
</head>
<body>
<div id="button"><a href="#"></a></div>
</html>
于 2013-04-09T11:11:04.653 回答
2

所以基本上,你需要执行两件事:hover

  1. background-position改变
  2. fadein影响

在这种情况下,CSS3 过渡将没有用。您可以使用 CSS3 动画属性。

动画属性接受name动画和持续时间。可以提供多个动画名称,以逗号分隔。

您需要定义这些动画名称。它们可以是您选择的任何字符串,但您需要定义它们。所以考虑这个CSS:

div:hover{
   animation: fadein 10s, bp 0.5s;
   -moz-animation: fadein 10s, bp 0.5s; /* Firefox */
   -webkit-animation: fadein 10s, bp 0.5s; /* Safari and Chrome */
   -o-animation: fadein 10s, bp 0.5s; 
    background-position:0 0;
}
@-webkit-keyframes fadein { /* Safari and Chrome */
    from {
        opacity:0;
    }
    to {
        opacity:1;
    }
}
@-webkit-keyframes bp { /* Safari and Chrome */
    from {
        background-position:-200px 0;
    }
    to {
        background-position:0 0;
    }
}

看到这个小提琴,完整的浏览器支持的动画

注意:它肯定不会在 IE<9 中工作!它可能在 IE9 中(不确定)。

于 2013-04-09T10:55:42.763 回答
2

你可以CSS3 Animation使用@keyframes

div:hover{
  animation: logo 2s 0 linear;
}
@keyframes logo{
  0%   { opacity: 1; }
  5%   { opacity: 0; }
  50%  { background-position: 0 -60px; opacity: 0; }
  100% { background-position: 0 -60px; opacity: 1; }
}

示例:http: //jsfiddle.net/Y8W9S/

当然,现在你必须调整你想要实现的时间和效果。

希望它对您有所帮助或指出正确的方向。

祝你好运。

于 2013-04-09T11:18:59.317 回答
0

像这样使用:

div{
    width:  120px;
    height: 60px;

    background-image: url('sprite.jpg');
    background-repeat: no-repeat;
    background-position: 0   0;
    transition: background-position 1s ease;

}

并且不要忘记可选的供应商前缀

编辑:

我注意到你需要褪色。您尝试类似这样的解决方案:

div{
    background: url(foo.jpg) no-repeat 0 0 transparent;
    transition: background: 1s ease;
}

div:hover{
    background: rgba(0, 0, 0, 1);
}

我不能试试这个,因为我来自手机。

于 2013-04-09T10:51:09.410 回答