我正在尝试仅使用 {strong> HTML5
和 {{1}来理解最简单的背景转换} 即可。通过stackoverflow搜索我已经了解到它可以使用CSS3
之类的外部库轻松实现,但对于这个项目,我决定不依赖于任何这些。
标记
jQuery
样式
<nav>
<ul>
<li><a id="foobar" href="http://www.google.com/search?q=foobar">Foobar</a></li>
</ul>
</nav>
答案 0 :(得分:7)
正如我在评论中提到的,您无法转换background-image
属性,但如果您愿意添加额外标记然后转换不透明度,则可以获得您正在寻找的那种效果。所以你会有这样的标记:
<nav>
<ul>
<li>
<img src="no-icon.png">
<img src="yes-icon.png">
<a id="foobar" href="http://www.google.com/search?q=foobar">Foobar</a>
</li>
</ul>
</nav>
然后设置图像的过渡,绝对定位它们(所以它们就像背景一样),并默认隐藏其中一个(为了清晰起见,我省略了供应商扩展):
nav li img {
position: absolute;
transition-duration: 1.5s;
opacity: 1;
}
nav li img:first-child {
opacity: 0;
}
然后在li:hover
上交换不透明度值:
nav li:hover img {
opacity: 0;
}
nav li:hover img:first-child {
opacity: 1;
}
Here's a full working example。不是理想的解决方案,因为你必须添加额外的标记,但它会起作用。
答案 1 :(得分:2)
以下是我用来实现此目的的代码示例。图像是精灵,每个都包含正常和悬停状态。诀窍是将img添加到li和a中,并使用不透明度来更改图像的外观。然后,您可以使用css3过渡使其显得更流畅。
<ul id="homenav">
<li class="h"><a href="#><span>Home</span></a></li>
<li class="i"><a href="#"><span>Inloggen</span></a></li>
<li class="v"><a href="#"><span>Voorbeelden</span></a></li>
</ul>
#homenav li.h, #homenav li.h a {background-image: url('img/btn_home.gif');}
#homenav li.i, #homenav li.i a {background-image: url('img/btn_inloggen.gif');}
#homenav li.v, #homenav li.v a {background-image: url('img/btn_voorbeelden.jpg');}
#homenav li {background-position: 0 170px;}
#homenav li a {background-position: 0 0;}
#homenav li a:hover
{opacity: 0;
-webkit-transition: opacity .8s ease-in;
-moz-transition: opacity .8s ease-in;
-o-transition: opacity .8s ease-in;
transition: opacity .8s ease-in;}
#homenav a {display: block; height: 100%;}
#homenav a span {display: none;}