我有两个图像,它们都需要在HTML中(因此没有背景图像),并且在悬停一个图像时,它会交换为另一个。
我以为我的代码有效,但似乎有点毛病。我无法解决这个问题。
JSFiddle:http://jsfiddle.net/5tCju/
这是我的CSS:
#wrapper img.on,
#wrapper.gridWrap img.on {
display:none;
}
#wrapper img.default:hover img.on,
#wrapper img.default:hover img.on {
display:inline;
}
#wrapperimg.default:hover,
#wrapper img.default:hover {
display:none;
}
通过在display:block;
和display:inline;
之间交换图片,可以做任何事情吗?
答案 0 :(得分:5)
要使其正常工作,您需要将:hover
伪类设置为父容器(.wrapper
)而不是图像。
#wrapper
{
display: inline-block;
}
#wrapper:hover img.default,
#wrapper img.on
{
display:none;
}
#wrapper:hover img.on,
#wrapper img.default
{
display:inline-block;
}
答案 1 :(得分:0)
这是Pure CSS解决方案。
<强> WORKING DEMO 强>
HTML:
<div class="images"> </div>
CSS:
.images{background: url(http://icons.iconarchive.com/icons/icojoy/maneki-neko/256/cat-2-icon.png) no-repeat 0 0; height:300px; width:300px;}
.images:hover{background: url(https://si0.twimg.com/profile_images/2940708431/842924fb3e2cc1f7fddf1b195c3f6c81.jpeg) no-repeat 0 0; height:300px; width:300px; cursor:pointer;}
我希望这就是你要找的东西。
答案 2 :(得分:0)
简单的CSS解决方案:
#wrapper img { position: absolute; float: left; }
#wrapper .on { display: none; }
#wrapper:hover .on { display: block; }
反转版本:
#wrapper img { position: absolute; float: left; }
#wrapper:hover .on { display: none; }
答案 3 :(得分:0)
使用display
属性强制浏览器重新创建页面流,从而闪烁。通常的解决方案是避免使用<img>
标记并使用background-image
,但是,如果您想使用当前标记,则只需将一个图像放在另一个图像上方即可:
#wrapper{
position: relative;
}
#wrapper img{
position: absolute;
}
...并隐藏/显示第二个:
#wrapper img.on{
opacity: 0;
}
#wrapper img.on:hover{
opacity: 1;
}
display
可能会更好,但我还没有尝试过。
答案 4 :(得分:0)
#wrapper img.on{
display:none;
}
#wrapper:hover img.default{
display:none;
}
#wrapper:hover img.on{
display:block;
}
<强> UPDATED FIDDLE 强>
你的错误是你没有正确使用:hover
。 .on
不是.default
的孩子,这就是#wrapper img.default:hover img.on
语句无效的原因.. .on
和.default
都是#wrapper
的孩子这就是为什么你应该使用:hover
作为你的包装来改变图像